2014-08-29 4 views
0

Обновление: Я скопировал и вставил сюда пример html-файла в новый файл, чтобы убедиться, что люди могут с ним проверить, а затем мой код работал! Я думаю, что это проблема кодирования, потому что исходный файл был автоматически сгенерирован с Linux-машины. Я попытался сохранить новый файл и снова открыть его из скрипта, но это не сработало. Я надеюсь, что смогу решить эту проблему, используя только один макрос VBA, либо каким-то образом сохраняя новый файл, либо используя данные в нем, либо убедившись, что кодировка совпадает.Excel VBA сравнить строки с пробелами, процентными знаками и запятыми


Я не могу показаться, чтобы сравнить следующую строку правильно:

line, % 

Я пытался использовать StrComp функцию и просто используя равный знак, но оба имеют не работает. Я также использовал функцию Trim на строках, которые я сравниваю, чтобы убедиться, что на обоих концах нет пробелов. Я могу отслеживать через отладчик и видеть, что значения, которые я сравниваю, являются как «line,%», но выражение никогда не оценивает значение true.

Должен ли любой из символов этой строки заставлять меня делать что-то особенное для того, чтобы сравнение работало?

Edit: Это делает работа (я сделал опечатку в моем последнем редактировании):

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-файла, и что не работает. См. Ниже код, который вы можете попробовать.

Возможно, это связано с charset = ISO-8859-1 на входе в html? Будет ли характер задан? Вот то, что находится в самом начале: <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 
+0

Как строка присваивается вашей переменной для сравнения? Я сделал простой тест, и у «line,%» не было никаких проблем, когда я сравнивал его с помощью различных методов ... – sous2817

+0

@ sous2817 Я использую ** Workbooks.Open **, чтобы открыть ** html ** файл. Затем я получаю лист и использую цикл For Each для итерации через TheSheet.UsedRange.Value –

+0

Хорошо, я думаю, что некоторые нежелательные/скрытые символы поступают из-за HTML. Попробуйте приведенное ниже предложение Дэна и посмотрите, помогает ли это ... – sous2817

ответ

Смежные вопросы