0

オプション ボタンがクリックされたかどうかをチェックするスクリプトが module1 にあります。

オプションボタンは「Info」という名前のSheet1に配置されているので、以下のスクリプトが機能すると思いました

Sub checkClicked()
    dim Page as worksheet
    set Page as worksheets(“Info”)
    Debug.print Page.optClicked 
End sub

しかし、このようにすると、メソッドまたはデータメンバーが見つかりませんと表示されます。に置き換えた場合にのみ機能します

… 
Debug.print Sheet1.optClicked
…

なぜこれが起こるのか、誰かが私に洞察を与えることができますか?

4

5 に答える 5

2

Sheet1 を「ワークシート」の「サブクラス」と考えてください。シートにコントロールを追加すると、新しいメンバーが追加されます。ジェネリック ワークシート オブジェクトには、オプション ボタンを表すメンバーがありませんが、Sheet1 にはあります。

Sub Test()

    Dim sht As Worksheet
    Dim sht1 As Sheet1

    Set sht = ThisWorkbook.Sheets("Sheet1")
    Set sht1 = Sheet1

    Debug.Print sht.optClicked  'error
    Debug.Print sht1.optClicked 'OK

End Sub
于 2013-02-19T00:28:58.950 に答える
1
Set Page = ActiveWorkbook.Worksheets("Info") should work. I think worksheets is no real property in VBA...

また、デバッグ印刷コードが奇妙に見えます。debug.print("bla") を使用してください。 Option explicit を有効にしていますか?

于 2013-02-18T22:07:51.730 に答える
1
于 2013-02-18T22:08:10.127 に答える
0

他のアプローチ: シート上の ActiveX コントロールは、 ShapesOLEObjectsの 2 つのコレクションからアクセスできます。OLEObjects コレクションを使用して、チェックボックスにアクセスできます。

Sub checkClicked()
    Dim Page As Worksheet
    Set Page = Worksheets("Info")

    ' 1/ ActiveX check box in Shapes collection
    Dim myShape As Shape
    Set myShape = Page.Shapes("optClicked")
    ' --------------------------------------

    ' 2/ ActiveX check box in OLEObjects collection
    Dim myOLEObject As OLEObject
    Set myOLEObject = Page.OLEObjects("optClicked")

    ' Use Object property to get access to your check box
    Dim myCheckBox As Variant
    Set myCheckBox = myOLEObject.Object

    If (TypeOf myCheckBox Is MSForms.CheckBox) Then
      Debug.Print myCheckBox.value
    End If
End Sub
于 2013-02-19T08:26:43.057 に答える
0

Worksheets 内の引数は、関心のあるワークシートの名前、つまり「Sheet1」です。

于 2013-02-18T22:04:14.640 に答える