Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Ordner durchsuchen und Treffer als Liste ausgeben (Excel)

Frage Entwicklung VB for Applications

Mitglied: omochka

omochka (Level 1) - Jetzt verbinden

04.02.2008, aktualisiert 11.02.2008, 14549 Aufrufe, 14 Kommentare

Hallo!

Ich möchte durch klicken auf ein Objekt bzw. Button einen Ordner nach einer zuvor eingegebenen Nummer durchsuchen und mir das Ergebnis als Liste (nicht Excel-Liste, sondern UserForm) ausgeben lassen. Diese Liste soll als PopUp erscheinen. Wenn ich ein Ergebnis anklicke, wird die entsprechende Datei mit dem entsprechendem Programm geöffnet.

Kann mir einer helfen?

0c9326df99db8706bd603f9064ec7cd8-testuw3 - Klicke auf das Bild, um es zu vergrößern
Mitglied: bastla
07.02.2008 um 18:23 Uhr
Hallo omochka!

Du benötigst

- Schaltfläche (in der Tabelle) "btnShowAll", Caption: "Alle zeigen", Code (die zu suchende Nummer wird in diesem Beispiel aus Zelle C5 entnommen):
01.
Private Sub btnShowAll_Click() 
02.
Datei = Dir(Fld & "\" & "*" & [C5] & "*.*") 
03.
frmOpenFile.lstFiles.Clear 
04.
Do While Datei <> "" 
05.
    frmOpenFile.lstFiles.AddItem Datei 
06.
    Datei = Dir 
07.
Loop 
08.
frmOpenFile.Show 
09.
End Sub
- UserForm "frmOpenFile", Caption und weitere Gestaltung nach Wunsch, mit
- ListBox "lstFiles" und
- CommandButton "btnClose", Caption "Schließen"
- Code:
01.
Private Sub btnClose_Click() 
02.
Me.Hide 
03.
End Sub 
04.
 
05.
Private Sub lstFiles_Click() 
06.
ShellExecute hWnd, "open", Fld & "\" & lstFiles.Text, "", "", SW_NORMAL 
07.
End Sub
- ein Modul mit folgendem Code:
01.
Public Const Fld As String = "D:\Dein Ordner" 'ohne abschließenden "\", auch nicht bei Root (daher nicht "D:\", sondern nur "D:") 
02.
 
03.
Public Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" _ 
04.
 (ByVal hWnd As Long, ByVal lpOperation As String, ByVal lpFile As String, _ 
05.
  ByVal lpParameters As String, ByVal lpDirectory As String, _ 
06.
  ByVal nshowcmd As Long) As Long 
07.
 
08.
Const SW_HIDE = 0                  ' Versteckt öffnen 
09.
Const SW_MAXIMIZE = 3              ' Maximiert öffnen 
10.
Const SW_MINIMIZE = 6              ' Minimiert öffnen 
11.
Const SW_NORMAL = 1 
12.
Const SW_RESTORE = 9 
13.
Const SW_SHOWMAXIMIZED = 3 
14.
Const SW_SHOWMINIMIZED = 2 
15.
Const SW_SHOWMINNOACTIVE = 7 
16.
Const SW_SHOWNOACTIVATE = 4
Gutes Gelingen!

Grüße
bastla

[Edit] Löschen der Dateiliste im ersten Sub ergänzt. [/Edit]
Bitte warten ..
Mitglied: omochka
08.02.2008 um 15:17 Uhr
Wow! Vielen-vielen Dank! Hätte nicht gedacht, dass mir einer helfen kann.

Eine Frage habe ich noch: Was ändert sich am Code, wenn auch noch die Unterordner des Stammordners durchsucht werden sollen? Bzw. ein Ordner, wenn es einen Ordner mit der gleichen Nummer gibt, dann soll er auch durchsucht werden.
Bitte warten ..
Mitglied: bastla
08.02.2008 um 15:42 Uhr
Hallo omochka!

Wenn der Ordnernamen mit der Nummer übereinstimmt, ginge es so:
01.
Private Sub btnShowAll_Click() 
02.
Datei = Dir(Fld & "\" & "*" & [C5] & "*.*") 
03.
frmOpenFile.lstFiles.Clear 
04.
Do While Datei <> "" 
05.
    frmOpenFile.lstFiles.AddItem Datei 
06.
    Datei = Dir 
07.
Loop 
08.
Datei = Dir(Fld & "\" & [C5] & "\*.*") 
09.
Do While Datei <> "" 
10.
    frmOpenFile.lstFiles.AddItem [C5] & "\" & Datei 
11.
    Datei = Dir 
12.
Loop 
13.
frmOpenFile.Show 
14.
End Sub
Soferne auch für den Ordner gilt, dass die gesuchte Nummer nur Namensbestandteil ist, oder, dass auch noch Unterordner des Ordners einbezogen werden müssten, wäre eine Suche über das "FileSystemObject" zu überlegen.

Übrigens noch ein Nachtrag (hier im Code bereits berücksichtigt): Die Liste muss mit
01.
frmOpenFile.lstFiles.Clear
vor dem Befüllen gelöscht werden, da sich ansonsten noch die vorher gefundenen Einträge darin befinden. Ich trage das auch in dem in meinem vorigen Beitrag geposteten Code nach.

Grüße
bastla
Bitte warten ..
Mitglied: omochka
08.02.2008 um 16:39 Uhr
Vielen Dank! Ich probiere es gleich aus. Wenn man beim Schließen der Liste "Unload Me" ausführt, dann werden die Einträge ebenfalls gelöscht.
Bitte warten ..
Mitglied: bastla
08.02.2008 um 16:46 Uhr
Hallo omochka!

Mit "Unload" hast Du natürlich recht, und bei diesem einfachen Formular bringt es vermutlich ohnehin nicht viel, es geladen zu lassen und nur zu "hide"en.

Grüße
bastla
Bitte warten ..
Mitglied: omochka
08.02.2008 um 17:29 Uhr
Funktioniert super, bastla! Vielen Dank!

Wenn du Glück hast, dann werde ich noch eine weitere Frage stellen. Ich versuche es allerdings erst selber. :D
Bitte warten ..
Mitglied: omochka
08.02.2008 um 17:38 Uhr
Ne, das würde zu lange dauern, wenn ich es selbst versuche.
Ich möchte nun alle Dateien im Ordner mit der gegebenen Nummer anzeigen lassen, sogar, wenn sich diese in Unterordnern befinden. Kannst du mir noch mal helfen, bastla?
Bitte warten ..
Mitglied: bastla
08.02.2008 um 17:45 Uhr
Hallo omochka!

Betrifft dies nur eine (Unter-)Ordnerebene, oder muss noch tiefer gegraben werden?

Zusatzfrage: Lassen sich Dateien und Ordner dadurch unterscheiden, dass nur Dateien einen Typ haben (bzw alle Ordnernamen keinen Punkt enthalten)?

Grüße
bastla
Bitte warten ..
Mitglied: omochka
08.02.2008 um 18:10 Uhr
Hallo bastla!

Es muss tiefer gegraben werden bis es keine Ordner mehr gibt.
Ordner habe keine Punkte.

Mit freundlichen Grüßen
omochka
Bitte warten ..
Mitglied: bastla
09.02.2008 um 17:52 Uhr
Hallo omochka!

Dann starten wir das Ganze eben so:
01.
Private Sub btnShowAll_Click() 
02.
'Zugriff über das VBScript-"FileSystemObject", daher das Object erzeugen 
03.
Set objFS = CreateObject("Scripting.FilesystemObject") 
04.
 
05.
'Liste löschen 
06.
frmOpenFile.lstFiles.Clear 
07.
 
08.
'Durchsuchen des Ordnerbaumes starten 
09.
DoFolders objFS.GetFolder(Fld) 'Startordner als Objekt übergeben 
10.
 
11.
'Dateiliste fertig, UserForm anzeigen 
12.
frmOpenFile.Show 
13.
End Sub 
14.
 
15.
 
16.
Sub DoFolders(Folder As Object) 
17.
Dim Subfolder As Object 
18.
 
19.
If LCase(Folder.Name) <> LCase("System Volume Information") Then 'nur zur Sicherheit ... 
20.
    For Each File In Folder.Files 'Reihenfolge in der Ordnerstruktur von "oben" nach "unten", daher zunächst die Dateien ... 
21.
        If InStr(1, File.Name, [C5], vbTextCompare) Then 'Suchkriterium im Dateinamen (allerdings inkl. Extension) enthalten? 
22.
            frmOpenFile.lstFiles.AddItem Replace(File.Path, Fld & "\", "") 'relativen Pfad verwenden 
23.
        End If 
24.
    Next 
25.
 
26.
    For Each Subfolder In Folder.SubFolders ... und jetzt erst die Unterordner 
27.
        DoFolders Subfolder 'Rekursiver Aufruf des Sub für Unterordner 
28.
    Next 
29.
End If 
30.
End Sub
Da der relative Pfad verwendet werden soll, muss sichergestellt sein, dass die Angabe des Startordners in der Konstanten "Fld" keinen abschließenden "\" enthält - bitte bei der Deklaration der Konstanten berücksichtigen (oder, umgekehrt, dafür sorgen, dass "Fld" mit einem "\" endet und hier im Code das Anfügen des "\" weglassen).

Grüße
bastla
Bitte warten ..
Mitglied: omochka
11.02.2008 um 18:53 Uhr
Leider bekomme ich keine Ergebnisse, da sich mein Rechner mit dieser Lösung immer aufhängt. Hm.
Bitte warten ..
Mitglied: bastla
11.02.2008 um 19:08 Uhr
Hallo omochka!

Da ist mir leider ein Kommentarzeichen in der Zeile "For Each Subfolder ..." abhanden gekommen (beim Posten noch schnell verschlimmbessert ) - richtig wäre:
01.
For Each Subfolder In Folder.SubFolders '... und jetzt erst die Unterordner
Ansonsten klappts bei mir mit dem geposteten Code.

Grüße
bastla
Bitte warten ..
Mitglied: omochka
11.02.2008 um 19:35 Uhr
Das habe ich gemerkt, weil dieser Bereich des Codes rot eingefärbt war. Das Zeichen habe ich gesetzt, trotzdem. Ich werde es noch mal probieren.
Bitte warten ..
Mitglied: bastla
11.02.2008 um 19:55 Uhr
Hallo omochka!

Du könntest nach "If LCase ..." ein
01.
Debug.Print Folder.Name
einbauen (und ev auch auf die nächste Zeile einen Breakpoint setzen) - wenn Du jetzt direkt aus dem VBA-Editor startest (und mit Strg-G vorher das "Direktfenster" einblendest), siehst Du zumindest einmal, welcher Ordner zuletzt durchsucht wurde ...

Grüße
bastla
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Ähnliche Inhalte
Heiß diskutierte Inhalte
Windows Server
DHCP Server switchen (25)

Frage von M.Marz zum Thema Windows Server ...

SAN, NAS, DAS
gelöst HP-Proliant Microserver Betriebssystem (14)

Frage von Yannosch zum Thema SAN, NAS, DAS ...

Grafikkarten & Monitore
Win 10 Grafikkarte Crash von Software? (13)

Frage von Marabunta zum Thema Grafikkarten & Monitore ...

Windows 7
Verteillösung für IT-Raum benötigt (12)

Frage von TheM-Man zum Thema Windows 7 ...