Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 使用函数将项添加到字典_Vba_Excel_Vbscript - Fatal编程技术网

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