Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen

String überprüfen und Stellen ersetzen?

Betrifft: String überprüfen und Stellen ersetzen? von: Sergej
Geschrieben am: 07.11.2020 19:01:50

Hallo Leute,

hier im Beispiel habe ich diesen String "DLH-DZA-PG-##-H001-GU-EG0-00-01-#-##-FREIGABE"

Per VBA soll überprüft werden, ob diese Datei "P:\Einstellungen\tag_read.txt" existiert.
Falls nicht, dann soll die Routine abgebrochen werden.

Beispiel Inhalt einer tag_read.txt Datei

#Meine Kommentare
#$FK5.0$ 11.05.2018 19:04:00
#301,dialog toolsettings;help
Model_Zeichen=45
Platzhalter=#
Sachdatensatzname=Projekt_Plannummer
Referenz=test
Phase=04_Phase;2;12
Status=10_Status;1;33
Index=11_Index;2;35
Wenn die Datei tag_read.txt existiert, dann soll nach folgenden Kriterien geprüft werden:

1. Nur wenn "Model_Zeichen" in der Datei definiert ist, sprich nach dem Gleichzeichen ein Wert (im Beispiel 45) steht, dann soll die Stringlänge auf diese Zahl geprüft werden, ansonsten soll dies nicht geprüft werden.

2. Nur wenn "Platzhalter" in der Datei definiert ist, sprich nach dem Gleichzeichen ein Wert (im Beispiel #) steht, dann soll in der Datei links nach "Phase", "Status" oder "Index" gesucht werden.
Nur wenn "Phase", "Status" oder "Index" in der Zeile zwei Semikola beinhaltet, dann sollen im String die Stellen 12 und 13, 33, 35 und 36 auf Platzhalterwert (im Bespiel #) geprüft werden.

Hinweis: Die Zahlen 12, 13, 33, 35, 36 sollen dynamisch anhand der Datei ausgelesen werden.
Hier im Beispiel steht nach zweitem Semikolon die Startstelle und davor der Wert (im Beispiel die 2) für Anzahl der nachfolgenden Stellen, die geprüft werden sollen.
Phase=04_Phase;2;12

Wenn die Vorgaben NICHT erfüllt sind, dann sollen in MsgBox die Abweichungen angezeigt werden.

Wie mache ich das bitte per VBA? Besten Dank im Voraus für die Unterstütztng.

Beste Grüße,
Sergej

Betrifft: AW: String überprüfen und Stellen ersetzen?
von: onur
Geschrieben am: 07.11.2020 19:45:31

"Wie mache ich das bitte per VBA?" - du bestimmt überhaupt nicht (bei "VBA nur mit Recorder").
Aber für eine schnelle Hilfe in einem Hilfsforum hast du ziemlich viele Wünsche. Dein Anliegen ist eigentlich mehr was für einen Auftragsprogrammierer.
Vielleicht hat ja doch ein Helfer Erbarmen und die Zeit, dir für lau den Code zu schreiben.

Betrifft: AW: String überprüfen und Stellen ersetzen?
von: Nepumuk
Geschrieben am: 08.11.2020 11:37:17

Hallo Sergej,

teste mal:

Option Explicit

Public Sub Test()
    
    Const STRING_VALUE As String = "DLH-DZA-PG-##-H001-GU-EG0-00-01-#-##-FREIGABE"
    Const FILE_PATH As String = "P:\Einstellungen\tag_read.txt"
    
    Dim intFreeFile As Integer
    Dim lngLength As Long, lngStart As Long
    Dim strInput As String, strPlaceholder As String
    Dim blnFound As Boolean
    Dim vntTemp As Variant
    
    If Dir$(FILE_PATH) <> vbNullString Then
        
        Reset
        intFreeFile = FreeFile
        
        Open FILE_PATH For Input As #intFreeFile
        
        Do Until EOF(intFreeFile)
            
            Line Input #intFreeFile, strInput
            
            Select Case True
                    
                Case InStr(1, strInput, "Model_Zeichen") > 0
                    
                    lngLength = Clng(Split(strInput, "=")(1))
                    
                    If lngLength <> Len(STRING_VALUE) Then _
                        Call MsgBox("Länge passt nicht.", vbExclamation, "Hinweis")
                    
                Case InStr(1, strInput, "Platzhalter") > 0
                    
                    blnFound = True
                    
                    strPlaceholder = Split(strInput, "=")(1)
                    
                Case blnFound And InStr(1, strInput, "Phase") > 0
                    
                    If Len(strInput) - 2 = Len(Replace(strInput, ";", vbNullString)) Then
                        
                        vntTemp = Split(strInput, ";")
                        
                        lngStart = Clng(vntTemp(UBound(vntTemp)))
                        
                        lngLength = Clng(vntTemp(UBound(vntTemp) - 1))
                        
                        If Mid$(STRING_VALUE, lngStart, lngLength) <> String$(lngLength, strPlaceholder) Then _
                            Call MsgBox("Phase stimmt nicht", vbExclamation, "Hinweis")
                        
                    End If
                    
                Case blnFound And InStr(1, strInput, "Status") > 0
                    
                    If Len(strInput) - 2 = Len(Replace(strInput, ";", vbNullString)) Then
                        
                        lngStart = Clng(vntTemp(UBound(vntTemp)))
                        
                        lngLength = Clng(vntTemp(UBound(vntTemp) - 1))
                        
                        If Mid$(STRING_VALUE, lngStart, lngLength) <> String$(lngLength, strPlaceholder) Then _
                            Call MsgBox("Status stimmt nicht", vbExclamation, "Hinweis")
                        
                    End If
                    
                Case blnFound And InStr(1, strInput, "Index") > 0
                    
                    If Len(strInput) - 2 = Len(Replace(strInput, ";", vbNullString)) Then
                        
                        lngStart = Clng(vntTemp(UBound(vntTemp)))
                        
                        lngLength = Clng(vntTemp(UBound(vntTemp) - 1))
                        
                        If Mid$(STRING_VALUE, lngStart, lngLength) <> String$(lngLength, strPlaceholder) Then _
                            Call MsgBox("Index stimmt nicht", vbExclamation, "Hinweis")
                        
                    End If
            End Select
        Loop
        
        Close #intFreeFile
        
    Else
        Call MsgBox("Datei nicht vorhanden.", vbExclamation, "Hinweis")
    End If
End Sub

Gruß
Nepumuk

Betrifft: AW: String überprüfen und Stellen ersetzen?
von: Sergej
Geschrieben am: 08.11.2020 12:03:00

Hallo Nepumuk,

zunächst vielen herzlichen Dank für deine Mühe und die Zeit.

Ich habe es detalliert getestet. Wenn ich die Datei "tag_read.txt" unverändert lasse, so wie im Beitrag dargestellt, dann funktioniert alles perfekt.

Als Nächstes habe ich folgende Tests durchgeführt:

1. Die Stringlänge verändert (funktioniert)

2. String verändert "DLH-DZA-PG-TT-H001-GU-EG0-00-01-#-##-FREIGABE"
Es kommt MsgBox, aber es werden drei (Status, Phase, Index) Hinweise angezeigt, die nicht stimmen. Hier sollte nur Phase als nicht überein stimmig angezeigt werden.

3. In der Datei "tag_read.txt" habe ich Model_Zeichen= ohne den Wert nach Gleichzeichen verändert.(funktioniert nicht) Es kommt die Meldung "Laufzeitfehler 13 - Typen unverträglich" und die Routine bleibt hier stehen: lngLength = CLng(Split(strInput, "=")(1))

4. In der Datei "tag_read.txt" habe ich Platzhalter= ohne den Wert nach Gleichzeichen verändert.(funktioniert nicht) Es kommt die Meldung "Laufzeitfehler 5 - Ungültige Prozeduraufruf oder ungültiges Argument" und die Routine bleibt hier stehen: If Mid$(STRING_VALUE, lngStart, lngLength) <> String$(lngLength, strPlaceholder) Then _


Beste Grüße,
Sergej

Betrifft: AW: String überprüfen und Stellen ersetzen?
von: Nepumuk
Geschrieben am: 08.11.2020 12:20:42

Hallo Sergej,

so besser?

Option Explicit

Public Sub Test()
    
    Const STRING_VALUE As String = "DLH-DZA-PG-##-H001-GU-EG0-00-01-#-##-FREIGABE"
    Const FILE_PATH As String = "H:\Einstellungen\tag_read.txt"
    
    Dim intFreeFile As Integer
    Dim lngLength As Long, lngStart As Long
    Dim strInput As String, strPlaceholder As String
    Dim blnFound As Boolean, blnError As Boolean
    Dim vntTemp As Variant
    
    If Dir$(FILE_PATH) <> vbNullString Then
        
        Reset
        intFreeFile = FreeFile
        
        Open FILE_PATH For Input As #intFreeFile
        
        Do Until EOF(intFreeFile)
            
            Line Input #intFreeFile, strInput
            
            Select Case True
                    
                Case InStr(1, strInput, "Model_Zeichen") > 0
                    
                    vntTemp = Split(strInput, "=")
                    
                    If IsNumeric(vntTemp(1)) Then
                        
                        lngLength = Clng(vntTemp(1))
                        
                        If lngLength <> Len(STRING_VALUE) Then
                            
                            Call MsgBox("Länge passt nicht.", vbExclamation, "Hinweis")
                            
                            blnError = True
                            
                        End If
                    Else
                        
                        Call MsgBox("Keine Länge gefunden.", vbExclamation, "Hinweis")
                        
                        blnError = True
                        
                    End If
                    
                Case InStr(1, strInput, "Platzhalter") > 0
                    
                    strPlaceholder = Split(strInput, "=")(1)
                    
                    If strPlaceholder <> vbNullString Then blnFound = True
                    
                    
                Case blnFound And InStr(1, strInput, "Phase") > 0
                    
                    If Len(strInput) - 2 = Len(Replace(strInput, ";", vbNullString)) Then
                        
                        vntTemp = Split(strInput, ";")
                        
                        lngStart = Clng(vntTemp(UBound(vntTemp)))
                        
                        lngLength = Clng(vntTemp(UBound(vntTemp) - 1))
                        
                        If Mid$(STRING_VALUE, lngStart, lngLength) <> String$(lngLength, strPlaceholder) Then
                            
                            Call MsgBox("Phase stimmt nicht", vbExclamation, "Hinweis")
                            
                            blnError = True
                            
                        End If
                    End If
                    
                Case blnFound And InStr(1, strInput, "Status") > 0
                    
                    If Len(strInput) - 2 = Len(Replace(strInput, ";", vbNullString)) Then
                        
                        vntTemp = Split(strInput, ";")
                        
                        lngStart = Clng(vntTemp(UBound(vntTemp)))
                        
                        lngLength = Clng(vntTemp(UBound(vntTemp) - 1))
                        
                        If Mid$(STRING_VALUE, lngStart, lngLength) <> String$(lngLength, strPlaceholder) Then
                            
                            Call MsgBox("Status stimmt nicht", vbExclamation, "Hinweis")
                            
                            blnError = True
                            
                        End If
                    End If
                    
                Case blnFound And InStr(1, strInput, "Index") > 0
                    
                    If Len(strInput) - 2 = Len(Replace(strInput, ";", vbNullString)) Then
                        
                        vntTemp = Split(strInput, ";")
                        
                        lngStart = Clng(vntTemp(UBound(vntTemp)))
                        
                        lngLength = Clng(vntTemp(UBound(vntTemp) - 1))
                        
                        If Mid$(STRING_VALUE, lngStart, lngLength) <> String$(lngLength, strPlaceholder) Then
                            
                            Call MsgBox("Index stimmt nicht", vbExclamation, "Hinweis")
                            
                            blnError = True
                            
                        End If
                    End If
            End Select
        Loop
        
        Close #intFreeFile
        
        If Not blnError Then Call MsgBox("Alles in Ordnung.", vbInformation, "Information")
        
    Else
        Call MsgBox("Datei nicht vorhanden.", vbExclamation, "Hinweis")
    End If
End Sub

Gruß
Nepumuk

Betrifft: AW: String überprüfen und Stellen ersetzen?
von: Sergej
Geschrieben am: 08.11.2020 13:09:21

Hallo Nepumuk,

vielen herzlichen Dank. Dir noch einen schönen Sonntag!

Beste Grüße,
Sergej

Beiträge aus dem Excel-Forum zum Thema "String überprüfen und Stellen ersetzen?"