Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Ordnerinhalt in Listenfeld anzeigen & Datei dann öffnen

Begonnen von mikepo, Februar 07, 2020, 22:55:29

⏪ vorheriges - nächstes ⏩

mikepo

Guten Abend zusammen,
was wäre denn der richtige Vorgang, um in einem Formular/Listenfeld einen Ordnerinhalt, sprich die Dateien in dem Ordner, im Listenfeld anzuzeigen. Und dann bei Doppelklick auf den jeweiligen Dateinamen (hauptsächlich PDF-Dateien), diese Datei dann aus dem Formular heraus zu öffnen.

Ich finde im Netz sehr viel "alten" (und langen) VBA code von 2006 und früher. Aber da müsste es doch was aktuelleres geben?!

Danke für Eure Mithilfe/Tipps

lg

Hondo

Hallo,
ein Listenfeld ist dafür eigentlich nicht so gut geeignet, ich würde das in einem Listview anzeigen - oder einem TreeView, beides Microsoft OCX Controls.
Ansonsten wenn du in Google suchst nach diesem Thema findest du zig Lösungen, z.B. hier:
https://www.ms-office-forum.net/forum/showthread.php?t=259337

Gruß Andreas

mikepo

vielen Dank erstmal. Und wie kann ich die pdf öffnen, im Listenfeld ?

Hondo

Hallo,
dazu benötigt man einen installierten PDF-Viewer wie den Akrobat o.Ä.
Öffnen tut man das dann z.B. so:
FollowHyperlink "c:\User\Demouser\Dokumente\Dokument4711.pdf"

Andreas

mikepo

Hallo Andreas, vielen Dank, hat mir sehr geholfen deine Tipps.

Wie schaffe ich es, dass hier:
Private Sub CommandButton1_Click()
Const Verz = "c:\temp"
Dim Datei
Dim Ordner
Dim FSO As Object
Set FSO = CreateObject("Scripting.filesystemobject")
Me.ListBox1.Clear
For Each Datei In FSO.getfolder(Verz).Files
    Me.ListBox1.AddItem Datei 'Dir(Datei)
Next
For Each Ordner In FSO.getfolder(Verz).subfolders
    Me.ListBox1.AddItem Ordner
Next
End Sub

das Verzeichnis mit einem Platzhalter gefüllt ist. Das wenn ich die Artikelnummer eingebe (bspw. 12345678) das Verzeichnis sich dann so zusammensetzt: C:\temp\12345678

danke für deine Hilfe

lg michael

Hondo

Hallo,
die Methode clear gibts nicht für Listenfelder.
Statt dessen muss die Rowsouce auf "" gesetzt werden:
Private Sub CommandButton1_Click()
    Const Verz = "c:\temp"
    Dim Datei As Object, Ordner As Object, FSO As Object
    Set FSO = CreateObject("Scripting.filesystemobject")
    Me.Liste1.RowSource = ""
    For Each Datei In FSO.getfolder(Verz).Files
        Me.Liste1.AddItem Datei
        Debug.Print Datei
    Next
    For Each Ordner In FSO.getfolder(Verz).subfolders
        Me.Liste1.AddItem Ordner
    Next
End Sub

ZitatWie schaffe ich es daß das Verzeichnis mit einem Platzhalter gefüllt ist. Das wenn ich die Artikelnummer eingebe (bspw. 12345678) das Verzeichnis sich dann so zusammensetzt: C:\temp\12345678
Stringaddition heißt das Zauberwort:
Me.Liste1.AddItem "c:\temp\" & Me.txtArtikelnummer

Gruß Andreas

mikepo


mikepo

Hallo, ich habe jetzt folgendes Problem, wenn es zu dieser Artikelnummer kein Verzeichnis gibt.

Was kann ich da machen, das es dann einfach eine leere Listbox1 anzeigt, ohne der Fehlermeldung das er den Pfad nicht finden kann ?

habe es mit einer If Schleife probiert, aber dann sucht er trotzdem nach dem Pfad

If Verz = "" Then
ListBox1.RowSource = ""
Else
.....

danke für eure Tipps. lg michael

Hondo

Bitte poste den kompletten Code.
Mit den 3 Zeilen kann man nichts anfangen.
Ganz generell prüft man mit DIR() ob ein Verzeichnis vorhanden ist.
Gruß Andreas

mikepo

Hallo Andreas,

dies wäre der code (ich will das es mir die Dateien anzeigt (ohne der Verzeichnisstruktur), über einen Button rechts öffne ich dann die Datei). txtStartSuche dort steht die Artikelnummer drinnen. Funktioniert ohne der If-Function einwandfrei, nur leider halt mit Fehlermeldung wenn NICHTS im Ordner ist

Dim Verz As String
Verz = "\\VerzeichnisA\VerzeichnisB\" & Forms!frmStartseite!txtStartSuche

If Dir(Verz) = "" Then
ListBox1.RowSource = ""
Else

Dim Datei
Dim Ordner
Dim FSO As Object
Set FSO = CreateObject("Scripting.filesystemobject")
ListBox1.RowSource = ""
For Each Datei In FSO.getfolder(Verz).Files
    Me.ListBox1.AddItem Datei.Name
Next
For Each Ordner In FSO.getfolder(Verz).subfolders
    Me.ListBox1.AddItem Ordner.Name
Next
End If
End Sub

er zeigt mir jetzt immer eine leere Listbox an, egal ob was im Verzeichnis drinnen ist oder nicht

Gruss, Michael

Hondo

Hallo,
mal davon abgesehen dass "\\VerzeichnisA\VerzeichnisB\" kein gültiges Verzeichnis ist da der Laufwerksbuchstabe fehlt, fehlt einfach am Ende ein Backslash:
Verz = "c:\VerzeichnisA\VerzeichnisB\" & Forms!frmStartseite!txtStartSuche & "\"

Gruß Andreas

mikepo

Hallo Andreas, das Verzeichnis ist ein freigegebenes am Server, deshalb \\servername\verzeichnisA\

mikepo

#12
es funktioniert !!! vielen dank, es war wirklich nur das "\" das gefehlt hat. jetzt funktioniert auch die IF-Funktion.

Hondo

Du solltest deinen Code besser formatieren das verbessert auch die Übersichtlichkeit.
Ich nutze dazu das kostenlose Tool Smart Indenter: https://www.add-ins.com/macro-products-for-Microsoft-Excel/how-to-indent-vba-code/how-to-indent-vba-code.htm
Gruß Andreas