samu653
Goto Top

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

Content-Key: 155245

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

Printed on: April 19, 2024 at 04:04 o'clock

Member: micneu
micneu Nov 18, 2010 at 10:25:40 (UTC)
Goto Top
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
Member: micneu
micneu Nov 18, 2010 at 10:48:43 (UTC)
Goto Top
hier habe mal einen ansatz in powershell gemacht

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
Member: micneu
micneu Nov 18, 2010 at 11:52:27 (UTC)
Goto Top
habe es jetzt soweit angepasst das es nur nach dem eigentlichen programm sucht:

#   **************************************************************
#    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'  
muss leider wech... sobald ich zeithabe versuche ich den wert aus der registry auszulesen welche version installiert ist
und den genauen pfad.

gruß michael
Mitglied: 76109
76109 Nov 19, 2010 at 20:05:31 (UTC)
Goto Top
Hallo Samuel!

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
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???