PDF per Shellexecute drucken
Ich brauche Hilfe beim erstellen eines Scriptes um mehrere PDF's per Shellexecute auszudrucken.
Ich habe bereits ein script geschriben, jedoch war dieser Hart-codiert (mit Pfad )
Es funktioniert auf meinem Rechner , doch auf einem 64bit system nicht.
Das Problem ist, dass mehrere versionen des acrobat readers vorhanden sind .
Ich möchte deshalb das gleiche Script umschreiben damit ich es auf allen Rechnern funktioniert. (64 und 32 bit systeme und Verschiedene versionen des Readers)
Hier ist mein bisheriges Script.
Bitte berücksichtigt das ich gar keine Erfahrung habe wenn es um VBA Scripts geht.
Private Sub CommandButton1_Click()
End If
If CheckBox34 = True Then
print_mypdf ("F:\Datenaustausch\PDF\34_Handles_conflict_well_EN.pdf")
End If
If CheckBox35 = True Then
print_mypdf ("F:\Datenaustausch\PDF\35_Can_deal_with_criticism_and_setbacks_EN.pdf")
End If
End Sub
Sub print_mypdf(MyFile As String)
DoEvents
AdobePath = Environ("ProgramFiles") & "\Adobe\Acrobat 9.0\Acrobat\Acrobat.exe"
Shell AdobePath & " /p /h " & MyFile, vbHide
End Sub
Ich wäre sehr Dankbar wenn mir jemand Helfen könnte.
Freundliche Grüsse
Samuel
Ich habe bereits ein script geschriben, jedoch war dieser Hart-codiert (mit Pfad )
Es funktioniert auf meinem Rechner , doch auf einem 64bit system nicht.
Das Problem ist, dass mehrere versionen des acrobat readers vorhanden sind .
Ich möchte deshalb das gleiche Script umschreiben damit ich es auf allen Rechnern funktioniert. (64 und 32 bit systeme und Verschiedene versionen des Readers)
Hier ist mein bisheriges Script.
Bitte berücksichtigt das ich gar keine Erfahrung habe wenn es um VBA Scripts geht.
Private Sub CommandButton1_Click()
End If
If CheckBox34 = True Then
print_mypdf ("F:\Datenaustausch\PDF\34_Handles_conflict_well_EN.pdf")
End If
If CheckBox35 = True Then
print_mypdf ("F:\Datenaustausch\PDF\35_Can_deal_with_criticism_and_setbacks_EN.pdf")
End If
End Sub
Sub print_mypdf(MyFile As String)
DoEvents
AdobePath = Environ("ProgramFiles") & "\Adobe\Acrobat 9.0\Acrobat\Acrobat.exe"
Shell AdobePath & " /p /h " & MyFile, vbHide
End Sub
Ich wäre sehr Dankbar wenn mir jemand Helfen könnte.
Freundliche Grüsse
Samuel
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 155245
Url: https://administrator.de/forum/pdf-per-shellexecute-drucken-155245.html
Ausgedruckt am: 21.04.2025 um 17:04 Uhr
4 Kommentare
Neuester Kommentar
muss das in vb gelöst werden?
warum machst du es nicht mit batch oder powershell script?
versuch es doch so:
1. abfrage windows version, ergebnis in variable
2. abfrage des systems: 32bit/64bit, ergebnis in variable
3. mit den oberen ergebnissen entsprechend variablen setzen für die
pfade der programme
4. das system (programme) nach adobe acrobat suchen lassen und das ergebnis in einer varibale speichern.
ich kkann ein wenig vb-script, nur mache ich nichts mehr damit, löse alles in powershell
gruß michael
warum machst du es nicht mit batch oder powershell script?
versuch es doch so:
1. abfrage windows version, ergebnis in variable
2. abfrage des systems: 32bit/64bit, ergebnis in variable
3. mit den oberen ergebnissen entsprechend variablen setzen für die
pfade der programme
4. das system (programme) nach adobe acrobat suchen lassen und das ergebnis in einer varibale speichern.
ich kkann ein wenig vb-script, nur mache ich nichts mehr damit, löse alles in powershell
gruß michael
hier habe mal einen ansatz in powershell gemacht
gruß michael
function is64bit() {
return ([IntPtr]::Size -eq 8)
}
function get-programfilesdir() {
if (is64bit -eq $true) {
(Get-Item "Env:ProgramFiles(x86)").Value
}
else {
(Get-Item "Env:ProgramFiles").Value
}
}
$PROGRAMME = get-programfilesdir
Get-ChildItem $PROGRAMME -recurs -filter 'Acrobat'
gruß michael
habe es jetzt soweit angepasst das es nur nach dem eigentlichen programm sucht:
muss leider wech... sobald ich zeithabe versuche ich den wert aus der registry auszulesen welche version installiert ist
und den genauen pfad.
gruß michael
# **************************************************************
# einmal auf der powershell ausgeführt werden
# "Set-ExecutionPolicy Unrestricted"
# **************************************************************
#
# **************************************************************
# * Erstellt M.N. - POWERSHELL / Entwicklung 18.11.2010 *
# **************************************************************
function is64bit() {
return ([IntPtr]::Size -eq 8)
}
function get-programfilesdir() {
if (is64bit -eq $true) {
(Get-Item "Env:ProgramFiles(x86)").Value
}
else {
(Get-Item "Env:ProgramFiles").Value
}
}
$PROGRAMME = get-programfilesdir
# sucht die acrobat reader .exe
Get-ChildItem $PROGRAMMEAdobe -recurs -filter 'AcroRd32.exe'
und den genauen pfad.
gruß michael

Hallo Samuel!
Dieser VBA-Code sollte funktionieren:
Wobei in der Registry erst der Versions-Key und danach der Install-Path ermittelt wird.
Und die CmdLine habe ich aufgrund der Leerzeichen in den Pfadangaben auch etwas vereinfacht.
Wäre noch interessant zu wissen, in welcher App der VBA-Code verwendet wird und ob es sich um eine UserForm oder um eingebettete OLE-Objecte handelt?
Gruß Dieter
PS. Muss man jetzt neuerdings die Backslashes verdoppeln, damit sie angezeigt werden???
Dieser VBA-Code sollte funktionieren:
Const HKCU = &H80000001
Const sComputer = "."
Const sWINMGMTS = "winmgmts:{impersonationLevel=impersonate}!\\"
Const sRegKey0 = "Software\Adobe\Acrobat Reader\"
Const sRegKey1 = "\InstallPath"
Const sCmdLine = """%1"" /p /h ""%2""" 'Pfadangaben mit Leerzeichen
Private Sub PrintPdfFile(ByRef MyFile)
Dim oReg As Object, aValue As Variant, sValue As String, sAcrobatReader As String
Set oReg = GetObject(sWINMGMTS & sComputer & "\root\default:StdRegProv")
oReg.EnumKey HKCU, sRegKey0, aValue
If IsArray(aValue) Then
oReg.GetStringValue HKCU, sRegKey0 & aValue(0) & sRegKey1, "", sValue
sAcrobatReader = sValue & "\" & "AcroRd32.Exe"
Shell Replace(Replace(sCmdLine, "%1", sAcrobatReader), "%2", MyFile), vbHide
Else
MsgBox "AcrobatReader nicht gefunden!", vbExclamation, "Fehler"
End If
End Sub
Und die CmdLine habe ich aufgrund der Leerzeichen in den Pfadangaben auch etwas vereinfacht.
Wäre noch interessant zu wissen, in welcher App der VBA-Code verwendet wird und ob es sich um eine UserForm oder um eingebettete OLE-Objecte handelt?
Gruß Dieter
PS. Muss man jetzt neuerdings die Backslashes verdoppeln, damit sie angezeigt werden???