我是一个有foo类的例程。类foo包含类栏,但不初始化它。在我的例程中,我将父方法的foo类栏作为对象传入。接收方法然后将foo的条形初始化为新条形。
出于某种原因,当我稍后引用foo时,bar未初始化。反正有没有在另一种方法中初始化foo的栏?
<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
当代码遇到myfoo.mybar.thetext =“Test”时,我收到错误91,对象变量或With块变量未设置。
我通过供应商特定系统VBA版本6.5.1054使用VBA。
答案 0 :(得分:1)
为了让您的代码工作,您需要进行很小的改进。您需要在bar class
内完全初始化foo class
。因此,而不是这一行:
Public mybar As Bar
将其改为这一个:
Public mybar As New Bar
但是,您的Main Module
还需要改进一些内容。因此我这样做了它的工作原理:
Public Sub Test()
Dim myfoo As New foo
Dim abar As New Bar
myfoo.mybar.theText = "Test"
End Sub
如果您需要保留Derp
sub,那么您的abar variable
必须公开。
评论后修改 现在我对你的需求有了更好的了解,因此我建议以这种方式解决它。
bar class
不变 Foo class
需要其他方法,以便在需要时初始化boo class
。完成Foo class
代码:
Option Explicit
Public mybar As Bar
Sub BarInit()
Set mybar = New Bar
End Sub
您的Main module
应该看起来不像下面的代码(看看Sub中的评论):
Public Sub Test()
Dim myfoo As New Foo
'this will not work at this stage, _
kept to show the problem, Error 91, _
please remove it after test
myfoo.mybar.theText = "test"
'initialize Bar class within Foo class _
using Foo class method
myfoo.BarInit
'now will work as it's initialized
myfoo.mybar.theText = "test"
Debug.Print myfoo.mybar.theText
End Sub
正如您所见,初始化仍然保持在foo class
范围内,但只有在需要时才会调用BarInit method
。