【问题标题】:Workbooks.Add with Workbook in ClassWorkbooks.Add with Workbook in Class
【发布时间】:2019-01-22 21:33:16
【问题描述】:

1.简介

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

提前致谢, 骑马

2。基础设施

PC:Win7Enterprise-64 SP1、Excel 365 ProPlus-32 (1808)

3。代码

类模块

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

【问题讨论】:

  • Public Property Let resultXLS(ByVal resultXLS As Workbook) 的行更改为Public Property Set resultXLS(ByVal resultXLS As Workbook),它应该可以工作。
  • 不幸的是,这并没有解决它。到目前为止,我使用 Let 和 Get 来封装所有班级成员(正如我从网上了解到的那样)并且它有效。我刚刚测试了你的方法。结果(错误 91)不幸的是和以前一样。
  • 糟糕...改成Public Property Set resultXLS(ByRef resultXLS As Workbook)
  • 对不起,我尽力了,但仍然出现同样的错误。我在调查中看到的是,将新工作簿分配给类变量肯定有问题。但我不知道如何解决它。

标签: excel vba class add


【解决方案1】:

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

    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 的变量,您需要将它们设置为空,以便释放内存:

例如:set wbs = Nothing

【讨论】:

  • 我已经将它带入了我的环境,对其进行了测试并且它可以工作。你为我节省了很多时间!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-06
  • 2013-11-14
  • 2022-08-18
  • 1970-01-01
  • 2022-12-27
  • 1970-01-01
相关资源
最近更新 更多