Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Excel Dateien als PDF drucken - kleine Probleme in der Umsetzung mehrerer Tabellenblätter

Frage Microsoft Microsoft Office

Mitglied: DeeJayBee

DeeJayBee (Level 1) - Jetzt verbinden

17.09.2014, aktualisiert 13:04 Uhr, 2065 Aufrufe, 4 Kommentare

Hallo zusammen,

ich versuch mich mal kurz zu fassen:

Aufgabe:
Einen Ordner mit Excel-Dateien als PDFs ausdrucken.
Jedes Excel-Dokument enthält mehrere Tabellenblätter (Page 1, Page 2, ..., Data, Adresses, sonstwas...) Die Anzahl der "Page x" Blätter ist inhaltabhäng.
Es sollen nur die Tabellenblätter "Page x" gedruckt werden - alle in ein PDF pro Excel-Dokument.

Lösungsansatz:
Verwendete Excel-Version: Excel 2003, .xls-Dateien
PDF-Drucker: FreePDF
Makro in einer Datei, wie folgt:

Pseudo-Sprache:
Öffne xls-Datei aus Verzeichnis,
Markiere alle Tabellenblätt, wenn in Bezeichnung an Stelle 6 eine Zahl vorkommt (z.b. Page 1)
Drucke Selektion an PDF Drucker (fest eingestellter Ausgabepfad)
Nächste Datei...

Sub Ordner_bearbeiten_RE() 
 
Dim StrVerzeichnis As String 
Dim StrTyp As String 
Dim Dateiname As String 
 
Dim wb As Workbook 
Dim wksX As Worksheet 
 
StrVerzeichnis = "C:\daten\IT8\xls\Re\" 
StrTyp = "*.xls" 
Dateiname = Dir(StrVerzeichnis & StrTyp) 
Do While Dateiname <> "" 
         
        ' Variablen für Array initialisieren 
        Dim varArr() As Variant 
        ReDim varArr(0) 
 
        Set wb = Workbooks.Open(StrVerzeichnis & Dateiname) 
        For Each wksX In wb.Worksheets 
     
            If IsNumeric(Mid(wksX.Name, 6, 1)) Then            'Verwende Tabellenblatt, wenn an Position 6 eine Zahl steht ("page X") 
                varArr(UBound(varArr)) = wksX.Name 
                ReDim Preserve varArr(UBound(varArr) + 1) 
            End If 
         
        Next wksX 
         
        ReDim Preserve varArr(UBound(varArr) - 1)       ' Array durchgehen und alle Tabellenblätter markieren 
        Sheets(varArr).Select 
        ' Selektierte Tabellenblätter drucken 
        ActiveWindow.SelectedSheets.PrintOut Copies:=1, ActivePrinter:= _ 
            "FreePDF XP - IT8-RE", Collate:=True 
         
        wb.Close False 
 
    Dateiname = Dir 
Loop 
End Sub


Problem:
Wenn Dokument nur Page 1 und keine weiteren "Page x" enthält läuft alles prima.
Wenn mehrere Seiten "Page x" vorhanden sind, bekomme ich irgendwie 2 Drucke, einmal Seite 1 und einmal die restlichen Seiten.
Da der PDF-Drucker in dem Fall das Dokument mit Seite 1 überschreibt (gleicher Name) bleibt ein Dokument übrig, wo Seite 1 fehlt.

Ich finde den Fehler leider nicht. Hat jemand eine Idee?
Vielleicht hat auch jemand eine bessere Idee?

Freue mich über Eure Hinweise
LG Daniel
Mitglied: Pjordorf
17.09.2014 um 13:18 Uhr
Hallo,

Zitat von DeeJayBee:
Vielleicht hat auch jemand eine bessere Idee?
Klappt es mit deiner Version von FreePDF denn manuell?
Andere Version von FreePDF?
Anderer PDF Generator z.B. PDFCreator kanns?
Adobe Acrobat kanns?

Gruß,
Peter
Bitte warten ..
Mitglied: DeeJayBee
17.09.2014 um 13:31 Uhr
Hallo Peter,

es nicht das Problem des PDF-Druckers,
Ich sehe, dass Excel 2 Druckjobs abschickt.
Einmal "Seite 1" und einmal "Seite 2 - Rest"

Wenn Excel den Druckjob "Seite 1 - Rest" drucken würde, wäre das Problem passé.
Es bringt mir leider auch nichts, wenn ein PDF Drucker 2 Dokumente abspeichern würde, es muss in einem sein.

Gruß
Daniel
Bitte warten ..
Mitglied: Pjordorf
17.09.2014 um 14:15 Uhr
Hallo,

Zitat von DeeJayBee:
Einmal "Seite 1" und einmal "Seite 2 - Rest"
Du nutzt VBA. Dann nutze den Einzelschritt um zu sehen wann was passiert und dir die Ergebnisse druckt. Dann siehst du wann Seite 1 gedruckt wird und wann Seite2 - x gedruckt wird. Sich die Werte auch ausgeben lassen kann helfen (debug.print). Auch sich die Arrays und deren Inhalt sowie Zähler ansehen wird dir helfen. F8 ist dein Freund im VBA

Gruß,
Peter
Bitte warten ..
Mitglied: Eintagsfliege
17.09.2014 um 16:26 Uhr
Hallo DeeJayBee!

Versuchs mal damit:
01.
Option Explicit 
02.
Option Compare Text 
03.
 
04.
Private Const strTyp = "*.xls" 
05.
Private Const strVerzeichnis = "C:\daten\IT8\xls\Re\" 
06.
 
07.
Private Const strName = "Page #*" 
08.
Private Const strPrinter = "FreePDF XP - IT8-RE" 
09.
 
10.
Sub Ordner_bearbeiten_RE() 
11.
    Dim objSheet As Worksheet, objSheetList As Object, strDateiname As String 
12.
     
13.
    Set objSheetList = CreateObject("Scripting.Dictionary") 
14.
     
15.
    strDateiname = Dir(strVerzeichnis & strTyp) 
16.
     
17.
    Do While strDateiname <> "" 
18.
        With Workbooks.Open(strVerzeichnis & strDateiname) 
19.
            For Each objSheet In .Worksheets 
20.
                If objSheet.Name Like strName Then 
21.
                    objSheetList.Add objSheetList.Count, objSheet.Name 
22.
                End If 
23.
            Next 
24.
         
25.
            If objSheetList.Count Then 
26.
                .Sheets(objSheetList.Items).PrintOut Copies:=1, ActivePrinter:=strPrinter 
27.
            End If 
28.
                  
29.
           .Close False 
30.
        End With 
31.
         
32.
        objSheetList.RemoveAll:   strDateiname = Dir 
33.
    Loop 
34.
End Sub
Grüße Dieter
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Heiß diskutierte Inhalte
Windows Server
DHCP Server switchen (25)

Frage von M.Marz zum Thema Windows Server ...

SAN, NAS, DAS
gelöst HP-Proliant Microserver Betriebssystem (14)

Frage von Yannosch zum Thema SAN, NAS, DAS ...

Grafikkarten & Monitore
Win 10 Grafikkarte Crash von Software? (13)

Frage von Marabunta zum Thema Grafikkarten & Monitore ...

Erkennung und -Abwehr
Spam mit eigener Domain (12)

Frage von NoobOne zum Thema Erkennung und -Abwehr ...