1

我有一个类 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 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,Object variable or With block variable not set。

我正在通过供应商特定系统 VBA 版本 6.5.1054 使用 VBA。

4

1 回答 1

1

为了让你的代码工作,你需要做一些很小的改进。您需要bar classfoo 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子,那么您abar variable必须是公开的。

评论后编辑 现在我对您的需求有了更好的了解,因此我建议以这种方式解决它。

  1. 保持bar class不变
  2. Foo class需要额外的方法,允许boo class在需要时进行初始化。完整Foo class代码:

    Option Explicit
    
    Public mybar As Bar
    
    Sub BarInit()
        Set mybar = New Bar
    End Sub
    
  3. 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.

于 2013-05-28T18:34:27.560 回答