首页 > 解决方案 > 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

上面的“例如”显然不起作用,但如果可能的话,这是我想实现的一般想法。

提前致谢!

标签: vbaexcelclass

解决方案


你需要的是静态类。

要使其正常工作,您只需进行一项更改。说,你有这个类叫做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
  1. 您需要通过导出删除此类(删除 SpecialWorkbook -> 是 -> 选择位置)。

  2. 在任何文本编辑器中打开 SpecialWorkbook.cls 并更改Attribute VB_PredeclaredId = FalseAttribute VB_PredeclaredId = True.

  3. 保存更改并重新导入此类模块。

现在你可以这样使用它:

Sub F()
    MsgBox SpecialWorkbook.Path
End Sub

添加您需要的其他属性和方法。


推荐阅读