Итак, я учусь использовать словари, но столкнулся с проблемой типа. В приведенном ниже коде я получаю сообщение об ошибке.
Несоответствие типов
Каждый раз, когда я пытаюсь позвонить If Not target.SearchItem(sKey) Is Nothing Then
. Я хочу, чтобы он возвращал объект, тогда, если это не Nothing
, я могу преобразовать его обратно в long.
For Each target In dList.getArray
For Each key In aList.getArray(1).getKeys
sKey = CStr(key)
'Error occurs here - as Type mismatch
If Not target.SearchItem(sKey) Is Nothing Then
cData.setData(sKey) = CLng(target.SearchItem(sKey))
target.removeData = sKey
Else
'if value doesn't exists it will just be 0
cData.setData(sKey) = 0
End If
Next key
Next target
data
- мой словарь, который находится в отдельном классе:
Property Get SearchItem(name As String) As Variant
If data.exists(name) Then
'becomes a Variant/Integer - data(name) is a Variant/long
Set SearchItem = CVar(data(name))
Else
'Should return Nothing if item doesnt exist
Set SearchItem = Nothing
End If
End Property
Обновление: чтобы объяснить проблему, я немного подробнее. Даже если я верну его как вариант, он все равно будет частично целочисленным, и поэтому, если не target.SearchItem(sKey) Is Nothing Then
вернет несоответствие, поскольку ему нужен объект, а VBA не читает, это вариант или что-то в этом роде. Есть ли что-нибудь вроде Nothing, null или равно, что работает долго? Это решило бы проблему.
Этот код ниже возвращает значение, пока я этого хочу, но я не могу использовать -99, так как это повредит анализ данных. Это должно быть что-то, что не является значением
Property Get SearchItem(name As String)
If data.exists(name) Then
SearchItem = data(name)
Else
'SearchItem = Nothing
SearchItem = -99
End If
End Property