2017-11-07 1 views
0

Ich versuche, 2 Strings zu vergleichen, um eine Übereinstimmung zu finden. Der Code öffnet viele Dateien und für jede Datei erhält es 2 Strings, die angeblich mit denen übereinstimmen, die ich definiert habe. Einer der Zeichenfolgen in einer Zelle enthält jedoch einen Wagenrücklauf und das ist der Grund, warum ich nicht scheinen kann, um eine Übereinstimmung zu erhalten. Ihre Hilfe wird wirklich geschätzt! Vielen Dank im Voraus.VBA String Vergleich mit einem Return-Schlitten

Die entsprechenden Teile meines Codes für den Vergleich sind die folgenden:

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 
+2

Für Ihren gegebenen Ausschnitt können Sie versuchen, den Wagenrücklauf durch eine leere Zeichenfolge zu ersetzen wie 'Dim strCutted As String = Ersetzen (str2, vbCrLf," ")' –

Antwort

0

Die vbCrLf gleich asc 10 und 13 Z. B. "neue Zeile" und "Wagenrücklauf". Ascii Table.

So konnte man einfach diese beiden Werte und geben Sie ihm einen Versuch:

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 

Die stripTheString Funktion prüft, ob new line oder carriage return und entfernt sie aus dem Code. Der obige Code könnte ein wenig problematisch sein, wenn Sie eine neue Zeile ohne Wagenrücklauf hinter sich haben, sofern die neue Zeile in der stripTheString-Funktion gelöscht wird.

+1

Danke Vityata !! :) es hat funktioniert –

+0

@JasserBenYounes - willkommen. – Vityata