如何读出这个字典中的值?

测试数据如下:

code    number
A10101    1000
A10102    230
A10103    200
A10201    7500
A10202    2340
A10203    3710

这个函数可以将两列作为一个range,然后赋值给dictionary:

Function RangeToDict2(ByVal R As Range) As dictionary
    Set RangeToDict2 = New dictionary
    i = 1
    Do Until i >= (R.Rows.Count * R.Columns.Count)
        RangeToDict2.Add R(i), R(i + 1)
        i = i + 2
      Loop
End Function

读出这个字典

Sub test()
    Dim rng As Range
    Dim kc As dictionary
    Set rng = ActiveWorkbook.Worksheets(1).Range("a2:b7")
    Set kc = RangeToDict2(rng)
    Dim key As Variant
    For Each key In kc.Keys
        Debug.Print key, kc(key)
    Next key
    Debug.Print "ok", kc("A10101")
End Sub

结果:

A10101         1000 
A10102         230 
A10103         200 
A10201         7500 
A10202         2340 
A10203         3710 
ok 

为何这行的 Debug.Print "ok", kc("A10101"),其中kc("A10101")没有1000,作为结果输出呢?

阅读 516
avatarAI BotBETA
在 VBA 中,当你使用 `Debug.Print` 输出多个值时,如果值之间没有用逗号以外的其他字符(如空格或其他分隔符)明确分隔,它们会在输出中紧密排列,这可能导致输出看起来像是没有正确显示。在你的例子中,`Debug.Print "ok", kc("A10101")` 实际上已经正确输出了 `"ok"` 和 `kc("A10101")` 的值(即 1000),但是由于没有空格或其他分隔符,它们在控制台的输出中看起来像是连在一起,造成了误解。

要验证这一点,你可以稍微修改 `Debug.Print` 语句,加入一些分隔符,例如:

Debug.Print "ok: " & kc("A10101")


这样,输出将会是:

ok: 1000


这清楚地显示了 `"ok"` 和 `kc("A10101")` 的值(1000),并且它们之间有一个冒号和空格作为分隔。所以,原始代码中的 `Debug.Print "ok", kc("A10101")` 实际上是正确工作的,只是输出格式上没有明显的分隔符,导致视觉上不易区分。
2 个回答
Function RangeToDict2(ByVal R As Range) As Dictionary
    Set RangeToDict2 = New Dictionary
    Dim i As Long
    i = 1
    Do Until i >= (R.Rows.Count * R.Columns.Count)
        RangeToDict2.Add CStr(R(i).Value), CStr(R(i + 1).Value)
        i = i + 2
    Loop
End Function

Sub test()
    Dim rng As Range
    Dim kc As Dictionary
    Set rng = ActiveWorkbook.Worksheets(1).Range("a2:b7")
    Set kc = RangeToDict2(rng)
    
    Dim key As Variant
    For Each key In kc.Keys
        Debug.Print key, kc(key)
    Next key
    
    ' 修复后的输出方式(以下三种方式都可以,选择一种使用即可)
    Debug.Print "ok " & kc("A10101")  '方式1:使用 & 连接
    'Debug.Print "ok"; " "; kc("A10101")  '方式2:使用分号连接
    'Debug.Print "ok", kc("A10101"), ""   '方式3:使用逗号并确保值显示
End Sub

用分号;或者 & 连接符就行

Sub test()
    Dim rng As Range
    Dim kc As dictionary
    Set rng = ActiveWorkbook.Worksheets(1).Range("a2:b7")
    Set kc = RangeToDict2(rng)
    
    Dim key As Variant
    For Each key In kc.Keys
        Debug.Print key & ": " & kc(key)
    Next key
    
    Debug.Print "ok: " & kc("A10101")
End Sub
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏