VBA会将字符ChrW(&H1D48)解释为上标d吗?

时间:2018-07-14 22:37:12

标签: excel excel-vba

我最近从Excel for Mac 2011升级到Excel for Mac 2016,发现了一个错误。我想确定此问题是特定于Mac 2016的VBA Excel还是其他计算机上正在发生。

Dim gg As Range
Set gg = Range("a1:s16000")
gg.Replace What:=ChrW(&H1D48), Replacement:="|d", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False

此代码将正确地将heyᵈ更改为hey|d。但这会错误地将dude更改为|du|de,这不应该发生,因为ChrW(&H1D48)不是正常d而是上标d。我在Mac 2011的Excel中没有这个问题,但在Mac 2016的Excel中没有,并且想知道其他人是否遇到相同的问题。

1 个答案:

答案 0 :(得分:1)

Excel试图通过不区分大小写来帮助您。

尽管英语字母表中可能只有成对的匹配字符(即Dd),但是对于其他字符集而言,存在的字符可能被视为等效。

在您角色的中:d = D = ᵈ = ⅆ

一个更常见的示例(无论如何,我住的地方)是E = e = É = é

通过更改MatchCase := True,使搜索对大小写不敏感,您应该能够避免此问题。

另请参见this information有关用于比较字符串的EXACT函数。


Option Compare

另一个选项是使用Option Compare语句在模块级别声明您的敏感性:

语法:
Option Compare { Binary|Text|Database }

如果使用Option Compare语句,则该语句必须在任何过程之前出现在模块中。 Option Compare语句为模块指定字符串比较方法BinaryTextDatabase)。如果模块不包含Option Compare语句,则默认文本比较方法为**Binary**

  • Option Compare Binary 会根据从字符的内部二进制表示形式得出的排序顺序进行字符串比较。在Microsoft Windows中,排序顺序由代码页确定。以下示例显示了典型的二进制排序顺序:

    A < B < E < Z < a < b < e < z < À < Ê < Ø < à < ê < ø 
    
  • Option Compare Text 会根据由系统区域设置确定的不区分大小写的文本排序顺序进行字符串比较。使用Option Compare Text对相同字符进行排序时,将产生以下文本排序顺序:

    (A=a) < ( À=à) < (B=b) < (E=e) < (Ê=ê) < (Z=z) < (Ø=ø) 
    

(有关更多信息,请参见source。)