Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Shell bzw. ShellExecute - Bitte um Hilfe

Forumthread: Shell bzw. ShellExecute - Bitte um Hilfe

Shell bzw. ShellExecute - Bitte um Hilfe
20.06.2017 22:14:39
TiloT
Hallo alle zusammen,
es ist schon spät aber ich kann nicht abschalten, aus folgendem Grund bei dem
Ich um Eure Hilfe bitte:
Merke ActiveCell.Value
Erstell Dir PDF Liste in Combobox
Öffne PDF by Click
Öffne die erweiterte Suche und übergebe den Wert aus ActiveCell.Value
Suche
Hier das Konstrukt:

  • Sub Uopen
    Userbox1.Show
    End Sub

  • In der Userbox habe ich eine Combobox die ich so verfülle:
    Option Explicit
    Private Sub CommandButton1_Click()
    Unload UserForm1
    UserForm1.Hide
    End Sub
    

    Private Sub UserForm_Initialize()
    Dim strPath     As String
    Dim strFile     As String
    Dim strTabName  As String
    strPath = " C:\Documents\Listen\"
    strFile = Dir(strPath)
    With ComboBox1
    .clear
    Do Until strFile = ""
    .AddItem Left(strFile, Len(strFile))
    strFile = Dir
    Loop
    End With
    End Sub
    
    Bei Auswahl einer PDF aus der CB wird die PDF geöffnet, die erweiterte Suche geöffnet, der Suchbegriff übergeben und gesucht!
    Private Sub ComboBox1_Click()
    On Error GoTo 0
    Suche = UserForm1.ComboBox1.Text
    Call Listen
    End Sub
    

  • Option Explicit
    Public Suche As String
    Sub Listen()
    Dim pfad_zum_reader As String
    Dim pfad_zur_datei As String
    Dim suchbegriff As String
    pfad_zum_reader = "C:\Program Files (x86)\Adobe\Acrobat Reader DC\Reader\AcroRd32.exe"
    pfad_zur_datei = " C:\Documents\Listen " & "\" & Suche
    suchbegriff = ActiveCell.Value
    Shell pfad_zum_reader & " /A search=" & suchbegriff & " " _
    & pfad_zur_datei, vbMaximizedFocus
    Unload UserForm1
    UserForm1.Hide
    End Sub

  • Leider schafft es Shell in 80% aller Fälle nicht die entsprechende PDF Dateien zu finden bzw. sie zu öffnen, aus irgendeinem Grund „Beim öffnen der Datei ist ein Fehler… Diese Datei kann nicht gefunden werden!“
    Das passiert auch ohne Übergabe des ActiveCell.Value Suchbegriffs, also reines öffnen!
    Mit ShellExecute und kann ich alle PDF (und sowieso alle Dateien) öffnen ohne irgendwelche Probleme.
    Option Explicit
    Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" _
    (ByVal hWnd As Long, ByVal lpOperation As String, _
    ByVal lpFile As String, ByVal lpParameters As String, _
    ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
    Private Sub PDF_Show()
    Dim Pfad As String
    Pfad = " C:\Documents\Listen \"
    ShellExecute 0, "open", Pfad, "", "", 1
    End Sub
    
    Könnt Ihr mir bitte helfen ShellExecute in mein Konstrukt einzubauen oder anzupassen!?
    Ich weiß einfach nicht wie die Parametereingabe erfolgen muss um die Funktionsweise wie mit Shell (siehe oben) herzustellen.
    „RAW AND DIRTY VERSION“

  • Sub Listen()
    Dim pfad_zum_reader As String
    Dim pfad_zur_datei As String
    Dim suchbegriff As String
    Dim lSuccess As Long
    pfad_zum_reader = "C:\Program Files (x86)\Adobe\Acrobat Reader DC\Reader\AcroRd32.exe"
    pfad_zur_datei = "C:\Documents\Listen" & "\" & Suche
    suchbegriff = ActiveCell.Value
    lSuccess = ShellExecute(0, "Open", pfad_zum_reader & pfad_zur_datei & " /A search=" & suchbegriff )
    Unload UserForm1
    UserForm1.Hide
    End Sub

  • Vielen lieben Dank schon einmal im Voraus.
    Gruß und einen schönen Abend
    Tilo
    Anzeige

    8
    Beiträge zum Forumthread
    Beiträge zu diesem Forumthread

    Betreff
    Datum
    Anwender
    Anzeige
    AW: Shell bzw. ShellExecute - Bitte um Hilfe
    21.06.2017 18:36:49
    Nepumuk
    Hallo Tilo,
    teste mal:
    Option Explicit

    Private Declare Function ShellExecuteA Lib "shell32.dll" ( _
        ByVal hwnd As Long, _
        ByVal lpOperation As String, _
        ByVal lpFile As String, _
        ByVal lpParameters As String, _
        ByVal lpDirectory As String, _
        ByVal nShowCmd As Long) As Long
    Private Declare Function GetShortPathNameA Lib "kernel32.dll" ( _
        ByVal lpszLongPath As String, _
        ByVal lpszShortPath As String, _
        ByVal cchBuffer As Long) As Long

    Private Const SW_MAXIMIZE As Long = 3
    Private Const MAX_PATH As Long = 260

    Public Sub Test()
        
        Dim strSearchText As String, strFile As String, strPath As String
        Dim lngReturn As Long
        
        strSearchText = "Array"
        strFile = "G:\Eigene Dateien\Eigene PDF\Arraylist_Eigenschaften.pdf"
        
        strPath = Space$(MAX_PATH)
        lngReturn = GetShortPathNameA(strFile, strPath, MAX_PATH)
        strPath = Left$(strPath, lngReturn)
        
        Call ShellExecuteA(0, "open", "AcroRd32.exe", "/A ""search=" & _
            strSearchText & """ " & strPath, "C:\", SW_MAXIMIZE)
        
    End Sub

    Ich kann nicht sagen ob es funktioniert, denn mein ganz neuer Reader stürzt dabei ab. Mit der vorhergehenden Version hat es so funktioniert.
    Gruß
    Nepumuk
    Anzeige
    Tausend Dank, ich hatte schon aufgegeben :o)
    22.06.2017 01:33:01
    TiloT
    Hallo Nepumuk,
    nachdem ich versucht habe zu verstehen wie Execute funktioniert habe ich schon fast aufgegeben.
    Dank Dir läuft es jetzt ohne zicken oder murren!
    Eines möchte ich gerne wissen:
    Was passiert beim schreiben bzw. übergeben des Suchwertes an dieser Stelle mit den verzerrten Leerzeichen, eine mir nicht schlüssige Zeichenfolge, alleine daran wäre ich schon gescheitert!
    suchbegriff & """ " & = ?
    Allerbeste Grüße
    Tilo
    Anzeige
    AW: Tausend Dank, ich hatte schon aufgegeben :o)
    22.06.2017 10:42:59
    Nepumuk
    Hallo Tilo,
    ganz einfach search = strSearchText muss selbst in Anführungszeichen stehen. Daher am Anfang und am Ende je zwei davon.
    Gruß
    Nepumuk
    Tausend Dank, ich hatte schon aufgegeben :o)
    22.06.2017 01:33:01
    TiloT
    Hallo Nepumuk,
    nachdem ich versucht habe zu verstehen wie Execute funktioniert habe ich schon fast aufgegeben.
    Dank Dir läuft es jetzt ohne zicken oder murren!
    Eines möchte ich gerne wissen:
    Was passiert beim schreiben bzw. übergeben des Suchwertes an dieser Stelle mit den verzerrten Leerzeichen, eine mir nicht schlüssige Zeichenfolge, alleine daran wäre ich schon gescheitert!
    suchbegriff & """ " & = ?
    Allerbeste Grüße
    Tilo
    Anzeige
    Fehler wenn Dateien auf einem Server liegen?
    23.06.2017 10:18:11
    TiloT
    Moin Nepumuk,
    jetzt habe ich es für die lokaln PDF auf C: hinbekommen.
    Wenn ich den Pfad jetzt von C auf H (liegt auf einem Server) ändere ist wieder Käse.
    Dann sagt er wieder: Beim öffnen des Dokuments ist ein Fehler aufgetreten. Es ist ein Dateifehler aufgetreten.
    Müssen die Parameter andere sein wenn ich auf einen Server Ordner zugreife?
    Danke mal für Dein Feedback!
    Gruß
    Tilo
    Anzeige
    AW: Fehler wenn Dateien auf einem Server liegen?
    23.06.2017 10:22:54
    Nepumuk
    Hallo Tilo,
    kann ich jetzt nicht sagen da ich in Ermangelung eines privaten Severlaufwerkes nicht testen kann. Ich werde es am Montag in der Firma mal versuchen.
    Gruß
    Nepumuk
    AW: Fehler wenn Dateien auf einem Server liegen?
    23.06.2017 10:50:35
    TiloT
    Alles Klar! Dann erstmal ein schönes Wochenende!
    Cu
    Tilo
    Gefunden! Fehler hier Adobe Reader "Sandbox Modus"
    23.06.2017 11:53:51
    TiloT
    Moin Nepumuk,
    ich hab nochmal die Suchmaschine angeworfen und habs gefunden!
    Im Adobe Reader muss man unter Bearbeiten, Voreinstellungen, Allgemein, Sicherheit (erweitert), den "Geschützten Modus" ausschalten und alternativ die "erweitete Sicherheit" deaktivieren (gefühlt schnelleres öffnen)
    Hat Adobe nach dem Update wohl übertrieben!!!
    Natürlich mit etwas Vorsicht zu genießen, wobei ich denke das es heutzutage jedem Anwender in einem Netzwerk klar sein sollte!
    Gruß
    Tilo
    Anzeige
    ;
    Anzeige

    Infobox / Tutorial

    ShellExecute in Excel VBA: Anleitung zur Nutzung und Fehlerbehebung


    Schritt-für-Schritt-Anleitung

    1. VBA-Umgebung öffnen: Drücke ALT + F11, um den Visual Basic for Applications-Editor zu öffnen.

    2. Modul hinzufügen: Klicke mit der rechten Maustaste auf "VBAProject (DeineArbeitsmappe)" und wähle Einfügen > Modul.

    3. ShellExecute deklarieren: Füge die folgende Deklaration in das Modul ein, um die ShellExecute-Funktion zu verwenden:

      Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" _
          (ByVal hWnd As Long, ByVal lpOperation As String, _
          ByVal lpFile As String, ByVal lpParameters As String, _
          ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
    4. Subroutine erstellen: Erstelle eine Subroutine, um eine PDF-Datei zu öffnen. Hier ein einfaches Beispiel:

      Sub OpenPDF()
          Dim pdfPath As String
          pdfPath = "C:\Documents\Listen\deinPDF.pdf"
          ShellExecute 0, "open", pdfPath, "", "", 1
      End Sub
    5. Parameter für die Suche hinzufügen: Wenn Du einen Suchbegriff übergeben möchtest, kannst Du das Beispiel wie folgt anpassen:

      Sub OpenPDFWithSearch(searchTerm As String)
          Dim pdfPath As String
          pdfPath = "C:\Documents\Listen\deinPDF.pdf"
          ShellExecute 0, "open", "C:\Program Files (x86)\Adobe\Acrobat Reader DC\Reader\AcroRd32.exe", _
              "/A search=""" & searchTerm & """ " & pdfPath, "", 1
      End Sub

    Häufige Fehler und Lösungen

    • Fehler beim Öffnen von PDF-Dateien: Wenn Du die Fehlermeldung "Diese Datei kann nicht gefunden werden!" erhältst, überprüfe den genauen Pfad zur PDF-Datei. Achte darauf, dass keine zusätzlichen Leerzeichen vorhanden sind.

    • ShellExecute funktioniert nicht: Wenn die ShellExecute-Funktion nicht wie erwartet arbeitet, stelle sicher, dass der Adobe Reader korrekt installiert ist und der Pfad zur Anwendung stimmt.

    • Zugriffsprobleme auf Serverpfade: Wenn Du versuchst, auf Dateien auf einem Server zuzugreifen, achte darauf, dass Du die richtigen Berechtigungen hast. Es kann auch nötig sein, den Pfad in ein UNC-Format (z.B. \\Server\Ordner\Datei.pdf) zu ändern.


    Alternative Methoden

    • Shell-Funktion verwenden: Wenn ShellExecute nicht funktioniert, kannst Du die Shell-Funktion als Alternative nutzen. Beachte, dass die Shell-Funktion oft weniger zuverlässig ist, wenn es um das Öffnen von Dateien geht.

      Shell "C:\Program Files (x86)\Adobe\Acrobat Reader DC\Reader\AcroRd32.exe " & pdfPath, vbNormalFocus
    • FileDialog nutzen: Um die PDF-Auswahl zu erleichtern, kannst Du ein FileDialog-Objekt verwenden, um dem Benutzer zu erlauben, die Datei auszuwählen.


    Praktische Beispiele

    1. Öffnen einer PDF-Datei aus einer ComboBox:

      Private Sub ComboBox1_Click()
          Dim selectedPDF As String
          selectedPDF = "C:\Documents\Listen\" & ComboBox1.Text
          ShellExecute 0, "open", selectedPDF, "", "", 1
      End Sub
    2. Suche in einer PDF-Datei:

      Sub SearchInPDF()
          Dim searchTerm As String
          searchTerm = ActiveCell.Value
          Dim pdfPath As String
          pdfPath = "C:\Documents\Listen\deinPDF.pdf"
          ShellExecute 0, "open", "C:\Program Files (x86)\Adobe\Acrobat Reader DC\Reader\AcroRd32.exe", _
              "/A search=""" & searchTerm & """ " & pdfPath, "", 1
      End Sub

    Tipps für Profis

    • Vermeide Leerzeichen im Pfad: Benutze Unterstriche oder Escape-Sequenzen, um Probleme mit Leerzeichen im Pfad zu vermeiden.

    • Fehlerbehandlung einbauen: Verwende On Error-Anweisungen, um Fehler abzufangen und den Benutzer entsprechend zu informieren.

    • Testen in verschiedenen Umgebungen: Stelle sicher, dass Dein Code sowohl auf lokalen Maschinen als auch in Netzwerkinfrastrukturen funktioniert.


    FAQ: Häufige Fragen

    1. Wie kann ich sicherstellen, dass die PDF-Datei geöffnet wird? Stelle sicher, dass der Pfad zur PDF-Datei korrekt ist und dass keine Zugriffsprobleme bestehen.

    2. Warum funktioniert die ShellExecute-Funktion nicht bei Serverpfaden? Möglicherweise fehlen die nötigen Berechtigungen oder der Pfad ist nicht im richtigen UNC-Format angegeben. Überprüfe die Zugriffsrechte auf dem Server.

    3. Was bedeutet die Anweisung /A search= in der ShellExecute-Funktion? Diese Anweisung übergibt den Suchbegriff an den Adobe Reader, um die Suche in der PDF-Datei zu starten. Achte darauf, dass der Suchbegriff in Anführungszeichen steht.

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige