在Excel中,我在用户表单中有一个公共子表,我试图从类模块调用它。当我以正常方式运行它时,我得到一个运行时错误91“Objectvariable或blockvariable With is not set”。然后,当我进入调试模式到错误发生的位置(在类模块内)并按F8前进一步时,它确实移动到下一步,实际上进入并执行用户表单内的sub。我做错了什么?
一些旁注:
- 我使用Class Module的原因是我在用户表单上的控件是动态生成的(用户表单可能会显示多达30次相同的按钮,每次都引用不同的“记录”(相当于一个项目行))
- 在类模块本身中有更多的代码,并且在操作用户窗体上的控件时运行良好
- 用户表单中的Sub是Public,当我在Class Module中键入名称时,它会自动完成
- 当我从用户表单中调用它时,公共子程序本身也可以完美地工作
代码的简化版本:
在类模块中,我有:
Private Sub MinEvents_click()
Dim MinArt As MSForms.TextBox
'A piece of code that works fine
Call ScanTool.CheckPickingCompleet
'More code that works fine
End sub
在名为“ScanTool”的用户表单中,我有:
Public Sub CheckPickingCompleet()
If ArtScan.Text = Me.Controls("Label_AantalArtikelen_" & GescandArtikel) Then
'Here I do the actions required
ElseIf ArtScan.Text > Me.Controls("Label_AantalArtikelen_" & GescandArtikel) Then
'And here I have other actions
End If
End Sub
提前感谢您的帮助,因为我这边很可能有一个非常基本的疏忽。
2条答案
按热度按时间cyej8jka1#
您必须创建一个对forms类模块的引用,类似于以下内容
u0sqgete2#
在黑猫的帮助下(谢谢)和一些进一步的实验,我现在已经得到了它的工作。我必须在form类中显式地引用form,而不是使用“Me”。form类中的代码现在为
我必须在form类的sub中执行SET,而不是在class模块中,并且我必须忽略New。我假设这是因为我不想创建新的示例,因为它是我现有的示例,所有动态创建的控件都在其中