excel - 在 VBA 中创建类的实例的函数
问题描述
我正在尝试使用 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':对象变量或未设置块变量”。
我试过的:
- 如果我在子例程中定义实例,我发现它确实有效,所以这确实有效:
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
解决方案
你有几个小错误。首先在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
它现在应该可以正常工作了。
推荐阅读
- winapi - 如何仅使用标准库写入 Windows 上的备用屏幕缓冲区?
- sql - 汇总其余值
- vue.js - 更改页面时禁用过渡
- angular - 具有 ngx-translate 依赖项的 Angular 6 单元测试
- profiling - Class::DBI - 它会加载所有表吗?
- delphi - FireDAC“无法完成对主机的网络请求”
- wxwidgets - wx.Grid 和 ScrolledWindows
- javascript - 如何使用 react-swipe-card 在 React 中构建可堆叠的卡片?
- python - Python 'dict' 对象没有属性 'status'
- node.js - 在 NodeJS 中获取和发布文本