2

我正在尝试为 excel vba 中的报告准备电子表格。不幸的是,这里有一些奇怪的字符需要替换。很简单,除了这个字符:

  ¦

我似乎无法将该字符粘贴到编辑器中的字符串替换函数中。当我尝试时,输出是_. 然后我想用它的 Chr 代码来引用它。快速查找说它是 Chr(166)。http://www.gtwiki.org/mwiki/?title=VB_Chr_Values

Replace(s, "â€" + Chr(166), "...")

但这根本不是那个角色(至少在 Mac excel 上)。我试过:

For i = 1 To 255
   Debug.Print Chr(i)
Next i

而且我在任何地方都没有看到这个角色。有谁知道我如何在 vba 代码中引用这个字符来替换它?

4

3 回答 3

0

单击包含您的恶意角色的单元格并运行这个小宏:

Sub WhatIsIt()
    Dim s As String, mesage As String
    Dim L As Long
    s = ActiveCell.Text
    L = Len(s)
    For i = 1 To L
        ch = Mid(s, i, 1)
        cd = Asc(ch)
        mesage = mesage & ch & "     " & cd & vbCrLf
    Next i
    MsgBox mesage
End Sub

它应该显示单元格中的字符及其代码。

于 2013-12-21T20:53:40.013 回答
0

它很脏,但这是我用来解决此问题的解决方法。我知道我的问题字符总是在 之后"â€",所以我的想法是替换那些 2 之后的字符。我真的不知道如何替换字符串中某个位置的字符,所以我的想法是隐藏字符串到一个字符数组并替换那些特定索引处的数组。这是它的样子:

Do While InStr(s, "â€") > 1
    num2 = InStr(s, "â€")
    arr = stringToArray(s)
    arr(num2 - 1) = "<~>"
    arr(num2) = "<~>"
    arr(num2 + 1) = "<~>"

    s = Replace(arrayToString(arr), "<~><~><~>", "...")
Loop

...


Function stringToArray(ByVal my_string As String) As Variant
    Dim buff() As String
    ReDim buff(Len(my_string) - 1)
    For i = 1 To Len(my_string)
        buff(i - 1) = Mid$(my_string, i, 1)
    Next
stringToArray = buff
End Function

Function arrayToString(ByVal arr As Variant) As String
Dim s As String
    For Each j In arr
        s = s & j
    Next j
arrayToString = s
End Function

在实践中,我用那些必须是独特但可识别的东西来替换这些索引。然后我可以用我想要的任何东西替换我独特的字符。肯定会有边缘情况,但现在它可以完成工作。stringToArray 函数来自:将字符串拆分为字符数组?

于 2013-12-23T20:55:40.530 回答
0

不确定正则是否可用于,但您可以大大简化现有代码,如下所示。

使用样本Strin

Dim strIn As String
strIn = "1â€1â€x123"
Do While InStr(strIn, "â€") > 0
Mid$(strIn, InStr(strIn, "â€"), 3) = "..."
Loop
于 2013-12-24T04:20:49.330 回答