Подтвердить что ты не робот

Использование Dictionary.Exists в свойстве UserForm предоставляет объект Error 404 required

Я пытаюсь использовать свойства класса Get и Let в UserForm под названием UBidStatus, чтобы заполнить словарь под названием DicOption.
Все работает нормально до строки If Not DicOption(OptName).Exists (требуется объект Error 404).
ПРИМЕЧАНИЕ. Код работает, если я заменил весь код в Public Property Let на DicOption.Add key:=OptName, Item:=OptValue.
Это код в классе Userform, который я пытаюсь исправить.

'Userform Class Module
Private DicOption As scripting.Dictionary

Public Property Get ProjectOption(ByVal OptName As String) As String
    ProjectOption = UBidStatus.ProjectOption(OptName)
End Property

Public Property Let ProjectOption(ByVal OptName As String, ByVal OptValue As String)
    If Not DicOption(OptName).Exists Then
        DicOption.Add key:=OptName, Item:=OptValue
    Else
        DicOption(OptName) = OptValue
    End If
End Property

Public Sub UserForm_Initialize()
    Set DicOption = New scripting.Dictionary
End Sub

Private Sub UserForm_Terminate()
    Set DicOption = Nothing
End Sub

Public Sub ExchangeToDicOption()
    Dim LR As Long
    Dim Rg As Range
    Dim ws As Worksheet
    Dim i As Long
    Dim a As String
    Dim b As String

    Set ws = ActiveWorkbook.Worksheets(2)
    Set Rg = ws.Columns(2)

    DicOption.RemoveAll

    LR = Rg.Find(What:="*", Lookat:=xlPart, LookIn:=xlFormulas, SearchOrder:=xlByRows, _
        SearchDirection:=xlPrevious, MatchCase:=False).Row

    If LR > 1 Then
        For i = 2 To LR
            a = Cells(i, 1)
            b = Cells(i, 2)
           UBidStatus.ProjectOption(a) = b
        Next i
    End If
End Sub
4b9b3361

Ответ 1

Метод Exists вызывается следующим образом:

Dictionary.Exists(Key)

Итак, попробуйте

 Public Property Let ProjectOption(ByVal OptName As String, ByVal OptValue As String)
    If Not DicOption.Exists(OptName) Then
        DicOption.Add key:=OptName, Item:=OptValue
    Else
        DicOption(OptName) = OptValue
    End If
End Property

Ответ 2

A Scripting.Dictionary будет неявно вызывать свой метод Add, если вы назначаете ключ, который не существует, поэтому, если целью является "добавить или заменить" значение по указанному ключу, вы можете просто заменить:

If Not DicOption(OptName).Exists Then
    DicOption.Add key:=OptName, Item:=OptValue
Else
    DicOption(OptName) = OptValue
End If

с:

DicOption.Item(OptName) = OptValue