我想知道在VBA中是否可以定义和创建作为另一个现有类对象的特定实例的类对象。例如,我想创建一个名为SpecialWorkbook的类,该类具有特定于我目录中唯一工作簿(类)的属性。这些属性包括路径,名称,全名(路径和名称),密码等。
我知道可以访问Application.Workbook类的所有属性-
With Application.Workbooks(SpecialWorkbook.Name)
-但由于SpecialWorkbook类不具有标准Workbook类的属性和方法,因此对于用户而言,这条路线似乎不直观。
是否可以做类似的事情:
'In Class Module "SpecialWorkbook"
Private Sub Class_Initialize()
Dim SpecialWorkbook as Workbook
Set SpecialWorkbook = Application.Workbook("SpecialFileName.xlsx")
End Sub
然后像这样使用它:
'In Standard Module
SpecialWorkbook.sheets.count
上面的“例如”显然不起作用,但这是我想尽可能实现的总体思路。
谢谢!
答案 0 :(得分:0)
您需要的是静态类。
要使其正常工作,您只需要进行一项更改。假设您有一个名为SpecialWorkbook
的课程:
Option Explicit
Private m_workbook_path As String
Private Sub Class_Initialize()
m_workbook_path = "C:\Temp\static_class\mybook.xlsx"
End Sub
Public Property Get Path() As String
Path = m_workbook_path
End Property
您需要通过导出删除此类(删除SpecialWorkbook->是->选择位置)。
在任何文本编辑器中打开SpecialWorkbook.cls,并将Attribute VB_PredeclaredId = False
更改为Attribute VB_PredeclaredId = True
。
保存更改并将该类模块重新导入。
现在您可以通过以下方式使用它:
Sub F()
MsgBox SpecialWorkbook.Path
End Sub
添加所需的其他属性和方法。