Clever-Excel-Forum

Normale Version: Problem mit Shell functionsaufruf
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
Hallo zusammen,

hab einen Code zum öffnen einer bestimmten PDF Seite geschrieben, zudem öffnet es sich bei klick (Hyperlink).
Die Seitenzahl steht in der Zelle links vom Link und in der Zelle selbst ist der Pfad inkl. Datei.

hab das Problem das bei vielen meiner Dateien der Link auf die PDF Seite funktioniert, allerdings auch bei einigen nicht.
Diesen Fehler kann ich mir nicht erklären.
Vielleicht könnt ihr mir weiterhelfen

Code:
in der Tabelle:


Option Explicit

Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink)
   OpenPDF Target.Parent.Value, Target.Parent.Offset(0, -1).Value
End Sub






modul1:


Sub AddHyperLinks()
  Dim x As Integer
  Dim y As Integer: y = get_last_row("Tabelle1", 22)
  Dim id As String
  Dim name As String
  For x = 3 To y
    id = Cells(x, 1)
    name = Cells(x, 2)
    With ThisWorkbook.Sheets("Tabelle1")
      .Hyperlinks.Add Anchor:=.Range("V" & x), _
     Address:=""
    End With
   
  Next x
End Sub
Function get_last_row(sheetname As String, column_number As Integer) As Long
  get_last_row = Sheets(sheetname).Cells(Rows.Count, column_number).End(xlUp).Row
End Function






modul2:


Option Explicit
Function OpenPDF(sFile As String, _
                 Optional page)
    On Error GoTo Error_Handler
    Dim WSHShell        As Object
    Dim sAcrobatPath    As String
    Dim sParameters     As String
    Dim sCmd            As String
 
    'Determine the path to Acrobat Reader
    Set WSHShell = CreateObject("Wscript.Shell")
    sAcrobatPath = WSHShell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\AcroRd32.exe\")
 
    'Build our parameters
    If Not IsMissing(page) Then
        If Len(sParameters) = 0 Then
            sParameters = "page=" & page
        Else
            sParameters = sParameters & "&" & "page=" & page
        End If
    End If
  
 
    'Open our PDF
    If Len(sParameters) = 0 Then 'No parameters
        Shell sAcrobatPath & " " & Chr(34) & sFile & Chr(34), vbNormalFocus
    Else 'Parameters
        'Open the file using Shell (no prompt)
        sCmd = sAcrobatPath & " /A " & Chr(34) & sParameters & Chr(34) & " " & Chr(34) & sFile & Chr(34)
        Shell sCmd, vbNormalFocus
        '        'Open the file using FollowHyperlink (user will get prompts)
        '        sCmd = Replace(sFile, "\", "/") & "#" & sParameters
        '        Application.FollowHyperlink sCmd
    End If
 
Error_Handler_Exit:
    On Error Resume Next
    Set WSHShell = Nothing
    Exit Function
 
Error_Handler:
    MsgBox "The following error has occured." & vbCrLf & vbCrLf & _
           "Error Number: " & Err.Number & vbCrLf & _
           "Error Source: OpenPDF" & vbCrLf & _
           "Error Description: " & Err.Description, _
           vbCritical, "An Error has Occured!"
    Resume Error_Handler_Exit
End Function

Es handelt sich um einen Laufzeitfehler '13': Typen unverträglich

und der Debugger schickt mich in diese Linie:  OpenPDF Target.Parent.Value, Target.Parent.Offset(0, -1).Value


Danke für jeden Versuch
Hallöchen,

da wären die Inhalte interessant. Weniger vom pdf dafür mehr vom Target usw. Smile Hast Du die Dir schon mal in der Überwachung angeschaut? (Haltepunkt in die Codezeile legen und im Code prüfen oder zur Überwachung hinzufügen und dort anschauen)
https://www.clever-excel-forum.de/Thread...ausfuehren
Die Datei, auf der das basieren dürfte, in #8
Code:
sub M_snb()
    ActiveWorkbook.FollowHyperlink "G:\OF\Beispel.PDF"
end sub
Hi snb,

und damit wird dann direkt auf eine bestimmten Seite der PDF gesprungen?
Ja selbstverständlich: die erste.
Hi,

ich habe Markus so verstanden, daß er durch Verweis auf einen Zellinhalt im Hyperlink eine Seite definieren will, die dann angesprungen werden soll.
Kann sein; ist einfach zu erledigen in Foxit Reader:


Code:
Sub M_snb()
    ' open page 7
     Shell "F:\Program Files\Foxit Software\Foxit Reader\foxit reader.exe  G:\OF\Beispiel.pdf -n 7"
End Sub
Hallöchen,

für den Adobe Reader sollte die Syntax so aussehen

AcroRd32.exe /A "page=page_number" filename.pdf

Kann's nur nicht testen, hab den nicht installiert.
Zitat:AcroRd32.exe /A "page=page_number" filename.pdf

Genau das passiert in der Funktion 
' Procedure : OpenPDF
' Author    : Daniel Pineault, CARDA Consultants Inc.


Aber der OP ist ja ein erfahrener C++ und  Java Programmierer, nur mit VBA ist er etwas überfordert (Das war bissige Ironie)
Seiten: 1 2