2012-01-17 10 views
3

次のスクリプトを使用してExcelでボタンを作成していますが、範囲はどこに配置したいのですか?VBAボタンのコレクションを削除する

Sub CreateAddButton(rng As Range) 
    Dim btn As Button 
    With Worksheets("User") 
     Set btn = .Buttons.Add(rng.Left, rng.Top, rng.width, rng.Height) 
     With btn 
      .name = "Add" 
      .Caption = "Add Column" 
      .OnAction = "CreateVariable" 
     End With 
    End With 
End Sub 

この方法で生成されたすべてのボタンを削除できる方法が問題ですか?可能であれば、グローバル変数から遠ざけたいと思っています。どんな援助も感謝して受け取ります。 James

+3

は、名前に特定の接頭辞または接尾辞を使用して、すべてのボタンにタグを付けることができます:あなたは、ループができましたシート上のすべてのボタンを使用して、その接頭辞/接尾辞が名前に含まれていた場所を削除します。 –

+0

私はそれをするためにあなたに何らかのゴルバール変数を持たなければならないでしょう、そして、私はすべてのグローバル変数を取り除こうとしています。 – James

+0

なぜグローバル変数が必要なのでしょうか?あなたはそうしない! (グローバル変数としてExcelインスタンス全体を数えない限り)@brettdjの実装を参照してください。 –

答えて

3

私はTimのメソッドに特定の名前を使用することをお勧めします。グローバル変数は必要ありません。たとえば、あなたは、各ボタン名に 「_ || ForDeletion」サフィックスを追加することができ、その後Formsボタンは別の代替けれども(しゃれが意図していない)、あなたを提供し、削除ルーチン

.Name = "Add_||ForDeletion" 

にそれを探しますAlternativeTextの「プロパティ」、「Web」の下にテキストを格納し、これを削除ルーチンの識別子として使用できます。範囲をループするとき

下部にある[削除ルーチンがエラーを回避するために後方に動作

enter image description here

Sub TesMe() 
    Call CreateAddButton([a2]) 
End Sub 

Sub CreateAddButton(rng As Range) 
    Dim btn As Button 
    With Worksheets("User") 
     Set btn = .Buttons.Add(rng.Left, rng.Top, rng.Width, rng.Height) 
     With btn 
      .Name = "Add" 
      .Caption = "Add Column" 
      .OnAction = "CreateVariable" 
      .ShapeRange.AlternativeText = "MyCollection" 
     End With 
    End With 
End Sub 


Sub GetMyButtons() 
    Dim btns As Object 
    Dim lngRow As Long 
    Set btns = Sheets("User").Buttons 
    For lngRow = btns.Count To 1 Step -1 
     If btns(lngRow).ShapeRange.AlternativeText = "MyCollection" Then 
      MsgBox "Found one", vbCritical 
      btns(lngRow).Delete 
     End If 
    Next 
End Sub 
+1

どうもありがとうございました。 – James

0

VBAのボタンはShapesコレクションにあります。あなたは使用することができます。

Sub deleteButtons() 
Dim btn As Shape 

For Each btn In ActiveSheet.Shapes 
    If btn.AutoShapeType = msoShapeStyleMixed Then btn.Delete 
Next 

End Sub 

msoShapeStyleMixedは、すべてのフォームとActiveXコントロールのタイプのようです。

+0

それはすばらしいことですが、私はページ上に保持する必要があるいくつかのボタンがあります。削除したいボタンを特定できる唯一の方法は、名前またはキャプションのプロパティのいずれかであると私は思う。 – James

関連する問題