Excel VBA:找不到数据成员

Gui*_*lle 2 excel vba compiler-errors

此问题与 VBA 编译错误“未找到方法或数据成员”有关。我在许多与此标题类似的问题中寻找我的问题的答案,但我实际上没有找到它。

我有一个这样声明的工作表对象

Dim wDef As Worksheet
Run Code Online (Sandbox Code Playgroud)

然后我这样设置:

Set wDef = ThisWorkbook.Worksheets("Deformata")
Run Code Online (Sandbox Code Playgroud)

在工作表中,有一个名为 CheckBox2 的复选框。如果我尝试使用以下代码为其分配值:

ThisWorkbook.Worksheets("Deformata").CheckBox2.Value = True
Run Code Online (Sandbox Code Playgroud)

语句成功。但是,如果我使用之前设置的对象,它就会失败;代码如下:

wDef.CheckBox2.Value = True
Run Code Online (Sandbox Code Playgroud)

任何人都可以解释为什么在一种情况下该语句正确执行,而在另一种情况下却给出了如下所示的错误?

在此输入图像描述

我不是VBA魔术师,但ThisWorkbook.Worksheets(“Deformata”)和wDef不应该是完全相同的对象吗?

Tim*_*ams 5

当您将 [ActiveX] 控件添加到工作表时,或者如果您将代码添加到工作表代码模块时,就好像您正在创建开箱即用对象的特定“子类” Worksheet:添加常规工作表没有。

常规工作表没有(例如)名为 的成员CheckBox2,因此当 VBA 尝试解析时会出现编译时错误ws.CheckBox2(因此会出现该错误消息)

如果 - 正如 BigBen 建议的那样 - 您As Object在声明时使用wsthen 该类型足够通用,VBA 不会针对 运行编译时检查CheckBox2,则可以在运行时解析它。就像早期绑定与后期绑定一样。

ThisWorkbook.Worksheets("Deformata")在运行时解决,因此也不会给出错误。

也许这里最好的方法是为您的工作表指定一个特定的代号(与选项卡名称不同),以便您可以使用该代号直接引用它,而不必将其声明为变量。请参阅https://learn.microsoft.com/en-us/office/vba/api/excel.worksheet.codename