Workbooks.Add 工作簿在 Class

Workbooks.Add with Workbook in Class

1.Intro

这是我的第一个 VBA 项目,也是我的第一个 post。所以请原谅我,如果…… 它尝试了我在网上能找到的所有东西,我想了好几天,最后放弃了。 我以我理解网络推荐的方式做了几个 class 实现。不幸的是,这个(但其他的)不起作用。如果我放弃使用 PRIVATE 的数据封装它会工作,但似乎不是干净的编程。 我复制了下面代码的重要部分。这应该足以重现错误 (91)。 我希望有人知道一些神奇的字符。我想应该不多吧。

提前致谢, 芒提

2。基础设施

PC:Win7Enterprise-64 SP1,Excel365 ProPlus-32 (1808)

3。代码

Class 模块

Option Explicit
Private resWrkBook As Workbook         'resultXLS - Result workbook

‘Properties
Public Property Let resultXLS(ByVal resultXLS As Workbook)    'Write value to class variable
    Set resWrkBook = resultXLS                                               'Assign value to property
End Property

Public Property Get resultXLS() As Workbook     'Read value from class variable
    Set resultXLS = resWrkBook                  'Return value from property
End Property

编程模块

Option Explicit

Public Sub main()
    Dim wbs As XlsClass_Module         'declaration

    ‘Short (version S)
    Set wbs.resultXLS = Workbooks.Add    '=> Error 91

    ‘Long (version L, alternative)
    Dim wrk As Workbook
    Set wbs = New XlsClass_Module       'instance of Workbook Class
    Set wrk = Workbooks.Add
    Set wbs.resultXLS = wrk                 '=> Error 91
End Sub

这是工作的 class 模块和工作的主要代码。请看以下代码:

    Option Explicit

    Private resWrkBook As Workbook         'resultXLS - Result workbook

    'Properties
    Public Property Set resultXLS(ByVal resultXLS As Workbook)   'Write value to class variable
        Set resWrkBook = resultXLS                                               'Assign value to property
    End Property

    Public Property Get resultXLS() As Workbook     'Read value from class variable
        Set resultXLS = resWrkBook                  'Return value from property
    End Property

现在,需要更改的调用代码(注意 NEW 关键字):

    Public Sub main()
        Dim wbs As XlsClass_Module          'declaration

        Set wbs = New XlsClass_Module

        'Short (version S)
        Set wbs.resultXLS = Workbooks.Add    '=> Error 91

        'Long (version L, alternative)
        Dim wrk As Workbook
        Set wbs = New XlsClass_Module       'instance of Workbook Class
        Set wrk = Workbooks.Add
        Set wbs.resultXLS = wrk                 '=> Error 91
    End Sub

此外,对于您使用 SET 的变量,您需要将它们设置为空,以便释放内存:

EX: set wbs = Nothing