Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.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
除非使用Trim,否则VBA Dictionary add无法读取Excel工作表标题_Excel_Vba_Dictionary_Trim - Fatal编程技术网

除非使用Trim,否则VBA Dictionary add无法读取Excel工作表标题

除非使用Trim,否则VBA Dictionary add无法读取Excel工作表标题,excel,vba,dictionary,trim,Excel,Vba,Dictionary,Trim,我用这段短代码从工作表的currentRange的第一行读取单元格,以便在以后的代码中用作某种枚举。e、 g dict(“ID”)返回以文本“ID”为首的列的列号。如果省略了Trim函数,并且它确实没有业务或需要存在,则返回字典时所有值均为空。将Trim()保留在中会得到预期的结果。请解释一下原因 来自字典文档: 键用于检索单个项,通常为整数 或字符串,但可以是数组以外的任何内容 因此,在添加密钥时必须小心。例如,使用标题为“红色”、“黄色”、“蓝色”、“绿色”的行 子测试仪() 暗d,k “

我用这段短代码从工作表的currentRange的第一行读取单元格,以便在以后的代码中用作某种枚举。e、 g dict(“ID”)返回以文本“ID”为首的列的列号。如果省略了Trim函数,并且它确实没有业务或需要存在,则返回字典时所有值均为空。将Trim()保留在中会得到预期的结果。请解释一下原因

来自字典文档:

键用于检索单个项,通常为整数 或字符串,但可以是数组以外的任何内容

因此,在添加密钥时必须小心。例如,使用标题为“红色”、“黄色”、“蓝色”、“绿色”的行

子测试仪()
暗d,k
“没有修剪
设置d=getHeaderRowDict(活动表)
对于d中的每个k
调试。打印k,TypeName(k),d(k)
下一个k
'关键点和值看起来正常,但关键点实际上是范围对象
“红色范围1
'黄色范围2
“蓝色范围3
'绿色范围4
Debug.Print“Red=,d(“Red”)…但实际上不起作用
“红色=
'现在使用Trim()
集合d=getHeaderRowDictV2(活动表)
对于d中的每个k
调试。打印k,TypeName(k),d(k)
下一个k
'现在我们有了字符串类型的键
"红弦一号"
黄弦2
"蓝线3"
'绿色字符串4
Debug.Print“Red=,d(“Red”)”这确实有效
“红色=1
端接头
函数getHeaderRowDict(sht)
如Excel.Range所示,如新词典所示,如我所愿
设置rng=sht.Range(“A1”).CurrentRegion.Rows(1)
对于i=1到rng.Columns.Count
dict(rng.Cells(i))=i
下一个
设置getHeaderRowDict=dict
端函数
函数getHeaderRowDictV2(sht)
如Excel.Range所示,如新词典所示,如我所愿
设置rng=sht.Range(“A1”).CurrentRegion.Rows(1)
对于i=1到rng.Columns.Count

dict(Trim(rng.Cells(i))=i'在VBA中,如果不传递单元格值,它将作为引用传递,这会把事情搞砸-它必须是一个文字字符串值-同样的事情可以通过声明一个字符串变量,将其设置为不带Trim的单元格值,然后将其添加到字典中来完成。
dict(rng.Cells(i)(价值)=我
?我已经有一段时间没有用过了,现在看来评论不是为了说谢谢,只是为了澄清和指出问题。所以让我澄清一下,我非常感谢那些回答我问题的人花时间回答我的问题。我看不到任何按钮来点击表示感谢,所以我也许这是一个问题,可以通过进一步的建议来解决?你可以点击答案旁边的复选标记来接受它。我没有注意到修剪的作用不仅仅是删除空白。它可以在需要时清晰地将范围转换为文本,所以我现在明白了为什么使用修剪实际上是一个疯狂的猜测。正如所指出的那样。值到目前为止更好的选择,我现在将采用该原则,而不是依赖默认属性。
Function getHeaderRowDict(sht)
    Dim rng As Excel.Range, dict As New Dictionary, i As Long
    Set rng = sht.Range("A1").CurrentRegion.Rows(1)
    For i = 1 To rng.Columns.Count
        dict(Trim(rng.Cells(1, i))) = i
    Next
    Set getHeaderRowDict = dict
End Function