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

Forumthread: Datei im Laufwerk C: suchen

Datei im Laufwerk C: suchen
25.07.2014 13:26:54
walter
Guten Tag,
ich bastel mir gerade ein Makro zusammen,
allerdings klappt es nicht.
Ich möchte eine Datei im kompl. Laufwerk C: suchen.
strPath = "C:\"
so gehts auch nicht : strPath = "C:\*.*"
mfg
walter mb

Anzeige

15
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Wie sieht denn Dein bisheriger Code aus ?
25.07.2014 13:49:27
NoNet
Hallo Walter,
mit der geposteten codezeile legst Du ja nur den Inhalt einer (String?-)Vairablen fest, aber Du führst damit weder eine Suche durch, noch wechselst Du auf irgendein Laufwerk bzw. Verzeichnis und es ist auch kein Dateiname ersichtlich.
Poste doch bitte mal den gesamten Code, den Du dazu bereits erstellt hast.
Soll denn die Datei in einem bestimmten Verzeichnis gesucht werden, oder irgendwo auf der Festplatte (z.B. könnte Sie im Ordner "C:\Irgendein\beliebiges\Verzeichnis" liegen ?
Gruß, NoNet

Anzeige
AW: Wie sieht denn Dein bisheriger Code aus ?
25.07.2014 15:04:57
walter
Hallo Nonet,
anbei was ich mir zusammengestellt habe.
Private Sub TextBox7_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Dim DateiNam As String
Dim mb
Dim tan
mb = TextBox7.Text
Dim strPath$
strPath = "C:\"
With ActiveSheet
strPath = strPath & mb
' MsgBox strPath & mb
If Dir(strPath, vbNormal)  "" Then
MsgBox "Kunden-Name " & DateiNam & Chr(13) & Chr(13) & _
"mit der Rg. - Nr. ist vorhanden !" & vbLf & vbLf & "Bitte ändern !"
Else
MsgBox "nicht vorhanden"
End If
End With
End Sub
Habe festgestellt, wenn ich die Datei auf Laufwerkwerk C: abspeichere, zeigt mir
Richtig an.
Möchte also das alle Verzeichnisse abgesucht werden, so wie es im
Datei-Explorer möglich ist.
mfg
walter mb

Anzeige
Datei per FSO suchen
25.07.2014 17:44:09
NoNet
Hsallo Walter,
in Deinem Code wird kein Unterordner durchsucht, daher wird die Datei nur dann gefunen, wenn sie EXAKT im Ausgangsverzeichnis "C:\" gespeichert ist !
Versuche mal gemäß folgender Version (aus Geschwindigkeitsgründen beginnt die Suche im Ordner "C:\Temp" und irgendwo in diesem Ordner befindet sich die Datei auch) :
Sub Datei_Suchen()
Dim strDir As String
Dim objFSO As Object
Dim objDir As Object
Set objFSO = CreateObject("scripting.filesystemobject")
strDir = "C:\Temp" 'Ausgangsverzeichnis
Set objDir = objFSO.GetFolder(strDir)
strDir = Dateipfad(objDir, "Irgendeine Datei.txt") 'Diese Datei wird gesucht
If strDir = "" Then
MsgBox "Datei wurde nicht gefunden !"
Else
MsgBox strDir, , "Dateipfad"
End If
Set objDir = Nothing
Set objFSO = Nothing
End Sub
Function Dateipfad(ByVal pCurrentDir As Object, ByVal strName As String)
Dim aItem As Variant
On Error Resume Next
For Each aItem In pCurrentDir.Files
If aItem.Name Like strName Then
Dateipfad = aItem.Path
Exit Function
End If
Next
For Each aItem In pCurrentDir.SubFolders
Dateipfad = Dateipfad(aItem, strName)
If Dateipfad  "" Then Exit For
Next
End Function
Gruß und schönes WE, NoNet

Anzeige
Leider nicht
25.07.2014 18:21:29
walter
Hallo Nonet,
erst mal Danke.
Leider kommt immer nicht vorhanden, obwohl die Datei offen ist und
in einem Verzeichnis gespeichert.
Habe so eingesetzt:
strDir = Dateipfad(objDir, TextBox1.Text) 'Diese Datei wird gesucht
auch so geht nicht.
strDir = Dateipfad(objDir, "TextBox1.Text") 'Diese Datei wird gesucht
Habe auch den Orginaldateinamen eingesetzt, das gleiche.
mfg
walter mb

Anzeige
Anderer Datei getestet
25.07.2014 19:03:43
walter
Hallo Nonet,
habe es mit anderer Datei getestet, ebenfalls nicht.
Übrings hatte Textbox7 gändert in 1
mfg
Walter mb

AW: Anderer Datei getestet
26.07.2014 10:57:40
Nepumuk
Hallo,
was steht denn in der TextBox und wie lautet der tatsächliche komplette Dateiname (mit Endung)?
Hier mal ein Beispiel wie ich das mache:
Option Explicit

Private Declare Function SearchTreeForFile Lib "imagehlp.dll" ( _
    ByVal RootPath As String, _
    ByVal InputPathName As String, _
    ByVal InputPathBuffer As String) As Long

Private Const MAX_PATH As Long = 260&

Public Sub Test()
    Dim lngReturn As Long
    Dim strPath As String * MAX_PATH
    lngReturn = SearchTreeForFile("C:\", "SASelfCert.exe", strPath)
    If lngReturn = 0 Then
        MsgBox "Nix gefunden"
    Else
        strPath = Left$(strPath, InStr(1, strPath, vbNullChar) - 1)
        MsgBox strPath
    End If
End Sub

Natürlich sind im Dateinamen auch Wildcards zulässig. Statt "SASelfCert.exe" kann ich auch nach "*Self*.*" suchen. Je eindeutier der Dateiname ist und wenn die Endung bekannt ist, dann ist es wahrscheinlicher die richtige Datei zu finden als wenn du nach einem einzelnen Zeichen suchst.
Gruß
Nepumuk

Anzeige
Läuft aber bitte...
26.07.2014 13:01:08
walter
Hallo Nepumuk,
läuft !!!
Frage:
Kann man irgendwie was einbauen, wenn Datei nicht vorhanden ist als Info
"Suche läuft" ?
mfg
walter

Noch eine Kleinigkeit aber ...
26.07.2014 13:11:38
walter
Hallo Nepumuk,
bin sehr glücklich das ich eine Lösung durch DICH gefunden habe.
Ich möchte gern (zur Übersicht)
MsgBox strPath
trennen, so das der Dateiname in der nächsten Zeile steht.
Ich finde es super das das Verzeichnis mit aufgeführt wird.
mfg
walter mb

Anzeige
AW: Noch eine Kleinigkeit aber ...
26.07.2014 15:34:53
Nepumuk
Hallo,
wozu soll "Suche läuft" kommen wenn es die Datei nicht gibt? Da ist die Suche ja beendet und es wird angezeigt dass nichts gefunden wurde. Wenn du eine Anzeige haben willst die während der Suche erscheint, dann benutze ein nicht modales Userform mit einem Label darauf.
Ordner und Dateinamen kannst du so trennen:
Public Sub Test()
    Dim strPath As String, strFolder As String, strFile As String
    strPath = "C:\Program Files\abylonsoft\SASelfCert\SASelfCert.EXE"
    strFile = Mid$(strPath, InStrRev(strPath, "\") + 1)
    strFolder = Left$(strPath, InStrRev(strPath, "\") - 1)
    MsgBox strFolder & vbLf & vbLf & strFile
End Sub

Gruß
Nepumuk

Anzeige
Danke Nepumuk -)
26.07.2014 16:19:20
Walter
Danke für die Unterstützung,
großartig !!!
mfg
Walter

AW: Datei im Laufwerk C: suchen
27.07.2014 20:43:34
Adis
Hallo
anbei eine kleine Datei die das Problem vielleicht auf einfache Art löst
Die Ursprungsdatei stammt aus dem Internet für Ordner auflisten (oder Laufwerk)
In Tabelle1 kann man Ordner oder ein Laufwerk auflisten. Zu beachten bitte die
Obergrenze von 65000 Zeilen bei sehr grossen Ordnern wie C: mit Systemdateien
Interessanter ist Tabelle2, die ich speziell auf dieses Problem geaendert habe.
Hier können gleich 5 Dateien oder ein Ordner im Laufwerk C: gesucht werden.
Die Liste kann gelöscht oder angehangen werden.
Ich arbeite noch an einer Nachfolger Version um Systemdateien zu überspringen.
Es macht keinen Sinn in denen auch noch zu suchen. Da arbeite ich noch daran.
https://www.herber.de/bbs/user/91747.xls
Gruss Adis

Anzeige
Ja ist ja Klasse
28.07.2014 13:45:09
walter
Hallo Adis,
das ist ja eine Super Datei.
Ich habe noch nicht ganz gefunden, wie ich eine Datei suchen kann,
die ich in der Textbox stehen habe.
mfg
walter mb

AW: Ja ist ja Klasse
28.07.2014 17:50:39
Nepumuk
Hallo Walter,
nimm die nicht. Der Code funktioniert leidlich, geschrieben ist er grauenhaft. Mit haben sich beim Anblick die Nackenhaare gesträubt. Ich hab Adis hier: https://www.herber.de/forum/messages/1372648.html schon gefragt ob er eine ehrliche Kritik dazu haben will, aber noch keine Antwort erhalten.
Das Problem, beim rekursiven Suchen mit der Dir-Funktion musst du erst mal alle Ordner suchen, das dauert auf meinem C-Laufwerk bei 18.380 Ordnern im ersten Durchgang 4 Minuten. Die nächsten sind zwar dann mit 20 Sekunden wesentlich schneller, aber selbst wenn die Datei schon im ersten Ordner ist, dauert es trotzdem immer 20 Sekunden nur die Ordner zu suchen.
Gruß
Nepumuk

Anzeige
AW: Ja ist ja Klasse
29.07.2014 23:23:59
Adis
Hallo
es gibt etwas was mich ehrlich wundert. Mein Programm wurde ja in der Luft zerrissen.
In einer geharschten Kritik verwies mich Nepumuk auf ein Programm das er vor 20 Jahren schrieb.
Ich habe es heruntergeladen und mir angesehen. Da habe ich echt keinen Durchblick wie es läuft.
(Inzwischen habe ich es aber soweit geknackt das es zum privaten Ordner auflisten geeignet ist)
Was mich nur offen wundert: wenn man ein Programm schlecht macht, sagt es läuft nicht gut!
Warum bietet man dann den Fragenden nicht etwas besseres an. Solche Programme könnten ja als
Standard Beispieldateien im Forum stehen. Eine Anfrage, kurzer Link dazu, runterladen, klappt!
Das ist eine Sache die ich als alter Praktiker nicht so ganz verstehe.
Mit der End Anweisung gehe ich mal ins Wikibook und mache mich schlau.
Lässt sich ja durch Exit Sub ersetzen, kein Thema. Danke für den Hinweis.
Gruss Adis

Anzeige
AW: Ja ist ja Klasse
30.07.2014 09:02:55
Nepumuk
Hallo Adis,
Warum bietet man dann den Fragenden nicht etwas besseres an.
Na dann schau mal hier: https://www.herber.de/forum/messages/1372432.html
Ein Bruchteil deines Codes und rund 4mal so schnell (jetzt ohne die 20 Sekunden zu berücksichtigen die deine Lösung benötigt nur um erst mal alle Ordner zu finden). Ist zwar nur dazu geeignet eine einzelne Datei zu suchen, aber so wollte es der Frager ja.
Schau auch mal hier: http://www.office-loesung.de/ftopic616886_15_0_asc.php ganz unten findest du eine Tabelle in der die verschiedenen Möglichkeiten nach Dateien zu suchen verglichen werden. Wobei ich sagen muss, wenn ich die Suche per API-Funktion für den speziellen Fall optimiere, wäre es sicher nochmal um einiges schneller.
Gruß
Nepumuk
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Datei im Laufwerk C: finden und Pfad anzeigen


Schritt-für-Schritt-Anleitung

Um eine Datei im gesamten Laufwerk C: zu suchen, kannst du VBA (Visual Basic for Applications) in Excel verwenden. Folge diesen Schritten:

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen.

  2. Füge ein neues Modul hinzu:

    • Klicke auf Einfügen > Modul.
  3. Kopiere den folgenden Code in das Modul:

    Sub Datei_Suchen()
       Dim strDir As String
       Dim objFSO As Object
       Dim objDir As Object
       Set objFSO = CreateObject("scripting.filesystemobject")
       strDir = "C:\" ' Ausgangsverzeichnis
       Set objDir = objFSO.GetFolder(strDir)
       strDir = Dateipfad(objDir, "Irgendeine Datei.txt") ' Diese Datei wird gesucht
       If strDir = "" Then
           MsgBox "Datei wurde nicht gefunden!"
       Else
           MsgBox strDir, , "Dateipfad"
       End If
       Set objDir = Nothing
       Set objFSO = Nothing
    End Sub
    
    Function Dateipfad(ByVal pCurrentDir As Object, ByVal strName As String)
       Dim aItem As Variant
       On Error Resume Next
       For Each aItem In pCurrentDir.Files
           If aItem.Name Like strName Then
               Dateipfad = aItem.Path
               Exit Function
           End If
       Next
       For Each aItem In pCurrentDir.SubFolders
           Dateipfad = Dateipfad(aItem, strName)
           If Dateipfad <> "" Then Exit For
       Next
    End Function
  4. Ändere die Datei zu suchende Datei in der Zeile strDir = Dateipfad(objDir, "Irgendeine Datei.txt").

  5. Führe das Makro aus, um die Datei im Laufwerk C: zu suchen.


Häufige Fehler und Lösungen

  • Fehler: "Datei wurde nicht gefunden!"

    • Stelle sicher, dass der angegebene Dateiname korrekt ist und die Datei tatsächlich im Laufwerk C: vorhanden ist.
  • Fehler: Laufwerk C: wird nicht durchsucht

    • Der Code durchsucht nur den angegebenen Ausgangsordner. Stelle sicher, dass du den richtigen Pfad verwendest.
  • Fehler beim Ausführen des Makros

    • Überprüfe, ob die Makros in den Excel-Einstellungen aktiviert sind. Gehe zu Datei > Optionen > Trust Center > Einstellungen für das Trust Center > Makroeinstellungen.

Alternative Methoden

  1. Verwendung der Dir-Funktion:

    • Eine einfachere Methode, um eine Datei im aktuellen Verzeichnis zu suchen.
    • Beispiel:
      If Dir("C:\DeineDatei.txt") <> "" Then
       MsgBox "Datei gefunden!"
      Else
       MsgBox "Datei nicht vorhanden."
      End If
  2. Excel-Funktionen:

    • Für einfache Suchanfragen kann auch die SVERWEIS-Funktion genutzt werden, jedoch ist dies nicht für das Durchsuchen des gesamten Laufwerks geeignet.

Praktische Beispiele

Um eine Datei im Laufwerk C: zu suchen, kannst du den Namen der Datei in eine TextBox eingeben und dann das Makro ausführen. Hier ein Beispiel, wie du die TextBox einbinden kannst:

Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    Dim strDatei As String
    strDatei = TextBox1.Text
    ' Verwende die Datei-Suchfunktion hier
    ' ...
End Sub

In diesem Fall wird TextBox1.Text als Dateiname verwendet.


Tipps für Profis

  • Verwende Wildcards: Du kannst Wildcards wie * verwenden, um nach Teilstrings zu suchen, z.B. "*Datei*.txt" für alle Dateien, die "Datei" im Namen haben.
  • Optimierung der Suche: Wenn du das Laufwerk C: durchsuchen möchtest, kann es hilfreich sein, die Suche auf spezifische Ordner zu beschränken, um die Geschwindigkeit zu verbessern.
  • Fehlerbehandlung: Implementiere eine robuste Fehlerbehandlung, um unerwartete Situationen während der Suche zu vermeiden.

FAQ: Häufige Fragen

1. Wie kann ich die Suchgeschwindigkeit erhöhen? Um die Suchgeschwindigkeit zu erhöhen, beschränke den Suchpfad auf spezifische Ordner, statt das gesamte Laufwerk C: zu durchsuchen.

2. Kann ich nach mehreren Dateien gleichzeitig suchen? Ja, du kannst den Code anpassen, um eine Liste von Dateinamen zu durchsuchen, indem du eine Schleife über die Dateinamen implementierst.

3. Was mache ich, wenn ich keine Berechtigung habe, bestimmte Ordner zu durchsuchen? Stelle sicher, dass du die richtigen Berechtigungen hast oder führe das Makro mit Administratorrechten aus, um Zugriffsprobleme zu vermeiden.

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