2016-06-22 13 views
0
後に実行していない

I持って、それは私が私のドキュメントに挿入cmdFormPreencherという名前のボタンでクリックした後に実行することを意図するVBA(MS Wordなど)に次のコード:VBA:コードはToggleFormsDesign

Private Sub cmdFormPreencher_Click() 
' 
If ActiveDocument.FormsDesign = False Then 
    ActiveDocument.ToggleFormsDesign 
End If 
' 
ThisDocument.cmdFormPreencher.Select 
ThisDocument.cmdFormPreencher.Delete 

ActiveDocument.ToggleFormsDesign 

' 
UserForm2.Show 
End Sub 

上記のコードの目的は、私の文書に挿入されたボタンを削除することです。私は、コードを実行すると しかし、唯一のボタンが選択されています。デバッグで何が起きているのかを調べようとすると、コードが実行され、残りのコードが実行されていないことがわかりました。

これはVBAのバグですか?何か間違っていますか?もしそうなら、どうやってこの問題を回避することができますか?

ありがとうございます!

:ActiveXボタンはヘッダーとフッターにありません。テキストの回り込みがテキスト

編集の前にに設定されています:

私はFormDesignを活性化、マクロを実行しようとすると、ActiveXのボタンを選択してから削除、私はこのコードを取得します

Sub Macro1() 
' 
' Macro1 Macro 
' 
' 
    ActiveDocument.ToggleFormsDesign 
    ActiveDocument.Shapes("Control 52").Select 
    Selection.ShapeRange.Delete 
    ActiveDocument.ToggleFormsDesign 
End Sub 

しかし、私は何も起こりません。このコードを実行する...

+0

あなたはここで 'ActiveDocument.ToggleFormsDesign'を2回持っています...コードは' ThisDocument.cmdFormPreencher.Select'と '.Delete'をスキップして最初のものの後で停止しますか?または2番目のものの後で停止します。 UserForm2.Show'? –

+0

@ Mat'sMug最初の1つ後 – tdmsoares

答えて

1

これは仕様によるものです。 Officeアプリケーションがデザインモードのとき、コードはドキュメントの一部であるActiveXオブジェクト上で実行されるべきではありません。

私はそれ、これはActiveXのボタンであり、その場合には、それはInlineShapesまたはShapesコレクションのメンバーで取る - Wordには、グラフィックオブジェクトのようにそれを処理します。あなたの代わりにボタンのアイコンとして表示するには、それを変更することで行うことができますグラフィカルな表現を、削除するのに十分でなければなりません。 InlineShapeため例えば

、:

Sub DeleteActiveX() 
    Dim ils As word.InlineShape 

    Set ils = ActiveDocument.InlineShapes(1) 
    ils.OLEFormat.DisplayAsIcon = True 
    ils.Delete 
End Sub 

あなただけのInlineShapeや形状を特定する方法を見つけ出す必要があります。 InlineShapeをブックマークすることができます。 ShapeにはNameプロパティがあります。

EDIT:コメントで提供、その後の情報に基づいているので、あなたがShapeオブジェクトを持っている、というよりもInlineShape、以下のアプローチが動作するはずです:Wordが自動的にShape.Nameプロパティに何かを割り当てます

Dim shp As word.Shape 

Set shp = ActiveDocument.Shapes("Shape Name") 'Index value can also be used 
shp.Delete 

注意、しかし、ActiveXのの場合にはこれらの名前は明らかに理由もなく変更することができます制御します。あなたは、インデックス値の代わりにその名前を使用してコントロールを識別もしそうなら、それは、Wordは「気まぐれに」変更されません名前を自分で、割り当てることがはるかに良いです。

  1. アクティブデザインモード。
  2. 「イミディエイトウィンドウ」
  3. タイプ(希望の名前に置き換えて)以下に焦点を置くためにVBエディタウィンドウにそれを選択するためのコントロールをクリック

  4. ゴー
  5. はCtrl + G、その後、実行するためにEnterキーを押します。

    Selection.ShapeRange(1).NAMEは=

  6. 上記のコードでは、この Name

  7. 使用する "名前割り当てます"

+0

はいそれはActiveXボタンです。 InlineShapeの数を把握するのは今問題です... InlineShapesがセレクションパネルに表示されている別の記事を読んでいますが、ActiveXボタンが表示されていなくてもアクセスできます。それを発見する? – tdmsoares

+0

インラインシェイプを番号1に割り当てようとしました:インラインシェイプ= ActiveDocument.InlineShapes(1)を設定しましたが、エラー5941が発生しました。 "要求されたメンバーが存在しません" – tdmsoares

+0

シェイプではないInlineShapeですか?グラフィカルに、テキストラップまたはインラインでフォーマットされていますか?ヘッダー、フッター、その他何もないのですか? –