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

使用VBA高亮含越南语词汇的单元格短语 解决VBA越南语编码不兼容问题

问题根因

VBA编辑器默认采用当前Windows系统的区域字符编码,不直接支持UTF-8编码的字符输入,因此非系统默认区域的特殊字符(比如越南语带声调的字符)直接写在代码中时会被转换为问号乱码,导致匹配失败。

解决方案

不需要修改系统区域设置,优先推荐以下两种落地性强的方案:

  • 方案1:将匹配关键词存储在Excel单元格中读取
    Excel单元格原生支持Unicode字符,不会出现乱码问题。你只需要找一个空白的辅助单元格(也可以专门建一个隐藏的配置工作表),在对应单元格输入需要高亮的目标短语có thể,修改代码读取该单元格的值作为匹配关键词即可,修改后代码如下:
Sub HighlightWordOrPhrase()
' 先选中需要处理的单元格再运行宏
Dim wrd As String
' 替换为你存储关键词的实际单元格位置即可
wrd = ThisWorkbook.Sheets("Sheet1").Range("A1").Value
Dim c As Range, x As Long
For Each c In Selection
    x = InStr(1, c.Value, wrd, vbTextCompare)
    If x > 0 Then
        Do
            c.Characters(x, Len(wrd)).Font.Color = vbRed
            c.Characters(x, Len(wrd)).Font.Bold = True
            x = InStr(x + Len(wrd) - 1, c.Value, wrd, vbTextCompare)
        Loop While x > 0
    End If
Next c
End Sub

该方案的优势是后续需要修改高亮关键词时,直接改单元格内容即可,不需要调整代码,也适配所有小语种字符的匹配场景。

  • 方案2:使用ChrW函数拼接Unicode字符
    如果不想使用辅助单元格,可以查询目标短语中特殊字符的Unicode编码,用VBA的ChrW函数(支持Unicode字符输出)拼接字符串。比如本次目标短语中ế的Unicode编码为U+1EBF,对应十六进制值为&H1EBF,拼接代码如下:
Sub HighlightWordOrPhrase()
' 先选中需要处理的单元格再运行宏
Dim wrd As String
wrd = " có th" & ChrW(&H1EBF) & " "
Dim c As Range, x As Long
For Each c In Selection
    x = InStr(1, c.Value, wrd, vbTextCompare)
    If x > 0 Then
        Do
            c.Characters(x, Len(wrd)).Font.Color = vbRed
            c.Characters(x, Len(wrd)).Font.Bold = True
            x = InStr(x + Len(wrd) - 1, c.Value, wrd, vbTextCompare)
        Loop While x > 0
    End If
Next c
End Sub

如果需要匹配其他带特殊符号的字符,只需要查询对应字符的Unicode编码,用ChrW拼接即可。

补充说明

如果你的匹配需要严格区分字符的声调、大小写,可以把InStr函数里的vbTextCompare参数替换为vbBinaryCompare,实现精确匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 07:39:04