VBA:是否可以将一个类创建/定义为特定的类,而不是另一个现有的类?

时间:2018-08-08 15:39:12

标签: excel vba excel-vba class

我想知道在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

上面的“例如”显然不起作用,但这是我想尽可能实现的总体思路。

谢谢!

1 个答案:

答案 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
  1. 您需要通过导出删除此类(删除SpecialWorkbook->是->选择位置)。

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

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

现在您可以通过以下方式使用它:

Sub F()
    MsgBox SpecialWorkbook.Path
End Sub

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