Vba 通过方法初始化子类
我有一个例程,它有一个foo类。类foo包含类bar,但不初始化它。在我的例程中,我将父方法的foo类栏作为对象传入。然后,接收方法将foo的bar初始化为新的bar 由于某些原因,当我稍后引用foo时,bar并没有初始化。在另一个方法中是否有初始化foo的bar的方法Vba 通过方法初始化子类,vba,Vba,我有一个例程,它有一个foo类。类foo包含类bar,但不初始化它。在我的例程中,我将父方法的foo类栏作为对象传入。然后,接收方法将foo的bar初始化为新的bar 由于某些原因,当我稍后引用foo时,bar并没有初始化。在另一个方法中是否有初始化foo的bar的方法 <Class Foo> Option Explicit Public mybar As Bar <Class Bar> Option Explicit Public theText As Strin
<Class Foo>
Option Explicit
Public mybar As Bar
<Class Bar>
Option Explicit
Public theText As String
<Main Module>
Public Sub Test()
Dim myfoo As New foo
Dim abar As Bar
Derp myfoo.mybar
myfoo.mybar.theText = "Test"
End Sub
Public Sub Derp(ByRef mybar As Bar)
Set mybar = New Bar
End Sub
选项显式
公共mybar作为酒吧
选项显式
将文本作为字符串公开
公共子测试()
Dim myfoo作为新foo
暗阿巴尔酒吧
Derp myfoo.mybar
myfoo.mybar.theText=“测试”
端接头
公共子Derp(ByRef mybar作为Bar)
设置mybar=新条形图
端接头
当代码遇到myfoo.mybar.thetext=“Test”时,我收到一个错误91,对象变量或未设置块变量
我通过一个特定于供应商的系统使用VBA,VBA版本6.5.1054。要使代码正常工作,您需要做一些非常小的改进。您需要在
foo类
中完全初始化bar类
。因此,不是这一行:
Public mybar As Bar
把它换成这个:
Public mybar As New Bar
但是,在主模块中还有一些需要改进的地方。因此,我这样做了,它起作用了:
Public Sub Test()
Dim myfoo As New foo
Dim abar As New Bar
myfoo.mybar.theText = "Test"
End Sub
如果需要保留Derp
sub,则abar变量必须为public
评论后编辑
现在我对你们的需求有了更好的理解,所以我建议用这种方式来解决
保持条形分类
不变
Foo类
需要额外的方法,允许在需要时初始化boo类
。完成Foo类
代码:
Option Explicit
Public mybar As Bar
Sub BarInit()
Set mybar = New Bar
End Sub
您的主模块
应该与下面的代码类似(查看子模块中的注释):
正如您所看到的,初始化仍然保留在foo类中,但只有在调用BarInit方法时才被调用要使代码正常工作,您需要做相当小的改进。您需要在foo类
中完全初始化bar类
。因此,不是这一行:
Public mybar As Bar
把它换成这个:
Public mybar As New Bar
但是,在主模块中还有一些需要改进的地方。因此,我这样做了,它起作用了:
Public Sub Test()
Dim myfoo As New foo
Dim abar As New Bar
myfoo.mybar.theText = "Test"
End Sub
如果需要保留Derp
sub,则abar变量必须为public
评论后编辑
现在我对你们的需求有了更好的理解,所以我建议用这种方式来解决
保持条形分类
不变
Foo类
需要额外的方法,允许在需要时初始化boo类
。完成Foo类
代码:
Option Explicit
Public mybar As Bar
Sub BarInit()
Set mybar = New Bar
End Sub
您的主模块
应该与下面的代码类似(查看子模块中的注释):
正如您所看到的,初始化仍保留在foo类中,但仅在调用BarInit方法时调用
我有意不在foo中初始化bar,因为在某些情况下,bar不存在,我测试它是否为空。Foo实际上包含三个不同的条,我希望我可以通过传递适当的条来概括一些可以在所有三个条上调用的方法。看起来这可能是不可能的。我故意不在foo中初始化bar,因为在某些情况下,bar不存在,我测试它是否为空。Foo实际上包含三个不同的条,我希望我可以通过传递适当的条来概括一些可以在所有三个条上调用的方法。看起来这可能是不可能的。