You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Excel VBA Scripting.Dictionary能否存储非英文数据?代码报错求助

VBA Dictionary 非英文数据存储问题及代码报错排查

核心需求

实现采购员(G列)对应的主门店(C列)+副门店(E列)组合校验:若某采购员拥有超过1种门店组合,则终止筛选并抛出错误提示。

当前疑问与问题

  • 确认:VBA的Scripting.Dictionary是否支持存储数字、日文这类非英文数据?
  • 报错问题:调试时If DICT(SELECTED_ENDUSER).Count > 1 Then语句报错,且Dictionary的键值为空,无法正常执行校验逻辑。

现有VBA代码

Dim WS As Worksheet
Dim LAST_ROW As Long
Dim DICT As Object
Dim ENDUSER As String
Dim i As Long
Dim KEY As Variant
Dim UNIQUE_PAIR As String
Dim PAIRS_DICT As Object
Dim SELECTED_ENDUSER As String
Dim FILTERED_ENDUSER As Boolean

Set WS = ThisWorkbook.ActiveSheet
LAST_ROW = WS.Cells(WS.Rows.Count, "G").End(xlUp).Row

Set DICT = CreateObject("Scripting.Dictionary")
Set DICT = New Dictionary

For i = 3 To LAST_ROW
    ENDUSER = Trim(WS.Cells(i, "G").Value)
    If ENDUSER <> "" Then
        UNIQUE_PAIR = WS.Cells(i, "C").Value & "|" & WS.Cells(i, "E").Value
        If Not DICT.Exists(ENDUSER) Then
            Set PAIRS_DICT = CreateObject("Scripting.Dictionary")
            DICT.Add ENDUSER, PAIRS_DICT
        End If
        DICT(ENDUSER)(UNIQUE_PAIR) = 1
    End If
Next i

SELECTED_ENDUSER = Cells(AROW, 7).Value
FILTERED_ENDUSER = DICT.Exists(SELECTED_ENDUSER)

If Not FILTERED_ENDUSER Then
    MsgBox "エンドユーザー「" & SELECTED_ENDUSER & "」はいませんでした。"
    Exit Sub
End If

If DICT(SELECTED_ENDUSER).Count > 1 Then
    MsgBox "コンフリ有りエンドユーザー様です。", vbCritical
    Exit Sub
End If

If WS.AutoFilterMode Then WS.AutoFilter.ShowAllData
WS.Range("A1").AutoFilter Field:=7, Criteria1:=SELECTED_ENDUSER

MsgBox "エンドユーザー:" & SELECTED_ENDUSER & "。"

Application.ScreenUpdating = True

内容的提问来源于stack exchange,提问作者Anpo Desu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 16:20:14