Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: String soll etwas nicht enthalten

String soll etwas nicht enthalten
18.11.2019 13:06:49
Norbert
Hallo,
mir fehlt ein Codeschnipsel zum Erfolg.
Ich habe ein Programm welches einen Ordner durchläuft und Dateien einliest, die einem bestimmten Muster entsprechen. Dieses Programm funktioniert einwandfrei. Ich benötige eine Anpassung. Meine derzeitige String-Anweisung sieht so aus:
strDatei = Dir(strOrdner & "\" & "DE*. ")
Es werden also alle Dateien eingelesen die mit DE beginnen.
Ich will nun aber Dateien ausschließen die nach dem DE ein SOAP enthalten.
Kommt SOAP darin vor, soll die Datei übersprüngen werden.
Ich habe das hier versucht:
strDatei = Dir(strOrdner & "\" & "DE*. & !"*SOAP*" ")
Ich dachte "!" würde für nicht stehen?
Leider liest das Makro jetzt gar nichts mehr ein.
Wie bekomme ich meine obige Anweisung so hin, dass Dateien mit SOAP im Namen nicht berücksichtigt werden?
Weiß jemand Rat?
Beste Grüße
Norbert
Anzeige

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: String soll etwas nicht enthalten
18.11.2019 13:08:52
Norbert
So naürlich:
strDatei = Dir(strOrdner & "\" & "DE*." & !"*SOAP*" ")
BG
Norbert
AW: String soll etwas nicht enthalten
18.11.2019 13:09:15
Norbert
So naürlich:
strDatei = Dir(strOrdner & "\" & "DE*." & !"*SOAP*")
BG
Norbert
AW: zusätzliche If-Abfrage
18.11.2019 13:19:47
Fennek
Hallo,

strDatei = dir(strOrdner & "\" & "DE*.*")
if instr(1, strDatei, "SOAP") = 0 then
mfg
Anzeige
AW: zusätzliche If-Abfrage
18.11.2019 13:23:23
Norbert
Hallo Fennek,
verstehe.
Es ist also nicht möglich, dass direkt im String als Ausschlusskriterium zu nennen?
Was gebe ich denn dann bei der Then an?
Ich will ja, dass die Schleife wieder von vorne mit der nächsten Datei beginnt..
Wenn ich Then angebe und dann das Makro wieder aufrufe kommt es zu einer Endlosschleife.
Gibt es da sowas wie next file?
Danke & BR
Norbert
Anzeige
AW: Workbook.Open?
18.11.2019 13:47:11
Fennek
was Du mit den Dateien geplant hast, kommt zwischen IF.. THEN und ENDIF.
Wenn möglich, kannst Du den (gekürzten) Code posten?
AW: Workbook.Open?
18.11.2019 14:20:22
Norbert
Hier aufs wesentliche Reduziert:
Range("B:B", "C:C").Clear
Set FSO = CreateObject("Scripting.FileSystemObject")
strOrdner = ThisWorkbook.Path
strDatei = Dir(strOrdner & "\" & "DE*.")
Tabelle1.AutoFilterMode = False
Do While strDatei ""
intPos = InStr(strDatei, "DE")
strNummer = Mid(strDatei, intPos + 3, 3)
lngZeileFrei = Tabelle1.Range("B" & Tabelle1.Rows.Count).End(xlUp).Row + 1
Tabelle1.Range("B" & lngZeileFrei).Value = "DE" & strNummer
Set f = FSO.getfile(strOrdner & "\" & strDatei)
Tabelle1.Range("C" & lngZeileFrei).Value = f.DateLastModified
strDatei = Dir
Loop
End If
End Sub
-------
Mein konkretes Problem ist, dass ich mit StrDatei alle Dateien einlese, die mit DE beginnen.
Mit welcher Anweisung überspringe ich die Dateien, die im Namen nach dem DE ein SOAP enthalten?
Das Makro soll dann natürlich zur nächsten Datei weiterspringen usw.
Danke & BR
Norbert
Anzeige
AW: so?
18.11.2019 16:09:11
Fennek
ich habe das so verstanden:

sub Test()
Range("B:B", "C:C").Clear
Set FSO = CreateObject("Scripting.FileSystemObject")
strDatei = Dir(ThisWorkbook.Path & "\" & "DE*.")
Tabelle1.AutoFilterMode = False
Do While strDatei  ""
if InStr(strDatei, "SOAP") = 0 then
strNummer = Mid(strDatei, intPos + 3, 3)
lngZeileFrei = Tabelle1.Range("B" & Tabelle1.Rows.Count).End(xlUp).Row + 1
Tabelle1.Range("B" & lngZeileFrei).Value = "DE" & strNummer
Set f = FSO.getfile(strOrdner & "\" & strDatei)
Tabelle1.Range("C" & lngZeileFrei).Value = f.DateLastModified
End If
strDatei = Dir
Loop
End Sub

Anzeige
AW: so?
18.11.2019 17:22:16
Norbert
Funktioniert. Danke!!!
BR
Norbert
AW: meinst Du das?
18.11.2019 17:29:24
Fennek

sub Test()
with createObject("Scripting.FileSystemObject")
set fld = .GetFolder(ThisWorkbook.Path)
for each f in fld.Files
if left(f.name, 2) = "DE" and instr(1, f.name, "SOAP") = 0 then
lr = lr + 1
cells(lr, 1) = f.name
cells(lr, 2) = f.f.DateLastModified
end if
next f
end with
end sub
(ungeprüft)
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Dateien in Excel VBA filtern: Ausschluss von Strings


Schritt-für-Schritt-Anleitung

Um in Excel VBA Dateien zu filtern und solche auszuschließen, die einen bestimmten String enthalten, kannst du die folgende Vorgehensweise verwenden. In diesem Beispiel möchten wir alle Dateien einlesen, die mit "DE" beginnen, jedoch die Dateien ignorieren, die "SOAP" im Dateinamen enthalten.

  1. Öffne den VBA-Editor in Excel mit ALT + F11.
  2. Füge ein neues Modul hinzu: Klicke mit der rechten Maustaste auf "VBAProject" und wähle "Einfügen" > "Modul".
  3. Nutze den folgenden Code:
Sub FilterFiles()
    Dim FSO As Object
    Dim fld As Object
    Dim f As Object
    Dim strOrdner As String
    Dim lr As Long

    Set FSO = CreateObject("Scripting.FileSystemObject")
    strOrdner = ThisWorkbook.Path
    Set fld = FSO.GetFolder(strOrdner)
    lr = 1 ' Zeile für die Ausgabe

    For Each f In fld.Files
        If Left(f.Name, 2) = "DE" And InStr(1, f.Name, "SOAP") = 0 Then
            lr = lr + 1
            Cells(lr, 1).Value = f.Name
            Cells(lr, 2).Value = f.DateLastModified
        End If
    Next f
End Sub
  1. Führe das Makro aus: Drücke F5, um das Makro zu starten und die gewünschten Dateien in das Arbeitsblatt zu laden.

Häufige Fehler und Lösungen

  • Problem: Das Makro läuft nicht und gibt einen Fehler aus.

    • Lösung: Überprüfe, ob der Pfad zum Ordner korrekt ist und ob das Arbeitsblatt, auf das du zugreifen möchtest, existiert.
  • Problem: Dateien werden nicht korrekt gefiltert.

    • Lösung: Stelle sicher, dass der InStr-Befehl korrekt eingesetzt wird, um zu prüfen, ob "SOAP" im Dateinamen enthalten ist. Die Bedingung sollte so aussehen:
      If InStr(1, strDatei, "SOAP") = 0 Then

Alternative Methoden

Falls du eine andere Möglichkeit suchst, um Dateien zu filtern, kannst du den Dir-Befehl in Kombination mit einer If-Bedingung verwenden. Hier ist eine alternative Methode:

Sub AlternativeFilter()
    Dim strDatei As String
    Dim strOrdner As String

    strOrdner = ThisWorkbook.Path
    strDatei = Dir(strOrdner & "\DE*.*")

    Do While strDatei <> ""
        If InStr(1, strDatei, "SOAP") = 0 Then
            ' Hier kannst du die Aktionen durchführen, z.B. in eine Liste einfügen
        End If
        strDatei = Dir
    Loop
End Sub

Praktische Beispiele

Hier sind einige praktische Beispiele, wie du den vba string enthält-Befehl nutzen kannst, um Dateien auszuschließen:

  • Um Dateien mit einem bestimmten Muster wie "DE*" zu filtern und "SOAP" auszuschließen:

    If Left(f.Name, 2) = "DE" And InStr(1, f.Name, "SOAP") = 0 Then
  • Wenn du mehrere Strings gleichzeitig ausschließen möchtest, kannst du dies mit zusätzlichen Bedingungen umsetzen:

    If Left(f.Name, 2) = "DE" And InStr(1, f.Name, "SOAP") = 0 And InStr(1, f.Name, "TEST") = 0 Then

Tipps für Profis

  • Verwende Option Explicit: Füge am Anfang deines Moduls Option Explicit hinzu, um sicherzustellen, dass alle Variablen deklariert sind. Dies hilft dir, Fehler zu vermeiden.

  • Verwende die With-Anweisung: Wenn du mit Objekten arbeitest, nutze die With-Anweisung, um den Code leserlicher und effizienter zu gestalten.

  • Optimiere die Schleifen: Wenn du viele Dateien hast, kann es hilfreich sein, nur die benötigten Informationen zu speichern und die Schleifen so kurz wie möglich zu halten.


FAQ: Häufige Fragen

1. Wie kann ich mehrere Strings ausschließen? Du kannst mehrere And-Bedingungen in der If-Anweisung verwenden, um verschiedene Strings auszuschließen.

2. Was bedeutet InStr in VBA? InStr ist eine Funktion in VBA, die die Position eines bestimmten Strings innerhalb eines anderen Strings zurückgibt. Wenn der String nicht gefunden wird, gibt die Funktion 0 zurück.

3. Kann ich Dir auch für andere Dateitypen verwenden? Ja, du kannst Dir verwenden, um nach verschiedenen Dateitypen zu filtern, indem du das Muster im Befehl entsprechend änderst (z.B. *.txt, *.jpg, etc.).

4. Was ist der Unterschied zwischen If...Then und Select Case? If...Then eignet sich gut für einfache Bedingungen, während Select Case nützlich ist, wenn du viele Bedingungen überprüfen musst.

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