Excel VBA将字符串与空格,百分号和逗号进行比较

时间:2014-08-29 18:14:10

标签: vba excel-vba string-comparison excel

更新:我将我的示例html文件从此处复制并粘贴到一个新文件中,以确保人们可以使用它进行测试,然后我的代码就可以了!我认为这是一个编码问题,因为原始文件是从Linux机器自动生成的。我已经尝试保存一个新文件并从脚本中重新打开该文件,但这并不起作用。我希望我仍然可以通过以某种方式保存新文件并使用该文件中的数据或确保编码匹配来仅使用一个VBA宏来解决此问题。


我似乎无法正确比较以下字符串:

line, %

我一直在尝试使用 StrComp 功能,只使用相等符号,但两者都没有用。我还在字符串上使用修剪函数进行比较,以确保两端都没有空格。我可以通过调试器进行跟踪,看到我比较的值是" line,%",但表达式永远不会计算为真。

此字符串中的任何字符是否导致我必须做一些特殊的事情才能进行比较?

修改:这确实有效(我上次编辑时输了一个错字):

Dim percentString As String
percentString = "line, %"

Dim test As String
test = percentString
If StrComp(percentString, test) = 0 Then
    MsgBox "They are equal"
End If

但是,我正在从html文件中读取输入,但这不起作用。请参阅下面的代码,您可以尝试。

也许它与html输入中的 charset = ISO-8859-1 有关?字符集会有影响吗?以下是开头的内容:<HTML><HEAD><META CONTENT="text/html; charset=ISO-8859-1" HTTP-EQUIV="Content-Type"/>

以下是您可以尝试的示例

testFile.html

<HTML><HEAD><META CONTENT="text/html; charset=ISO-8859-1" HTTP-EQUIV="Content-Type"/><TITLE>title</TITLE><STYLE> 

TABLE,TD,TH {border-style:solid; border-color:black;} TD,TH {background:white;margin:0;line-height:100%;padding-

left:0.5em;padding-right:0.5em;} TD {border-width:0 1px 0 0;} TH {border-width:1px 1px 1px 0;} TR TD.h {color:red;} TABLE 

{border-spacing:0; border-collapse:collapse;border-width:0 0 1px 1px;} P,H1,H2,H3,TH {font-family:verdana,arial,sans-

serif;font-size:10pt;} TD {font-family:courier,monospace;font-size:10pt;} TABLE.hdft {border-spacing:0;border-

collapse:collapse;border-style:none;} TABLE.hdft TH,TABLE.hdft TD {border-style:none;line-height:normal;} TABLE.hdft 

TH.tl,TABLE.hdft TD.tl {background:#6699CC;color:white;} TABLE.hdft TD.nv {background:#6633DD;color:white;} .nv A:link 

{color:white;} .nv A:visited {color:white;} .nv A:active {color:yellow;} TABLE.hdft A:link {color:white;} TABLE.hdft 

A:visited {color:white;} TABLE.hdft A:active {color:yellow;} .in {color:#356085;} TABLE.s TD {padding-left:0.25em;padding-

right:0.25em;} TABLE.s TD.l {padding-left:0.25em;padding-right:0.25em;text-align:right;background:#F0F0F0;} TABLE.s TR.z TD 

{background:#FF9999;} TABLE.s TR.p TD {background:#FFFF88;} TABLE.s TR.c TD {background:#CCFFCC;} A:link 

{color:#0000EE;text-decoration:none;} A:visited {color:#0000EE;text-decoration:none;} A:hover {color:#0000EE;text-

decoration:underline;} TABLE.cn {border-width:0 0 1px 0;} TABLE.s {border-width:1px 0 1px 1px;} TD.h {color:red;border-

width:0 1px 0 0;} TD.f {border-width:0 1px 0 1px;} TD.hf {color:red;border-width:0 1px 0 1px;} TH.f {border-width:1px 1px 

1px 1px;} TR.cis TD {background:#F0F0F0;} TR.cis TD {border-width:1px 1px 1px 0;} TR.cis TD.h {color:red;border-width:1px 

1px 1px 0;} TR.cis TD.f {border-width:1px 1px 1px 1px;} TR.cis TD.hf {color:red;border-width:1px 1px 1px 1px;} TD.b 

{border-style:none;background:transparent;line-height:50%;}  TD.bt {border-width:1px 0 0 0;background:transparent;line-

height:50%;} TR.o TD {background:#F0F0F0;}TABLE.it {border-style:none;}TABLE.it TD,TABLE.it TH {border-style:none;}

</STYLE></HEAD><BODY><TABLECELLSPACING="0" WIDTH="100%"><TR><TH>Report</TH></TR><TR><TD></TD></TR></TABLE><H2></H2><TABLE 

CELLSPACING="0" WIDTH="100%"><TR><TH>line, %</TH></TR><TR><TD>Name</TD></TR></TABLE><H3></H3><TABLE CELLSPACING="0" 

WIDTH="100%"><TR><TH>line, %</TH></TR><TR><TD>test</TD></TR></TABLE><P></P><TABLE CELLSPACING="0" 

WIDTH="100%"><TR><TD></TD></TR><TR><TD></TD></TR></TABLE></BODY></HTML>

使用此VBA代码并进行少量修改以指定testFile.html 的位置。

Option Explicit
Sub percent()

    Dim MyFile As String
    MyFile = "testFile.html"

    Dim percentString As String
    percentString = CStr("line, %")

    Dim ws As Worksheet

    Workbooks.Open Filename:= _
    "path\to\testFile" & MyFile

    Dim stringVal As String
    Dim val As Variant
    Set ws = Worksheets("testFile")
    For Each val In ws.UsedRange.Value
        stringVal = CStr(val)
        stringVal = Replace(stringVal, vbLf, "")
        stringVal = Replace(stringVal, vbTab, "")
        stringVal = Trim(Application.Clean(stringVal))
        percentString = Replace(percentString, vbLf, "")
        percentString = Replace(percentString, vbTab, "")
        percentString = Trim(Application.Clean(percentString))
        Dim res As Integer
        res = StrComp(stringVal, percentString)
        If res = 0 Then
            MsgBox "Found the percent string"
        End If
    Next val
    Workbooks(MyFile).Close
End Sub

3 个答案:

答案 0 :(得分:1)

事实证明存在编码问题。基本上, 字符出现在调试器中之后我创建了一个脚本,将所有行,%行更改为其他内容。因此,以下摆脱了 字符,这个字符就是为什么我无法将比较评估为true:

stringVal = Replace(stringVal, Chr(194), vbNullString)

对所有试图提供帮助的人表示抱歉。事实证明,如果我可以自己上传输入文件,那么这种问题只会对尝试回答有用,因此编码会保留。

答案 1 :(得分:0)

当我在过去遇到这个问题时,我做了两件事:

1)通过创建具有以下内容的单元格来查看字符串是什么:

B1= "|" & A1 & "|"

我在两个细胞上使用它来查看是否有任何奇怪的东西。有时会出现不显示的标签或新行。

2)我用奇怪的东西代替。如果你找到一个新的行,你可以使用find replace来一起删除它,或者你可以用substr()代替它。

希望这会有所帮助。如果您从1发布结果,我可以提供更多帮助。

答案 2 :(得分:0)

如果字符串相等,StrComp函数返回0。

http://msdn.microsoft.com/pt-br/library/9s233cfc(v=vs.90).aspx

亲切的问候。