Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema CommandButton
BildScreenshot zu CommandButton CommandButton-Seite mit Beispielarbeitsmappe aufrufen

Shell bzw. ShellExecute - Bitte um Hilfe


Betrifft: Shell bzw. ShellExecute - Bitte um Hilfe von: TiloT
Geschrieben am: 20.06.2017 22:14:39

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

      

    Betrifft: AW: Shell bzw. ShellExecute - Bitte um Hilfe von: Nepumuk
    Geschrieben am: 21.06.2017 18:36:49

    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


      

    Betrifft: Tausend Dank, ich hatte schon aufgegeben :o) von: TiloT
    Geschrieben am: 22.06.2017 01:33:01

    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


      

    Betrifft: AW: Tausend Dank, ich hatte schon aufgegeben :o) von: Nepumuk
    Geschrieben am: 22.06.2017 10:42:59

    Hallo Tilo,

    ganz einfach search = strSearchText muss selbst in Anführungszeichen stehen. Daher am Anfang und am Ende je zwei davon.

    Gruß
    Nepumuk


      

    Betrifft: Tausend Dank, ich hatte schon aufgegeben :o) von: TiloT
    Geschrieben am: 22.06.2017 01:33:01

    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


      

    Betrifft: Fehler wenn Dateien auf einem Server liegen??? von: TiloT
    Geschrieben am: 23.06.2017 10:18:11

    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


      

    Betrifft: AW: Fehler wenn Dateien auf einem Server liegen??? von: Nepumuk
    Geschrieben am: 23.06.2017 10:22:54

    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


      

    Betrifft: AW: Fehler wenn Dateien auf einem Server liegen??? von: TiloT
    Geschrieben am: 23.06.2017 10:50:35

    Alles Klar! Dann erstmal ein schönes Wochenende!
    Cu
    Tilo


      

    Betrifft: Gefunden! Fehler hier Adobe Reader "Sandbox Modus" von: TiloT
    Geschrieben am: 23.06.2017 11:53:51

    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