vba - VBA:是否可以将一个类创建/定义为特定的而不是另一个现有的类?
问题描述
我想知道在 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
上面的“例如”显然不起作用,但如果可能的话,这是我想实现的一般想法。
提前致谢!
解决方案
你需要的是静态类。
要使其正常工作,您只需进行一项更改。说,你有这个类叫做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
添加您需要的其他属性和方法。
推荐阅读
- google-bigquery - Firebase Analytics 数据导出到 BigQuery 需要多长时间
- javascript - Youtube loadPlaylist 并不总是有效
- excel - 在另一个工作簿选项卡中搜索单元格值并打印数据
- python - 在 python 中对 webscraper 进行多线程处理。线程库
- pandas - 如何将带有列表的字典解压缩到数据框中?
- docker - Docker nginx ERR_EMPTY_RESPONSE
- python - 创建用户后,如何将用户与 django 模型链接?
- r - Dplyr 转换与收集
- android - AccessibilityService 开启会导致 Android 10 上的麦克风静音
- python - 查找在子字符串中连续出现的特定模式的最大出现次数 [Python]