Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1372to1376
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
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

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

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

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

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

10 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige