excel - VBA - 试图了解如何调用类模块
问题描述
我正在通过 Google、YouTube 等学习 VBA。我遇到了 Class Modules。
我有一个Tracker Template
.
每隔几天我就会收到一份报告("Ice cream FG Inv.xlsm"
)
Class Modules
在试图WBIceCreamFGINVxlsm
理解Ice Cream FG Inv.xlsm Workbook
.
例子:
Public Property Get wsinventory() As Worksheet
Set wsinventory = Workbook.Worksheets("Inventory")
End Property
在我的模块中,我想引用wsinventory
,但不完全了解如何“调用”类模块..
两个工作簿都是打开的。
我试着从:
Dim Data As Variant
Data = wsinventory.Range("A1").CurrentRegion.Value (**Variable not Defined**)
然后我尝试了:
Dim wsinventory As Worksheets
With wsinventory
Dim Data As Variant
Data = .Range("A1").CurrentRegion.Value (**Object variable or With variable not set**)
End With
我还需要使用:
Dim DataSource As Workbook
Set DataSource = Workbooks("Ice Cream FG Inv.xlsm")
With DataSource.Worksheets("Inventory")
End With
如果是这样,使用类模块的原因是什么?
解决方案
您需要先创建一个类对象,然后才能访问该类的属性。
假设你有这个类并命名它TestClass
:
Private pwsinventory As Worksheet
Public Sub init()
Set pwsinventory = Worksheets("Inventory")
End Sub
Public Property Set wsinventory(lwsinventory As Worksheet)
Set pwsinventory = lwsinventory
End Property
Public Property Get wsinventory() As Worksheet
Set wsinventory = pwsinventory
End Property
您可以像这样设置/获取属性:
Sub test()
Dim datacls As TestClass
Dim data As Worksheet
Set datacls = New TestClass
Set datacls.wsinventory = Worksheets("inventory")
Set data = datacls.wsinventory
Debug.Print data.Name
End Sub
然而,这有点奇怪,当你有一个不想设置的属性(你需要传递一个参数)时,你应该使用一个启动函数。不幸的是,如果不在创建类对象后手动调用该 sub,我就无法做到这一点。
Sub Test2()
Dim datacls As TestClass
Set datacls = New TestClass
datacls.init
Debug.Print datacls.wsinventory.Name
End Sub
我使用类的最常见情况是更好的容器。通常在数组/字典中存储许多相同的类类型,所以很清楚我在调用什么,特别是如果我需要为每个实例以相同的方式修改数据。
推荐阅读
- regex - 如何使正则表达式对多个值唯一
- ios - 当 UIViewController 重新聚焦时调用什么函数?
- android - 设置 DigitsKeyListener 时小数分隔键不可见
- php - 如何使用codeigniter在excel中循环导出多个用户的出勤情况
- javascript - 如何获得一组生成的 D3.js 元素中每个元素的高度?
- java - getIndexInfo 为复合主键返回错误的唯一列
- typescript - 将自定义模块转换为类型定义文件 (*.d.ts)
- python - Alembic:从脚本中的模式比较中获取 SQL 输出
- dart - 在小部件上显示对话框
- tsql - SQL 卡住,否则语法错误