Обновление: Я скопировал и вставил сюда пример 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
Как строка присваивается вашей переменной для сравнения? Я сделал простой тест, и у «line,%» не было никаких проблем, когда я сравнивал его с помощью различных методов ... – sous2817
@ sous2817 Я использую ** Workbooks.Open **, чтобы открыть ** html ** файл. Затем я получаю лист и использую цикл For Each для итерации через TheSheet.UsedRange.Value –
Хорошо, я думаю, что некоторые нежелательные/скрытые символы поступают из-за HTML. Попробуйте приведенное ниже предложение Дэна и посмотрите, помогает ли это ... – sous2817