Как передать объект в метод получения свойства класса VBA без получения ошибки «Объект не определен»? - PullRequest
2 голосов
/ 04 октября 2019

При передаче рабочего листа в метод объекта класса я получаю:

Ошибка 91: переменная объекта или переменная блока не задана.

Проблема в том, что я не знаю, где это, я не установил объект.

Dim WS As Worksheet
Set WS = oExport.ExportSheet(oExport.WB)

Dim testint As Integer
Dim oAsset As clsAsset
testint = oAsset.AssetIDCol(WS)

Я проверил, и объект листа правильно задан в строке 2 кода. Ошибка возникает при назначении значения переменной 'testint'. Вот свойство .AssetIDCol() из моего свойства clsAsset:

Option Explicit

Private priv_asset_id_col As Integer

Public Static Property Get AssetIDCol(WS As Worksheet) As Integer

   If Not priv_asset_id_col = Null Then
        AssetIDCol = priv_asset_id_col
        Exit Property
   End If

   Dim rngX As Range
   Dim Val As Variant
   Dim i As Integer

   Set rngX = WS.UsedRange '.Rows(1) '.Find(SearchVal, LookAt:=xlWhole)

   For i = 1 To rngX.Columns.Count

   If InStr(priv_asset_id_col_name, rngX.Cells(1, i).Value) > 0 Then
       AssetIDCol = i
       priv_asset_id_col = i
       Exit Property
   End If

   Next i

   AssetIDCol = 0

End Property

Как исправить эту ошибку? Свойство Get возвращает целое число, поэтому я не уверен, где мне не удается использовать Set при создании экземпляра.

1 Ответ

2 голосов
/ 04 октября 2019

Ошибка появляется, потому что oAsset объявлен, но не инициализирован.

Самый простой способ исправить это написать Dim oAsset As New clsAsset вместо Dim oAsset As clsAsset. Таким образом, вы ссылаетесь на новый объект при объявлении.

Другой способ - это явно установить новый объект с новой строкой после ее объявления:

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