Рабочие тетради - PullRequest
       1

Рабочие тетради

0 голосов
/ 23 января 2019

1.Intro

Это мой первый проект VBA и мой первый пост. Поэтому, пожалуйста, прости меня, если ... Он перепробовал все, что я мог найти в Интернете, и я мог думать в течение нескольких дней и, наконец, сдался. Я сделал несколько реализаций классов так, как я понимал веб-рекомендации. К сожалению, этот (но другие) не работает. Если бы я отказался от инкапсуляции данных с помощью PRIVATE, это бы сработало, но, похоже, это не чистое программирование. Я скопировал основную часть кода ниже. Этого должно быть достаточно, чтобы воспроизвести ошибку (91). Я надеюсь, что кто-то знает некоторых магических персонажей. Я думаю, это не так много.

Спасибо заранее, Mounty

2. Инфраструктура

ПК: 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

1 Ответ

0 голосов
/ 23 января 2019

Вот модуль класса, который работает, и основной код, который работает.Пожалуйста, смотрите следующий код:

    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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...