Vba 使用函数将项添加到字典
我试图使用一个函数将项目添加到字典中,我没有收到任何错误消息,但当我想显示字典项目时,没有显示任何内容,我总是得到“空” 这是我的脚本截图:Vba 使用函数将项添加到字典,vba,excel,vbscript,Vba,Excel,Vbscript,我试图使用一个函数将项目添加到字典中,我没有收到任何错误消息,但当我想显示字典项目时,没有显示任何内容,我总是得到“空” 这是我的脚本截图: 有什么帮助吗,我错在哪里?您正在将name1项添加到字典中,但在循环的下一次迭代中,您正在执行。删除字典上的所有,删除该项。这就是为什么消息框中会出现一个空消息。我认为.RemoveAll并没有做你认为它能做的事。你的这段代码没有任何意义 您正在检查一行的前4个单元格中是否没有#。如果未找到#,则从5到10循环j,每次迭代时从字典中删除所有条目,并将行索
有什么帮助吗,我错在哪里?您正在将
name1
项添加到字典中,但在循环的下一次迭代中,您正在执行。删除字典上的所有
,删除该项。这就是为什么消息框中会出现一个空消息。我认为.RemoveAll
并没有做你认为它能做的事。你的这段代码没有任何意义
您正在检查一行的前4个单元格中是否没有#
。如果未找到#
,则从5到10循环j
,每次迭代时从字典中删除所有条目,并将行索引(irow
)增加2。表示您的语句a字典。Add
将添加以下范围的键和值:
E1:E2
F3:F4
G5:G6
H7:H8
I9:I10
J11:J12
您总是从中得到一条消息“空”是很自然的,因为字典中不包含条目“name1”
现在,假设您真正想要的是使用数据行中的所有键和值填充字典,并跳过前4个单元格中包含#
的行,您可以执行以下操作:
For irow = 1 To 10
If InStr(1, objExcel1.Cells(irow, 1).Value, "#") = 0 And InStr(1, objExcel1.Cells(irow, 2).Value, "#") = 0 And InStr(1, objExcel1.Cells(irow, 3).Value, "#") = 0 And InStr(1, objExcel1.Cells(irow, 4).Value, "#") = 0 Then
For j = 5 To 10
aDictionary(objExcel1.Cells(irow, j).Value) = objExcel1.Cells(irow + 1, j).Value
Next
irow = irow + 1 'skip over value row
End If
Next
或者,如果要在每次遇到包含
的行时清除词典:
后者仍然会生成一个“空”消息框,因为第8行和第9行中没有“名称1”。为什么每次添加新项目时都要删除所有项目?这是一个错误,我更新了我的问题,但没有
字典。RemoveAll
语句您不会看到“空”消息框。请不要“修复”问题中的代码,否则答案将变得不清楚。是的,我更新了问题,删除所有项目是一个biiiig错误,这是一个大错误,非常感谢,我尝试了你的第一个建议,效果很好。
E1:E2
F3:F4
G5:G6
H7:H8
I9:I10
J11:J12
For irow = 1 To 10
If InStr(1, objExcel1.Cells(irow, 1).Value, "#") = 0 And InStr(1, objExcel1.Cells(irow, 2).Value, "#") = 0 And InStr(1, objExcel1.Cells(irow, 3).Value, "#") = 0 And InStr(1, objExcel1.Cells(irow, 4).Value, "#") = 0 Then
For j = 5 To 10
aDictionary(objExcel1.Cells(irow, j).Value) = objExcel1.Cells(irow + 1, j).Value
Next
irow = irow + 1 'skip over value row
End If
Next
For irow = 1 To 10
If InStr(1, objExcel1.Cells(irow, 1).Value, "#") = 0 And InStr(1, objExcel1.Cells(irow, 2).Value, "#") = 0 And InStr(1, objExcel1.Cells(irow, 3).Value, "#") = 0 And InStr(1, objExcel1.Cells(irow, 4).Value, "#") = 0 Then
For j = 5 To 10
aDictionary(objExcel1.Cells(irow, j).Value) = objExcel1.Cells(irow + 1, j).Value
Next
irow = irow + 1 'skip over value row
Else
aDictionary.RemoveAll
End If
Next