fahrrad
Goto Top

EXCEl Externes Programm mit Hyperlink öffnen, am besten noch bestimmten Zellinhalt als Parameter übergeben

Hallo zusammen,

ich hoffe hier ein paar Excel Spezies können mir weiterhelfen :o)

Ich möchte in einer Excel Tabelle per Hyperlinks verschiedene PDFs öffnen, der PDF Viewer ist / soll jeodch nicht für PDFs regsitriert sein, da diese alte Foxit Version noch bestimmte Seiten direkt öffnen kann, allerdings ein Sicherheistrisiko darstellt und entsprechend nicht als Standardviewer eingerichtet ist.

Der Pfad zum Foxit Reader ist zB X:\Foxitreader\Foxitreader.exe
Der Pfad zu den PDFs ist zB X:\Temp\Temp1\Test.pdf

In Spalte C ist die jeweilige Seitenzahl des jeweiligen PDFs angegeben.

Ich möchte, sofern ohne VBA möglich, also mit C2=50 die 50. Seite des PDFs öffnen:

X:\Foxitreader\Foxitreader.exe X:\Temp\Temp1\Test.pdf - n C2

Wenn's nicht geht, geht es vieelcith per VBA als Funktion, in der sowohl das PDF als auch die Seitenzhal variable sein müßten

Ich würd emich über eine Lösung freuen

VG
Fahhrad

Content-ID: 237949

Url: https://administrator.de/contentid/237949

Ausgedruckt am: 23.11.2024 um 13:11 Uhr

Meierjo
Meierjo 14.05.2014 um 11:14:43 Uhr
Goto Top
Hallo Fahrrad

wieso der Foxit Reader, wenn der nicht als Standard registriert ist?

Ist der Acrobat-Reader als Standard installiert??

Wenn ja, kannst du zB über:

c:\Program Files (x86)\Adobe\Reader 11.0\Reader\AcroRd32.exe /A page=10 "C:\PDF\Test.pdf"

die 10. Seite von Test.pdf öffnen

Diesen Parameter kannst du zB als Formel in eine andere Zelle schreiben lassen, und diese dann in ein CMD-Fenster kopieren

Gruss
Fahrrad
Fahrrad 14.05.2014 um 11:28:33 Uhr
Goto Top
Hallo Meierjo

Vielen Dank für Deine Antwort!!

wieso der Foxit Reader, wenn der nicht als Standard registriert ist?
Es ist auf dem Firmenrechner eine aktuelle Version vom Foxit installiert, welche dieses Featur enicht mehr bietet. Deshalb möchte ich eben nur diese ältere Version nicht registrieren und nur das Feature nutzen.

Ist der Acrobat-Reader als Standard installiert??
Nein, soll/darf auch nicht rauf.

Wenn ja, kannst du zB über:

c:\Program Files (x86)\Adobe\Reader 11.0\Reader\AcroRd32.exe /A page=10 "C:\PDF\Test.pdf"

die 10. Seite von Test.pdf öffnen

Dies habe ich soweit auch schon anderweitig genutzt, aber das Paket des Acrobat Readers is mir, nur um diese Funktion zu utzen, zu groß und wie geschrieben auch nicht vorhanden.

Mir schwebt als "elegante" Lösung ein Hyperlink vor, welcher mir mit einem Mausklick die entsprechende Seite des PDFs öffnet.
Über CMD bekomme ich es mit Foxit auch hin, aber das ist für mich eher von-hinten-durch-die-Brust-ins-Auge.

VG
Fahrrad
Meierjo
Meierjo 14.05.2014 um 11:42:21 Uhr
Goto Top
Hallo

Also, das heisst, es geht um mehrere Dateien, die in der Excel-Tabelle stehen, oder immer um die selbe Datei?

Du möchtest in der4 Excel-Tabelle einen Hyperlink, welcher das PDF an der entsprechenden Seite öffnet?

grus
115420
115420 14.05.2014 aktualisiert um 18:42:04 Uhr
Goto Top
Hallo Meierjo und Fahrrad!

Das geht nicht ganz so einfach, da ein Hyperlink auf eine Datei direkt ohne Einfussmöglichkeit das Pdf-Standard-Programm startet.

Die einzige Möglichkeit wäre eine Zelle, die nur den Pfad der Pdf-Datei enthält und eine andere Zelle, die einen Hyperlink (Aktuelles Dokument>Zellbezug) auf die Zelle mit dem Pfad enthält. In diesem Fall wird ein Event (FollowHyperlink) ausgelöst, der per VBA-Code abgefangen werden kann und somit die Möglichkeit bietet, einen Hyperlink nach Deinen Vorstellungen zu emulieren...

In folgendem Beispiel, muss die Spalte C die Seitenzahl beinhalten und der Hyperlink auf die Zelle mit dem Pdf-Pfad zeigen, also z.B. B2=Pfad, C2=Seitenzahl und D2=Hyperlink auf B2.
Option Explicit
Option Compare Text

Const ColPage = "C"                        'Spalte mit Seitenzahl  
Const BaseFolder = "X:\Temp\Temp1\"        'Backslash am Ende beachten  

Const PdfTool = "X:\Foxitreader\Foxitreader.exe"  
Const PdfOption = " -n "  

Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink)
    Dim sFile As String, sPage As String, sCmdLine As String
        
    sFile = BaseFolder & Range(Target.SubAddress).Value & ".pdf"  
    sPage = Trim(Split(Cells(Target.Range.Row, ColPage).Text, "-")(0))  
    
    With CreateObject("Scripting.FileSystemObject")  
        If .GetExtensionName(sFile) Like "pdf" Then  
            If .FileExists(sFile) Then
                If .FileExists(PdfTool) Then
                    sCmdLine = Chr(34) & PdfTool & """ """ & sFile & Chr(34) & PdfOption & sPage  
                    CreateObject("WScript.Shell").Run sCmdLine, vbMaximizedFocus  
                Else
                    MsgBox "Pdf-Tool nicht gefunden!", vbExclamation, "Fehler . . ."  
                End If
            Else
                MsgBox "Pdf-Datei nicht gefunden!", vbExclamation, "Fehler . . ."  
            End If
        End If
    End With
End Sub
Wobei der Code im VBA-Editor in das jeweilige Tabellenblatt z.B. Tabelle1 eingefügt wird.

Soweit sich die Pdf-Dateien alle im gleichen Pfad befinden, könnte man noch einen Konstanten Basis-Pfad hinzufügen, sodass in den Zellen nur der Dateiname steht?


Grüße
Spatzenhirn


[edit]
In Bezug auf PN von Fahrrad noch einen konstanten Pdf-Ordnerpfad hinzugefügt, sodass die Pfad-Zelle nur noch den Dateinamen enthalten muss
[/edit]

[edit2]
In Bezug auf PN noch eingebaut:

Als Pfadangabe nur Dateiname ohne Dateiendung
Als Seitenangabe nur der Wert vor'm Trennzeichen (-), falls der Inhalt z.B. im Format '10-15' angegeben ist
[/edit2]
Fahrrad
Fahrrad 14.05.2014 um 12:58:25 Uhr
Goto Top
Hallo meierjo

Also, das heisst, es geht um mehrere Dateien, die in der Excel-Tabelle stehen, oder immer um die selbe Datei?
nein, das wäre ja zu einfach :o).... Es handelt sich um diverse PDFs, auf die jeweils (einzeln) verlinkt werden soll

Du möchtest in der4 Excel-Tabelle einen Hyperlink, welcher das PDF an der entsprechenden Seite öffnet?
Ja, genau das ist mein Ziel, aber eben mit Foxit.

VG
Fahrrad
Meierjo
Meierjo 14.05.2014 um 13:37:52 Uhr
Goto Top
Hallo

@115420
Ja, stimmt, habs grade ausprobiert, funktioniert so wie ich gedacht habe, nicht

@Fahrrad
die Lösung von Spatzenhirn ist somit die einzige praktikable Lösung

Gruss
115420
115420 15.05.2014 aktualisiert um 11:34:24 Uhr
Goto Top
Hallo Fahrrad!

In Bezug auf Deine letzte PN schlage ich eine andere Strategie vor und zwar das Öffnen der Pdf-Dateien per Doppelklick anstelle von Hyperlinks. D.h. wenn Du in der Spalte mit den Pdf-Namen einen Doppelklick auf eine Zelle mit Inhalt ausführst, dann wird die betreffende Pdf-Datei geöffnet, ansonsten behält der Doppelklick seine ursprüngliche Funktion.
Die Spalte mit den Pdf-Namen (aktuell ab Zeile 2) kannst Du ja mit einer Hyperlink-Farbe und Unterstrich formatieren...

Natürlich könnte man die Hyperlinks bei ca. 10.000 Einträgen automatisch generieren, aber insgesamt gesehen ist das Ganze dann doch zu umständlich, von daher ist die Doppelklick-Funktion die bessere Lösung...face-wink

Hier der Doppelklick-Code:
Option Explicit

Const ColLink = "A"                         'Spalte: Titel (Doppelklick)  
Const ColPage = "C"                         'Spalte: Seitenzahl  
Const ColName = "G"                         'Spalte: Pdf-Name  

Const RowStart = 2                          'Pdf-Namen ab Zeile 2  

Const BaseFolder = "X:\Temp\Temp1\"         'Backslash am Ende beachten  

Const PdfTool = "X:\Foxitreader\Foxitreader.exe"  
Const PdfOption = " -n "  

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, ByRef Cancel As Boolean)
    Dim sFile As String, sPage As String, sCmdLine As String
    
    If Not Application.Intersect(Columns(ColLink), Target) Is Nothing Then
        If Target.Row >= RowStart And Cells(Target.Row, ColName).Text <> "" Then  
            Cancel = True
            sFile = BaseFolder & Cells(Target.Row, ColName).Text & ".pdf"  
            sPage = Trim(Split(Cells(Target.Row, ColPage).Text, "-")(0))  
    
            With CreateObject("Scripting.FileSystemObject")  
                If .FileExists(sFile) Then
                    If .FileExists(PdfTool) Then
                        sCmdLine = Chr(34) & PdfTool & """ """ & sFile & Chr(34) & PdfOption & sPage  
                        CreateObject("WScript.Shell").Run sCmdLine, vbMaximizedFocus  
                    Else
                        MsgBox "Pdf-Tool nicht gefunden!", vbExclamation, "Fehler . . ."  
                    End If
                Else
                    MsgBox "Pdf-Datei nicht gefunden!", vbExclamation, "Fehler . . ."  
                End If
            End With
        End If
    End If
End Sub

Grüße
Spatzenhirn

[edit]
Code geändert:

Spalte A = Titel mit Doppelklick
Spalte G = Pdf-Name
[/edit]
Fahrrad
Fahrrad 15.05.2014 um 10:34:23 Uhr
Goto Top
hallo Spatzenhirn,

Vielen Dank für Deine Hilfe / Geduld!

Diese Lösung hat was, auf jeden Fall, aber ein kleines aber: schöner wäre die Doppleklickaktion für Spalte A mit dem Namen bzw. Titel.

VG
Fahrrad
115420
115420 15.05.2014 um 10:39:42 Uhr
Goto Top
Hallo Fahrrad!

Ja und woher bekomme ich dann den Namen der Pdf-Datei?

Grüße
spatzenhirn
Fahrrad
Fahrrad 15.05.2014 um 11:15:54 Uhr
Goto Top
Hallo Spatzenhirn,

hm gute Frage nächste Frage;o).... Vielleicht hast Du noch einen anderen (VBA-)Trick auf Lager o)?

Bei meiner Priorisierung kommt die Spalte mit dem PDF Namen erst ein wenig weiter hinten, aber ich kann sie auch weiter nach vorne ziehen, wäre nur schön gewesen

Besten Dank

VG
Fahrrad
115420
115420 15.05.2014 um 11:18:38 Uhr
Goto Top
Hallo Fahrrad!

OK und welche Spalte wäre das dann?

Grüße
spatzenhirn
Fahrrad
Fahrrad 15.05.2014 um 11:21:38 Uhr
Goto Top
Hallo Spatzenhirn,

derzeit ist in Spalte A der Name / Titel des Stücks enthalten und in Spalte G der Name des PDFs.

VG
Fahrrad
115420
Lösung 115420 15.05.2014 aktualisiert um 11:39:16 Uhr
Goto Top
Hallo Fahrrad!

Letzten Code entsprechend geändertface-wink

Wenn's das dann war, bitte den Thread noch als gelöst markieren. Dankeface-smile

Grüße
spatzenhirn
Fahrrad
Fahrrad 15.05.2014 um 11:40:51 Uhr
Goto Top
Hallo Spatzenhirn,

DAS ist jetzt die perfekte Lösung ohne Hyperlink für mic, sehr elegant!.

Ich kann Dir meinen Dank für die gesparte Zeit und Mühe gar nicht ausdrücken!!!!

VG
Fahrrad
115420
115420 15.05.2014 um 11:45:24 Uhr
Goto Top
Hallo Fahrrad!

OK, dann sind ja jetzt alle Missverständnisse beseitigt und wenn Du mit dieser Lösung zufrieden bist, dann bin ich es auchface-smile

Grüße
spatzenhirn