【问题标题】:Function to create an instance of a class in VBA在 VBA 中创建类的实例的函数
【发布时间】:2020-02-11 16:25:09
【问题描述】:

我正在尝试使用 VBA 中的函数来创建我已定义的类的新实例。

数据如下:

Address 1        | Address 2
123 Sample Ln NW | 1        
123 Sample Ln NW | 2    

该类已在名为“Apt”的类模块中定义,如下所示:

Option Explicit

Public Add1 As String
Public Add2 As String

我想使用一个函数来返回这个类的一个实例(因为我必须从几个不同的子例程中执行它)。

Sub TestIssue2()

    Dim i As Integer
    i = 2

    currApt = makeApt(i)

    MsgBox (currApt.Add1 & ", " & currApt.Add2)

End Sub


Function makeApt(i As Integer) As Object

    Dim x As New Apt
    x.Add1 = Worksheets("Sheet1").Range("A" & i).Value
    x.Add2 = Worksheets("Sheet1").Range("B" & i).Value

    makeApt = x

End Function

我明白了:

“运行时错误'91':对象变量或未设置块变量”。

我的尝试:

  1. 我发现如果我在子例程中定义实例,它确实有效,所以这确实有效:
Sub TestIssue1()

    Dim i As Integer
     i = 2

    Dim currApt As New Apt
    currApt.Add1 = Worksheets("Sheet1").Range("A" & i).Value
    currApt.Add2 = Worksheets("Sheet1").Range("B" & i).Value

    MsgBox (currApt.Add1 & ", " & currApt.Add2)

End Sub
  1. 搜索“使用函数 VBA 来创建新的类实例”的多种变体后,我找到了 this tutorialthis tutorial 这样的网站,但两者都在谈论将函数存储在类中,而不是使用函数来创建。李>
  2. 我可以在此站点上找到的最接近的问题是this question,其中一些答案似乎表明我想要的东西是可能的。然而,这个问题提出了一个不同的问题,似乎并没有提供这个问题的答案。

【问题讨论】:

    标签: excel vba


    【解决方案1】:

    你有几个小错误。首先在 TestIssue2() 中必须定义 currApt,然后在分配时使用Set 关键字。所以这就变成了:

    Sub TestIssue2()
    
        Dim i As Integer
        i = 2
        Dim currApt As Apt
    
        Set currApt = makeApt(i)
    
        MsgBox (currApt.Add1 & ", " & currApt.Add2)
    
    End Sub
    

    其次,你应该让你的 makeApt 函数返回一个 Apt(而不是一个对象),并使用 Set 关键字。像这样:

    Function makeApt(i As Integer) As Apt
    
        Dim x As New Apt
        x.Add1 = Worksheets("Sheet1").Range("A" & i).Value
        x.Add2 = Worksheets("Sheet1").Range("B" & i).Value
    
        Set makeApt = x
    
    End Function
    

    现在应该可以正常工作了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多