none
Problem: Aus Listbox Datei öffnen RRS feed

  • Frage

  • Da ich noch ein Anfänger bin, bräuchte ich bitte eure Hilfe.

    Ich habe 2 Listboxes("lbxVerzeichnisse"/ "lbxDateien"), die sozusagen in meinem Formular einen ersatz Explorer darstellen.

    Das Verzeichnis der angezeigten Datei aus der Listbox wird im Textfeld: "tbxVerzeichnis" angezeigt.

    Bis hierhin klappt alles.

    Jetzt möchte ich die Dateien, die ich aus der anzeigten lbxDateien -Listbox ausgewählt habe, öffnen können.

    Hierbei bin ich auf eure Hilfe angewiesen. Vielen Dank schomal im Voraus!!!!

    Private Sub FillListboxes(strPfad As String, strMaske As String)
        Dim strEintrag          As String
        Dim strDateien          As String
        Dim strVerzeichnisse    As String
    
        strEintrag = Dir(strPfad & strMaske, vbDirectory)
        Do Until strEintrag = ""
            If (GetAttr(strPfad & strEintrag) And vbDirectory) = vbDirectory Then
                If strEintrag <> "." Then
                    strVerzeichnisse = strVerzeichnisse & ";" & strEintrag
                End If
              Else
    
              '##################################################
              'Dateiendungseinschränkung 'derArb
                  If Me!cbxDateiEndung.Column(1) = "*.*" Then
                        strDateien = strDateien & ";" & strEintrag
                    Else
                        If Right(strEintrag, 3) <> Me!cbxDateiEndung.Column(1) Then
                             strDateien = strDateien
                          Else
                             strDateien = strDateien & ";" & strEintrag
                        End If
                  End If
              '##################################################
    
            End If
            strEintrag = Dir
        Loop
        With Me!lbxVerzeichnisse
            .RowSource = Mid$(strVerzeichnisse, 2)
            .Requery
        End With
        With Me!lbxDateien
            .RowSource = Mid$(strDateien, 2)
            .Requery
        End With
    End Sub
     Private Sub lbxVerzeichnisse_Click()
        If Me!lbxVerzeichnisse = ".." Then
            Me!tbxVerzeichnis = Left$(Me!tbxVerzeichnis, _
                                      InStrRev(Me!tbxVerzeichnis, "\", _
                                               Len(Me!tbxVerzeichnis) - 1))
          Else
            Me!tbxVerzeichnis = Nz(Me!tbxVerzeichnis, cstrStartverzeichnis) & _
                                Me!lbxVerzeichnisse & "\"
        End If
        tbxVerzeichnis_AfterUpdate
        Me!lbxVerzeichnisse.Requery
    End Sub



    • Bearbeitet TimmiEG Mittwoch, 14. November 2018 15:31
    • Bearbeitet Stefan FalzModerator Mittwoch, 14. November 2018 16:55 Code formatiert
    Mittwoch, 14. November 2018 15:30

Antworten

  • Alternativ gibt es die Onboard-Funktion FollowHyperlink:

    Application.FollowHyperlink "X:\Ordner\Datei.txt"

    Funktionalität entspricht dem Doppelklick auf einen Dateinamen im Windows Explorer.

    Gruss - Peter

    Donnerstag, 15. November 2018 10:20
    Moderator
  • Hi,

    eine Datei öffnen kannst Du bspw. so:

    Dim LocalShell
    Set LocalShell = CreateObject( "Shell.Application" )
        LocalShell.Open "X:\Ordner\Datei.txt"
    Set LocalShell = Nothing

    Die Variable heißt bei mir "LocalShell", da es ein globales Objekt "Shell" gibt, das aber meines Wissens nach nur Anwendungen öffnet und keine Dateien ohne dass man die dazugehörige Exe angibt. (Du kannst die Variable aber auch anders benennen, x oder y oder Hummelinchen^^)

    Shell.Application hingegen kann das, da Windows sich die passende Anwendung zur Datei selbst raussucht.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
    https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport


    Mittwoch, 14. November 2018 17:41
    Moderator

Alle Antworten

  • Hi,

    eine Datei öffnen kannst Du bspw. so:

    Dim LocalShell
    Set LocalShell = CreateObject( "Shell.Application" )
        LocalShell.Open "X:\Ordner\Datei.txt"
    Set LocalShell = Nothing

    Die Variable heißt bei mir "LocalShell", da es ein globales Objekt "Shell" gibt, das aber meines Wissens nach nur Anwendungen öffnet und keine Dateien ohne dass man die dazugehörige Exe angibt. (Du kannst die Variable aber auch anders benennen, x oder y oder Hummelinchen^^)

    Shell.Application hingegen kann das, da Windows sich die passende Anwendung zur Datei selbst raussucht.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
    https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport


    Mittwoch, 14. November 2018 17:41
    Moderator
  • Alternativ gibt es die Onboard-Funktion FollowHyperlink:

    Application.FollowHyperlink "X:\Ordner\Datei.txt"

    Funktionalität entspricht dem Doppelklick auf einen Dateinamen im Windows Explorer.

    Gruss - Peter

    Donnerstag, 15. November 2018 10:20
    Moderator
  • Vielen dank für die schnelle Antwort.

    @Peter: Mit der  Application.FollowHyperlink Me!tbxVerzeichnis Methode wird der Windowsexplorer mit dem Pfad aus tbxVerzeichnis geöffnet. Somit muss man die ausgewälte Datei im Windowsexplorer zum öffnen erneut auswählen. Wie lässt sich das auf direktem Wege mit Doppel anklicken einer Datei  in der Listbox öffnen?

    Und falls es nicht zu viel verlangt wäre, wie kann ich die Dateien in einem bestimmten Ordner z.B. \Monitoring in der Listbox suchen und anzeigen lassen, wobei sich dieser in irgendeinem Unterordner befindet.


    • Als Antwort markiert TimmiEG Freitag, 16. November 2018 14:43
    • Bearbeitet TimmiEG Freitag, 16. November 2018 14:44
    • Tag als Antwort aufgehoben TimmiEG Freitag, 16. November 2018 14:46
    Freitag, 16. November 2018 14:18
  • @ Peter Danke für Ihre Antwort, leider hat der code nicht funktioniert bzw bin ich nach dem google'n von LocalShell in bezug auf Access nicht schlauer geworden.

    Gruß Timmi

    • Als Antwort markiert TimmiEG Freitag, 16. November 2018 14:43
    • Bearbeitet TimmiEG Freitag, 16. November 2018 14:44
    • Tag als Antwort aufgehoben TimmiEG Freitag, 16. November 2018 14:46
    Freitag, 16. November 2018 14:22
  • Hallo Timmi,

    "LocalShell" wirst Du auch nicht finden. Ich schrieb ja, dass ich nur die Variable so benannt hatte. Eben weil es bereits ein globals, automatisch verfügbares Objekt "Shell" gibt.

    Für dich interessant ist eher

    CreateObject( "Shell.Application" )

    bzw. nur "Shell.Application". Aber der Code sollte dennoch funktionieren.

    Und falls es nicht zu viel verlangt wäre, wie kann ich die Dateien in einem bestimmten Ordner z.B. \Monitoring in der Listbox suchen und anzeigen lassen, wobei sich dieser in irgendeinem Unterordner befindet.

    Ich dachte, das hast Du alles bereits?


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
    https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport

    Freitag, 16. November 2018 14:56
    Moderator
  • Hallo,

    Mit der  Application.FollowHyperlink Me!tbxVerzeichnis Methode wird der Windowsexplorer mit dem Pfad aus tbxVerzeichnis geöffnet. Somit muss man die ausgewälte Datei im Windowsexplorer zum öffnen erneut auswählen. Wie lässt sich das auf direktem Wege mit Doppel anklicken einer Datei  in der Listbox öffnen?

    Naja, du musst den Dateinamen mit angeben, nicht nur das Verzeichnis. Ich weiß nicht, wie die Felder in deinem Formular heißen, daher nur Pseudocode:

    Application.FollowHyperlink Me!tbxVerzeichnis & "\" & Me!Dateiname

    Und falls es nicht zu viel verlangt wäre, wie kann ich die Dateien in einem bestimmten Ordner z.B. \Monitoring in der Listbox suchen und anzeigen lassen, wobei sich dieser in irgendeinem Unterordner befindet. 

    Du kannst per Dir-Funktion suchen und den gefundenen Dateinamen mit obiger Methode öffnen. Solltest du allerdings erst Verzeichnisse listen und dann Dateinamen darin suchen wollen, ist die von Stefan vorgeschlagene Methode mit dem Shell-Objekt vorzuziehen, wegen größeren Funktionsumfangs.

    Gruss - Peter

    Dienstag, 20. November 2018 09:32
    Moderator
  • Entschuldigen Sie für die späte Antowort.

    Es klappt wunderbar!

    Danke nochmals :)

    • Als Antwort markiert TimmiEG Dienstag, 4. Dezember 2018 11:33
    • Tag als Antwort aufgehoben Stefan FalzModerator Dienstag, 4. Dezember 2018 11:37
    Dienstag, 4. Dezember 2018 10:08