我想知道Sheet1和设置工作表之间的区别

我有一个脚本是在模块1,检查是否一个选项button被点击。

选项button被放置在名为“Info”的Sheet1中,所以我认为下面的脚本将工作

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

但是当我这样做,它说没有find方法或数据成员。 只有我用它来replace它才会起作用

 … Debug.print Sheet1.optClicked … 

任何人都可以告诉我为什么发生这种情况?

将Sheet1视为“工作表”的“子类” – 将控件添加到工作表时,您将添加新成员。 通用工作表对象没有代表您的选项button,而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 
 Set Page = ActiveWorkbook.Worksheets("Info") should work. I think worksheets is no real property in VBA... 

此外,你的debugging打印代码看起来很奇怪,使用debug.print(“bla”)..你有Option显式激活?

尝试Set Page = Worksheets("Info") ,不要使用这些curl的引号 – 以防万一(对于Excel公式这很重要)。

Worksheets中的参数是您感兴趣的工作表的名称,即“Sheet1”。

其他方法:工作表上的ActiveX控件可以从两个集合中访问: ShapesOLEObjects 。 您可以使用OLEObjects集合来访问您的checkbox。

 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