Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: VBA String vergleichen (StrComp) geht Nicht

VBA String vergleichen (StrComp) geht Nicht
17.04.2016 18:21:15
Björn
Moin,
habe gerade ein Problem dabei einen String zu vergleichen. Ich übergebe einen String an eine Funktion und checke in der Funktion ob der String einem anderen String entspricht. Obwohl die Strings identisch sind gibt mir StrComp 1 zurück.
Wo ist mein Fehler:
Public Function SheetRename(objSheet As Object, NewName As String) As Boolean
'Problem NewName enthält string daher vergleich True. STrings aber nicht gleich ! das  _
checken
'NewName enthält "einszweidreivierfuenfsechssiebenachtneun"
Dim content As String
'NewName = Trim(NewName)           Kein Unterschied
content = "einszweidreivierfuenfsechssiebenachtneun"
If Len(NewName) > 31 Then              'Prüfung auf Länge Blattname
MsgBox NewName & Chr(10) & content  ' Es steht zweimal das gleiche Untereinander
MsgBox StrComp(NewName, content, vbTextCompare) 'Warum True (1)?
If StrComp(NewName, "einszweidreivierfuenfsechssiebenachtneun", vbTextCompare) = 0 Then
' in diese If muss ich rein aber die Bedingung ist FALSE ?
objSheet.Name = "Textblock1227"
GoTo QuitRename
End If
End If
objSheet.Name = NewName
QuitRename:
End Function

Zusatz:
NewName ist ein ausgelesener String aus einer Word Kopfzeile. content ="" ist CopyPaste aus der selben Datei - die die String sehen optisch identisch aus sind sie aber nicht ?
LG
Björn

Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA String vergleichen (StrComp) geht Nicht
17.04.2016 19:40:53
Michael
Hi Björn,
versuch mal:
Option Explicit
Sub wat_nun(s1$, s2$)
Dim s1a$, s2a$
Dim i&
For i = 1 To Len(s1): s1a = s1a & Asc(Mid(s1, i, 1)) & "/": Next
For i = 1 To Len(s2): s2a = s2a & Asc(Mid(s2, i, 1)) & "/": Next
Debug.Print s1a
Debug.Print s2a
End Sub
Sub test3()
Call wat_nun("abcdef", "abcdef")
End Sub
Es scheint den Post im Forum zu überstehen, auch die Quellcode-Ansicht im Browser...
...trotzdem noch die Datei mit Makro anbei: https://www.herber.de/bbs/user/105035.xls
Viel Spaß,
Michael
P.S.: Du solltest den String sicherheitshalber auf in Blattnamen nicht verwendbare Zeichen testen.

Anzeige
AW: VBA String vergleichen (StrComp) geht Nicht
17.04.2016 20:15:16
fcs
Hallo Björn,
das Problem ist der Text, der aus Word übernommen wird. Dieser hat am Ende ggf. noch 2 mal das Zeichen 13.
Deswegen sind die Texte nicht identisch.
Diese Zeichen müssen vor dem Vergleich entfernt werden.
Gruß
Franz
Public Function SheetRename(objSheet As Object, NewName As String) As Boolean
'Problem NewName enthält string daher vergleich True. STrings aber nicht gleich ! das _
checken
'NewName enthält "einszweidreivierfuenfsechssiebenachtneun"
Dim content As String
NewName = Trim(NewName)  '       Kein Unterschied
'unerwünschte Zeichen (Zeilenschaltungen am Zeilenende), die von Word kommen abschneiden
Do Until Right(NewName, 1)  Chr(13)
NewName = Left(NewName, Len(NewName) - 1)
Loop
content = "einszweidreivierfuenfsechssiebenachtneun"
If Len(NewName) > 31 Then              'Prüfung auf Länge Blattname
MsgBox NewName & vbLf & content  ' Es steht zweimal das gleiche Untereinander
MsgBox StrComp(NewName, content, vbTextCompare) _
& vbLf & Len(NewName) & " - " & Len(content)  'Warum True (1)?
If StrComp(NewName, "einszweidreivierfuenfsechssiebenachtneun", vbTextCompare) = 0 Then
' in diese If muss ich rein aber die Bedingung ist FALSE ?
objSheet.Name = "Textblock1227"
GoTo QuitRename
End If
Else
objSheet.Name = NewName
End If
QuitRename:
End Function

Anzeige
AW: VBA String vergleichen (StrComp) geht Nicht
17.04.2016 21:13:43
Björn
GENIAL Franz ! Du rettest mir zum zweiten Mal den Hintern =)
Ich war schon am verzweifeln habe aber mir sowas in der Art schon gedacht.
Für das nächste Mal - wie kann ich mir einen String komplett anzeigen lassen ?
MsgBox hat mir die Steuerzeichen von Word ja nicht mit angezeigt.
Es klappt auf jedenfall jetzt alles so wie es soll und ich bin sehr Froh über die Hilfe, welche ich hier bekommen habe.
Vielen Dank
Björn

Anzeige
AW: VBA String vergleichen (StrComp) geht Nicht
18.04.2016 16:32:15
Michael
Hi Björn,
probiere doch bitte mein Makro bzw. die Datei auch mal aus, da ist ne Gemeinheit versteckt, die man beim reinen Lesen des Quellcodes NICHT sieht, erst im "Direktfenster"!
Schöne Grüße,
Michael
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

VBA String vergleichen mit StrComp


Schritt-für-Schritt-Anleitung

Um einen String in VBA zu vergleichen, kannst du die Funktion StrComp verwenden. Hier ist eine Schritt-für-Schritt-Anleitung:

  1. Öffne den VBA-Editor in Excel, indem du Alt + F11 drückst.

  2. Füge ein neues Modul hinzu: Rechtsklicke im Projektfenster auf "Einfügen" und wähle "Modul".

  3. Schreibe die Funktion zum Vergleichen von Strings:

    Public Function CompareStrings(str1 As String, str2 As String) As Boolean
       If StrComp(str1, str2, vbTextCompare) = 0 Then
           CompareStrings = True
       Else
           CompareStrings = False
       End If
    End Function
  4. Rufe die Funktion auf: Du kannst die Funktion CompareStrings in deinem VBA-Projekt verwenden, um zwei Strings zu vergleichen.

  5. Testen der Funktion: Erstelle eine einfache Subroutine, um die Funktion zu testen.

    Sub TestCompare()
       MsgBox CompareStrings("Hello", "hello") ' Gibt True zurück
    End Sub

Häufige Fehler und Lösungen

  • Problem: StrComp gibt 1 zurück, obwohl die Strings identisch aussehen.

    • Lösung: Oft sind unsichtbare Zeichen wie Zeilenumbrüche oder Leerzeichen am Ende des Strings vorhanden. Nutze Trim oder entferne unerwünschte Zeichen:
    NewName = Trim(NewName)
    Do Until Right(NewName, 1) = Chr(13)
        NewName = Left(NewName, Len(NewName) - 1)
    Loop
  • Problem: StrComp funktioniert nicht wie erwartet.

    • Lösung: Stelle sicher, dass du den richtigen Vergleichsmodus verwendest. Beispielsweise vbTextCompare für einen nicht fallsensitiven Vergleich.

Alternative Methoden

  • VBA String Vergleich mit Len: Du kannst die Länge der Strings vergleichen, bevor du StrComp verwendest:

    If Len(str1) = Len(str2) Then
       If StrComp(str1, str2, vbTextCompare) = 0 Then
           ' Strings sind gleich
       End If
    End If
  • Verwendung von Like: Du kannst auch die Like-Operator nutzen, um Muster zu vergleichen:

    If str1 Like str2 Then
       ' Strings passen
    End If

Praktische Beispiele

  1. Vergleich von Strings aus Excel-Zellen:

    Sub CompareCellValues()
       Dim val1 As String
       Dim val2 As String
       val1 = Range("A1").Value
       val2 = Range("A2").Value
       If CompareStrings(val1, val2) Then
           MsgBox "Die Werte sind gleich."
       Else
           MsgBox "Die Werte sind unterschiedlich."
       End If
    End Sub
  2. VBA Text vergleichen mit Word-Inhalten: Wenn du Text aus Word verarbeiten musst, achte darauf, unerwünschte Zeichen zu entfernen.


Tipps für Profis

  • Nutze Option Explicit in deinen Modulen, um sicherzustellen, dass alle Variablen deklariert sind. Das hilft dir, Fehler zu vermeiden.
  • Verwende Debugging-Tools, um den Inhalt von Strings während der Ausführung anzuzeigen. Du kannst Debug.Print verwenden, um die ASCII-Werte der Zeichen anzuzeigen, um unsichtbare Zeichen zu identifizieren:

    Sub DebugString()
       Dim s As String
       s = "DeinText"
       For i = 1 To Len(s)
           Debug.Print Asc(Mid(s, i, 1))
       Next i
    End Sub

FAQ: Häufige Fragen

1. Wie kann ich feststellen, ob zwei Strings gleich sind, ohne StrComp zu verwenden?
Du kannst die Strings einfach mit If str1 = str2 Then vergleichen, beachte jedoch, dass dies fallsensitiv ist.

2. Wie entferne ich unerwünschte Zeichen vor dem String-Vergleich?
Verwende Trim und eine Schleife, um unerwünschte Zeichen wie Zeilenumbrüche zu entfernen. Achte darauf, dass du das korrekte Zeichen verwendest.

3. Welche VBA-Funktionen kann ich für den String-Vergleich verwenden?
Neben StrComp kannst du auch InStr, Like und die einfache =-Vergleichsoperation verwenden.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige