Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema InputBox
BildScreenshot zu InputBox InputBox-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema Userform
BildScreenshot zu Userform Userform-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema Label
BildScreenshot zu Label Label-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema TextBox
BildScreenshot zu TextBox TextBox-Seite mit Beispielarbeitsmappe aufrufen

Datei im Laufwerk C: suchen

Betrifft: Datei im Laufwerk C: suchen von: walter mb
Geschrieben am: 25.07.2014 13:26:54

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

  

Betrifft: Wie sieht denn Dein bisheriger Code aus ? von: NoNet
Geschrieben am: 25.07.2014 13:49:27

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


  

Betrifft: AW: Wie sieht denn Dein bisheriger Code aus ? von: walter mb
Geschrieben am: 25.07.2014 15:04:57

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


  

Betrifft: Datei per FSO suchen von: NoNet
Geschrieben am: 25.07.2014 17:44:09

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


  

Betrifft: Leider nicht von: walter mb
Geschrieben am: 25.07.2014 18:21:29

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


  

Betrifft: Anderer Datei getestet von: walter mb
Geschrieben am: 25.07.2014 19:03:43

Hallo Nonet,
habe es mit anderer Datei getestet, ebenfalls nicht.
Übrings hatte Textbox7 gändert in 1
mfg
Walter mb


  

Betrifft: AW: Anderer Datei getestet von: Nepumuk
Geschrieben am: 26.07.2014 10:57:40

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


  

Betrifft: Läuft aber bitte... von: walter mb
Geschrieben am: 26.07.2014 13:01:08

Hallo Nepumuk,
läuft !!!

Frage:
Kann man irgendwie was einbauen, wenn Datei nicht vorhanden ist als Info
"Suche läuft" ???

mfg
walter


  

Betrifft: Noch eine Kleinigkeit aber ... von: walter mb
Geschrieben am: 26.07.2014 13:11:38

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


  

Betrifft: AW: Noch eine Kleinigkeit aber ... von: Nepumuk
Geschrieben am: 26.07.2014 15:34:53

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


  

Betrifft: Danke Nepumuk -) von: Walter
Geschrieben am: 26.07.2014 16:19:20

Danke für die Unterstützung,
großartig !!!
mfg
Walter


  

Betrifft: AW: Datei im Laufwerk C: suchen von: Adis
Geschrieben am: 27.07.2014 20:43:34

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


  

Betrifft: Ja ist ja Klasse von: walter mb
Geschrieben am: 28.07.2014 13:45:09

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


  

Betrifft: AW: Ja ist ja Klasse von: Nepumuk
Geschrieben am: 28.07.2014 17:50:39

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


  

Betrifft: AW: Ja ist ja Klasse von: Adis
Geschrieben am: 29.07.2014 23:23:59

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


  

Betrifft: AW: Ja ist ja Klasse von: Nepumuk
Geschrieben am: 30.07.2014 09:02:55

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


 

Beiträge aus den Excel-Beispielen zum Thema "Datei im Laufwerk C: suchen"