Сравнение строк VBA с обратной кареткой

Я пытаюсь сравнить 2 строки, чтобы найти совпадение. Код открывает множество файлов и для каждого файла выбирает 2 строки, которые предположительно соответствуют тем, которые я определил. Однако одна из строк в ячейке содержит возврат каретки, и это причина, по которой я не могу найти совпадение. Мы будем признательны за вашу помощь! Заранее спасибо.

Связанные части моего кода для сравнения следующие:

Dim i As Integer
Dim a, WScount, rows, j As Integer
Dim temp As String
Dim check1, check2 As Boolean
Dim str1, str2 As String

i = 1
j = 1

str1 = "Manufacturers Number"
str2 = "Manufacturers" & vbCrLf & " Number"

For Each WS In Worksheets
    N = 0
    rows = 1
    While N < 7
        temp = src.ActiveSheet.Cells(rows, 2)
        check1 = StrComp(str1, temp, vbTextCompare)
        check2 = StrComp(str2, temp, vbTextCompare)
        If check1 = 0 Or check2 = 0 Then
            For k = rows + 1 To 100
                temp = Cells(k, 2)
                If Not StrComp("", temp, vbTextCompare) = False Then
                    ThisWorkbook.Worksheets(1).Cells(j, 3) = temp
                    j = j + 1
                End If
            Next k
        End If
            rows = rows + 1
            N = N + 1
    Wend

Next WS

person Jasser Ben Younes    schedule 07.11.2017    source источник
comment
Для данного фрагмента вы можете попробовать заменить возврат каретки пустой строкой, например Dim strCutted As String = Replace(str2, vbCrLf, "")   -  person Martin Backasch    schedule 07.11.2017


Ответы (1)


vbCrLf равно asc 10 и 13. Например. «новая строка» и «возврат каретки». Таблица Ascii.

Таким образом, вы можете просто использовать эти два значения и попробовать:

Option Explicit

Public Sub TestMe()

    Dim str1    As String
    Dim str2    As String

    str1 = "Manufacturers Number"
    str2 = "Manufacturers" & vbCrLf & " Number"

    str1 = stripTheString(str1)
    str2 = stripTheString(str2)

    Debug.Print str1 = str2

End Sub

Public Function stripTheString(strToStrip As String) As String

    Dim cnt     As Long
    Dim ascVal  As Long
    Dim newStr  As String

    For cnt = 1 To Len(strToStrip)
        ascVal = Asc(Mid(strToStrip, cnt, 1))
        If Not (ascVal = 10 Or ascVal = 13) Then
            newStr = newStr & Mid(strToStrip, cnt, 1)
        End If
    Next cnt

    stripTheString = newStr

End Function

Функция stripTheString проверяет наличие new line или carriage return и удаляет их из кода. Приведенный выше код может быть немного проблематичным, если у вас есть новая строка без возврата каретки после нее, поскольку он удалит новую строку в функции stripTheString.

person Vityata    schedule 07.11.2017