Vba 使用UserForm属性中的Dictionary.Exists时,给出了错误404所需的对象
我试图在名为Vba 使用UserForm属性中的Dictionary.Exists时,给出了错误404所需的对象,vba,excel,dictionary,Vba,Excel,Dictionary,我试图在名为UBidStatus的用户表单中使用类属性Get和Let来填充名为dioption的字典 一切正常,直到If Not dict选项(OptName).存在行(需要错误404对象)。 注意:如果我将公共属性Let中的整个代码替换为dioption,则代码正常。添加键:=OptName,项:=OptValue 这是我试图修复的Userform类中的代码 'Userform Class Module Private DicOption As scripting.Dictionary Pu
UBidStatus
的用户表单中使用类属性Get
和Let
来填充名为dioption
的字典一切正常,直到
If Not dict选项(OptName).存在
行(需要错误404对象)。注意:如果我将
公共属性Let
中的整个代码替换为dioption,则代码正常。添加键:=OptName,项:=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
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
如果分配给不存在的键,则
Scripting.Dictionary
将隐式调用其Add
方法,因此如果目标是“添加或替换”指定键处的值,则可以简单地替换:
If Not DicOption(OptName).Exists Then
DicOption.Add key:=OptName, Item:=OptValue
Else
DicOption(OptName) = OptValue
End If
与:
我看不出引用此文档时有什么错误。我尝试使用
dioption(“OptName”)。存在,但它也不起作用。请参阅“检查字典中是否存在键”一节下的示例。如果这个答案解释了存在的原因,我肯定会投赞成票。@Mat'sMug,我真正的“为什么”应该是“因为我曾经发现它有效”!。我对此有更深的感受,但我不喜欢你喜欢的东西,我的解释可能会以某种方式不正确。因此,我把自己局限于一个“建议”的话题,在这个话题上,有一个已经被接受并被大量投票的人answer@Mat“自鸣得意,我想字典对象会自动添加一个新的键,如果键还不存在的话?是的,正是这种更深层次的感觉。”mine@SgtStens,它必须是uu,因为Add()
方法将尝试添加重复项,而Item()
方法强制如果存在,则更新引擎盖下的Else add
DicOption.Item(OptName) = OptValue