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

jfgube3f  于 2023-02-05  发布在  其他
关注(0)|答案(2)|浏览(167)

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

上面的“例如”显然不工作,但这是一般的想法,我想实施,如果可能的话。
先谢了!

o4tp2gmn

o4tp2gmn1#

您需要的是静态类。
为了让它工作,你只需要做一个改变,比如,你有一个名为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 -〉是-〉选择位置)。
1.在任意文本编辑器中打开SpecialWorkbook.cls,并将Attribute VB_PredeclaredId = False更改为Attribute VB_PredeclaredId = True
1.保存更改并导回此类模块。
现在,您可以按以下方式使用它:

Sub F()
    MsgBox SpecialWorkbook.Path
End Sub

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

bjp0bcyl

bjp0bcyl2#

这是不可能的,也不是真的需要。我只想引用一个特定的对象,而不是多个示例。因此,我只需要一个 Package 器:

Sub test()

    Debug.Print SpecialWorkbook.Name
    Debug.Print SpecialWorkbook.Sheets.Count

End Sub

Function SpecialWorkbook() As Workbook

    Set SpecialWorkbook = Workbooks.Open("C:\Temp\mybook.xlsx")
    
End Function

这里假设“C:\Temp\mybook.xlsx”存在,并且是我的特殊工作簿。

相关问题