2

ExcelのさまざまなワークシートにActiveXコマンドボタンがたくさんあります。

ボタンのいずれかがクリックされたら、ボタンの横のセルに文字列を入れたいと思います。

TopLeftCellこれまでのところ、ボタンのようにボタンの値を尋ねることはできず、コントロールの値と値Form controlだけを尋ねることができるため、これは非常に面倒です。すべてのシートにさまざまなセルの高さ/幅があるため、これらを行と列に変換するのは簡単ではありません。TopLeft

すべてのセル位置をハードコーディングしないようにしたいbutton_Click()ので、ボタンを問題なく動かしたり、シートを変更したりできます...したがって、突然テキストが表示されたときにすべてのボタンのコードを変更する必要はありません2 1つのセルではなく、ボタンの横にあるセル。

4

1 に答える 1

1

Andrew Poulsonがここで概説したように、このクラスモジュールアプローチを使用して、すべてのボタンに対応できます。

私はあなたのコメントを理解していませんでしたTopLeftCell-それはActiveXボタンで利用可能です

Class Module

`named as Class1

Public WithEvents ButtonGroup As CommandButton

Private Sub ButtonGroup_Click()
    Sheets(ButtonGroup.Parent.Name).Cells(ButtonGroup.TopLeftCell.Row, ButtonGroup.TopLeftCell.Column) = "Done"
End Sub

Normal Module

Dim Buttons() As New Class1

Sub Class_Init()
    Dim Sh As Worksheet
    Dim Obj As OLEObject
    Dim ButtonCount As Integer
    For Each Sh In ThisWorkbook.Worksheets
        For Each Obj In Sh.OLEObjects
            If TypeName(Obj.Object) = "CommandButton" Then
                ButtonCount = ButtonCount + 1
                ReDim Preserve Buttons(1 To ButtonCount)
                Set Buttons(ButtonCount).ButtonGroup = Obj.Object
            End If
        Next Obj
    Next Sh
End Sub
于 2012-07-17T10:43:43.853 に答える