per VBA Dateinamen nack Logik prüfen

  • Access

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von Ruerte.

    per VBA Dateinamen nack Logik prüfen

    Hallo an das Forum

    ich habe folgendes Problem.
    Ich habe ein Verzeichnis mit Dateien, welche manuell umbenannt werden müssen.
    Hier ist es wichtig einen festen Aufbau zu beachten.

    Diese Dateien werden Per Mail versendet ( Access per VBA), nun möchte ich den Dateinamen vorab auf Logik Prüfen.

    Der Dateiname ist wie folgt aufgebaut xxxxxxx_xxxxxx_DRUCKER-Antrag_........tif

    der erste Block muss 8 Zahlen haben
    der zweite Block 7 Zahlen haben
    der dritte Block muss das Wort DRUCKER-Antrag haben (genauso gross das Wort DRUCKER und mit Bindestrich und dem Wort Antrag geschrieben sein)
    Leider kommt es vor das auch mal Drucker_Antrag oder DRUCKER_Antrag ect geschrieben wird, was faktisch falsch ist.

    die Blöcke sind jeweils mit einem Unterstrich getrennt

    Ich hoffe es kann mir hier jemand weiterhelfen.
    Hallo @intermde,

    Entweder Du prüfst es stumpf mit einem If "..." like "..." oder Du nutzt Regex

    Ich würde an deiner stelle die Regex variante nehmen... so kann auch schnell der Inhalt (nur Zahlen / nur Buchstaben etc.) vorab geprüft werden.

    <EDIT> Möglicherweise musst Du den Code noch auf VBA anpassen
    hier aber ein Beispiel für RegEx in VBA https://stackoverflow.com/questions/22542834/how-to-use-regular-expressions-regex-in-microsoft-excel-both-in-cell-and-Loops
    </EDIT>

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Dim beispiel1() As String = {"12345678_1234567_DRUCKER-Antrag_", "12345678_123567_DRuCKER-Antrag_", "1234568_1234567_DRUCKER-Antrag_", "12345678_124567_DRUCKER-Antrag_"}
    2. For Each b1 As String In beispiel1
    3. If b1 Like "????????_???????_DRUCKER-Antrag_" Then
    4. MessageBox.Show(True)
    5. Else
    6. MessageBox.Show(False)
    7. End If
    8. Next
    9. '\\ True / False / False / False

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Dim beispiel2() As String = {"12345678_1234567_DRUCKER-Antrag_", "12345678_123567_DRuCKER-Antrag_", "1234568_1234567_DRUCKER-Antrag_", "12345678_124567_DRUCKER-Antrag_"}
    2. Dim rgx1 As New Regex("^\d{8}_\d{7}_DRUCKER-Antrag_$")
    3. For Each b2 As String In beispiel2
    4. MessageBox.Show(rgx1.IsMatch(b2))
    5. Next
    6. '\\ True / False / False / False


    LG Ruerte
    Unfortunately, this Signature is not available in Germany because it may contain music for which GEMA
    has not granted the respective music rights. Sorry about that.

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „Ruerte“ ()

    Visual Basic-Quellcode

    1. Sub test()
    2. Dim Txt(10) As String
    3. Dim i As Long
    4. Dim Match As Boolean
    5. Set Re = CreateObject("VBScript.RegExp")
    6. Re.MultiLine = True
    7. Re.Pattern = "\d{8}_\d{7}_DRUCKER-Antrag_"
    8. Txt(1) = "1235678_1234567_DRUCKER-Antrag_xxx.tif"
    9. Txt(2) = "12345678_1234567_Drucker-Antrag_4711.tif"
    10. Txt(3) = "12345678_1234567_DRUCKER-Antrag_dsjled.tif"
    11. For i = 1 To 3
    12. Match = Re.test(Txt(i))
    13. If Match Then
    14. Debug.Print Txt(i), " ---> OK"
    15. Else
    16. Debug.Print Txt(i), " ---> Fehler"
    17. End If
    18. Next
    19. End Sub

    petaod schrieb:

    Ich halte in dem Fall RegEx mit Kanonen auf Spatzen geschossen.

    Ruerte schrieb:

    Ich würde an deiner stelle die Regex variante nehmen... so kann auch schnell der Inhalt (nur Zahlen / nur Buchstaben etc.) vorab geprüft werden

    @petaod ich habe in dem Moment als ich es geschrieben habe nicht bedacht das beim like vergleich # für 0-9 steht! Ich gebe Dir recht das ein like in dem fall eigentlich vollkommen ausreicht!
    Unfortunately, this Signature is not available in Germany because it may contain music for which GEMA
    has not granted the respective music rights. Sorry about that.