Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: alle Dokumente aus Ordnern drucken

alle Dokumente aus Ordnern drucken
01.07.2014 09:30:20
Stefan
Hallo zusammen,
ich habe eine Excelübersicht in welcher in Spalte B Namen stehen.
Diese sind jeweils mit einem Hyperlink zum jeweiligen Dateiordner versehen.
Nun möchte ich alle Dokumente aus den Ordnern (sind verschiedene Formate, z.B .doc, .pdf, .jpg, etc) via VBA drucken.
Ist dies möglich, falls es verschiedene Formate sind?
Ansonsten würde ich mir die Mühe machen die Dokumente in pdfs umzuwandeln.
Da ich hier leider mit meinem Latein am Ende bin, bitte ich um eure Hilfe.
Vielen Dank
Stefan

Anzeige

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: alle Dokumente aus Ordnern drucken
01.07.2014 12:28:17
fcs
Hallo Stefan,
das sollte grundsätzlich möglich sein.
Allerdings bin ich ich mir nicht sicher, ob der Druckspooler oder die betroffenne Anwendungen bei einer großen Anzahl von Dokumenten ins schwimmen kommen. Ggf. muss man zwischen den einzelnen Druckjobs immer eine kleine Pause einlegen.
Willst du die Dokumente zu einem Hyperlink-Ordner drucken, oder willst du alle Hyperlinks in Spalte B abarbeiten und deren zugehörige Dateien drucken ?
Sind unter den Dateien in den Ordnern auch Excel-Dateien ? Soll hier dann immer die gesamte Arbeitsmappe gedruckt werden oder nur das aktive Blatt?
Gruß
Franz

Anzeige
AW: alle Dokumente aus Ordnern drucken
01.07.2014 13:06:08
Stefan
Hallo Franz,
ich möchte alle Hyperlinks in Spalte B abarbeiten und die zugehörigen Dateien drucken.
Excel-Dateien sind in den Ordnern nicht vorhanden.
Gruß Stefan

AW: alle Dokumente aus Ordnern drucken
01.07.2014 14:47:54
fcs
Hallo Stefan,
hier Makros, die im Prinzip funktionieren. Ich hab es mit verschiedenen Dateiformaten (Docx, pdf, tif, ppt, txt, xls) probiert. ca. 3 bis 5 Dateien in 2 Ordnern.
Die Ermiitlung des Ordnernamens aus dem Hyperlink kann Probleme machen, wenn dieser als relativer Link ausgelesen wird.
Bei verschiedenen Programmen kann es zur Anzeige von Dialogfenstern kommen, abhängig von den Einstellungen im Programm; z.B. Aktualisierung von Feldern in Word (hier Inhaltsverzeichnis).
Da das Makro ohne Unterbrechnung mit der nächsten Datei weitermacht sollten im Makro ggf. die Wartezeiten angepasst werden.
Die Reihenfolge der Dateien kann man nicht beeinflussen. Hier müsste falls zwingend gewünscht eine entsprechende Sortierung der Dateinamen extra eingebaut werden.
Gruß
Franz
'Code in einem allgemeinen Modul im VBA-Editor
Option Explicit
Public Declare Function ShellExecute Lib "shell32.dll" Alias _
"ShellExecuteA" (ByVal hWnd As Long, _
ByVal lpOperation As String, _
ByVal lpFile As String, _
ByVal lpParameters As String, _
ByVal lpDirectory As String, _
ByVal nshowcmd As Long) As Long
Sub File_Print(strFile$)
Call ShellExecute(0, "print", strFile, "", "", 1&)
End Sub
Sub PrintDateieninHyperlinkOrdnern()
'Alle Hyperlinks in Spalte B des aktiven Blatts abarbeiten
Dim objHypLink As Hyperlink, rngZelle As Range
Dim strDir As String
Dim strDatei As String, wkb As Workbook
If MsgBox("Alle Hyperlinks in Spalte B abarbeiten und Dateien " _
& "in den zugehörigen Ordnern drucken?" & vbLf _
& "(ggf. vor dem Start des Makros in der Windows-Systemsteuerung " _
& "den Standarddrucker wechslen!)", _
vbQuestion + vbOKCancel, _
"Dateien in Ordnern drucken") = vbCancel Then Exit Sub
With ActiveSheet
'Zellen in Spalte B abarbeiten
For Each rngZelle In .Range(.Cells(1, 2), .Cells(.Rows.Count, 2).End(xlUp)).Cells
If rngZelle.Hyperlinks.Count > 0 Then
'Ordner-Pfad in Hyperlink-Adresse
strDir = rngZelle.Hyperlinks(1).Address
strDatei = Dir(strDir & "\*.*")
Do Until strDatei = ""
If InStr(1, Right(strDatei, 4), "xls") > 0 Then
'Exceldateien in der aktiven Excelanwendung öffnen und drucken
Set wkb = Application.Workbooks.Open(Filename:=strDir & "\" & strDatei, ReadOnly:= _
True)
wkb.PrintOut
wkb.Close savechanges:=False
Else
'andere Dateien
Call File_Print(strDir & "\" & strDatei)
End If
'Wartezeit 5 Sekunden nach jedem Dokument
Application.Wait Now + TimeSerial(Hour:=0, Minute:=0, Second:=5)
strDatei = Dir
Loop
'Wartezeit 10 Sekunden nach jedem Ordner
Application.Wait Now + TimeSerial(Hour:=0, Minute:=0, Second:=10)
End If
Next
End With
End Sub

Anzeige
AW: alle Dokumente aus Ordnern drucken
01.07.2014 19:45:54
Nepumuk
Hallo Franz,
an Stelle von fest programmierten Wartezeiten könntest du abfragen, ob es für den Benutzer noch einen ausstehenden Druckauftrag gibt. Wait würde ich sowieso nicht benutzen, denn das belastet den Prozessor zu 100% und bremst damit alles andere aus. Ist zwar bei den Mehrkernsystemen nicht mehr so tragisch, muss aber auch nicht sein und die API-Sleep kann ich zudem noch auf Millisekunden einstellen.
Beispiel:
Option Explicit

Private Declare Sub Sleep Lib "kernel32.dll" ( _
    ByVal dwMilliseconds As Long)

Public Sub Test()
    
    'Hier wird z.B. ein PDF gedruckt
    
    Do
        If Not PrinterActive Then Exit Do
        Sleep 1000 'eine Sekunde Pause
    Loop
    
    MsgBox "Fertig"
    
End Sub

Private Function PrinterActive() As Boolean
    Dim objWMI As Object
    Set objWMI = GetObject("winmgmts:\\.\root\cimv2").ExecQuery _
        ("SELECT * FROM Win32_PrintJob WHERE Owner='" & Environ$("USERNAME") & "'")
    PrinterActive = objWMI.Count <> 0
    Set objWMI = Nothing
End Function

Gruß
Nepumuk

Anzeige
@nepumuk-bitte lesen
01.07.2014 19:51:05
rokett
Hallo Nepumuk
versuche schon ne weile dich zu erreichen
gruss rolf

AW: alle Dokumente aus Ordnern drucken
02.07.2014 10:46:41
Stefan
Hallo zusammen,
vielen dank für die Hilfe.
Funktioniert einwandfrei.
Gruß
Stefan
;
Anzeige
Anzeige

Infobox / Tutorial

Dokumente aus Ordnern drucken mit Excel und VBA


Schritt-für-Schritt-Anleitung

  1. Öffne den VBA-Editor in Excel (Alt + F11).

  2. Erstelle ein neues Modul:

    • Klicke auf „Einfügen“ > „Modul“.
  3. Füge den folgenden VBA-Code in das Modul ein:

    Option Explicit
    Public Declare Function ShellExecute Lib "shell32.dll" Alias _
    "ShellExecuteA" (ByVal hWnd As Long, _
    ByVal lpOperation As String, _
    ByVal lpFile As String, _
    ByVal lpParameters As String, _
    ByVal lpDirectory As String, _
    ByVal nshowcmd As Long) As Long
    
    Sub File_Print(strFile$)
       Call ShellExecute(0, "print", strFile, "", "", 1&)
    End Sub
    
    Sub PrintDateieninHyperlinkOrdnern()
       Dim objHypLink As Hyperlink, rngZelle As Range
       Dim strDir As String
       Dim strDatei As String, wkb As Workbook
    
       If MsgBox("Alle Hyperlinks in Spalte B abarbeiten und Dateien " _
       & "in den zugehörigen Ordnern drucken?" & vbLf _
       & "(ggf. vor dem Start des Makros in der Windows-Systemsteuerung " _
       & "den Standarddrucker wechseln!)", _
       vbQuestion + vbOKCancel, _
       "Dateien in Ordnern drucken") = vbCancel Then Exit Sub
    
       With ActiveSheet
           For Each rngZelle In .Range(.Cells(1, 2), .Cells(.Rows.Count, 2).End(xlUp)).Cells
               If rngZelle.Hyperlinks.Count > 0 Then
                   strDir = rngZelle.Hyperlinks(1).Address
                   strDatei = Dir(strDir & "\*.*")
                   Do Until strDatei = ""
                       ' Dokumente drucken
                       Call File_Print(strDir & "\" & strDatei)
                       Application.Wait Now + TimeSerial(0, 0, 5) ' 5 Sekunden warten
                       strDatei = Dir
                   Loop
               End If
           Next
       End With
    End Sub
  4. Führe das Makro aus, um alle Dokumente aus den Ordnern zu drucken, die in Spalte B verlinkt sind.


Häufige Fehler und Lösungen

  • Fehler: Druckauftrag wird nicht ausgeführt
    Lösung: Stelle sicher, dass der Standarddrucker korrekt eingestellt ist. Überprüfe auch, ob die Dateien tatsächlich existieren.

  • Fehler: Makro stoppt bei Dialogfenstern
    Lösung: Einige Programme zeigen Dialogfenster an (z.B. bei Word). Stelle sicher, dass alle benötigten Programme installiert und richtig konfiguriert sind.

  • Probleme mit Wartezeiten
    Lösung: Stelle die Wartezeiten in dem Makro an deine Bedürfnisse an. Du kannst die Wartezeiten anpassen oder sogar die API-Sleep-Methode verwenden, um die Wartezeit in Millisekunden zu steuern.


Alternative Methoden

  • Manuelles Drucken: Wenn du nur gelegentlich Dateien drucken möchtest, kannst du die Dateien manuell aus dem Explorer auswählen und drucken, anstatt das Makro zu verwenden.

  • Batch-Drucksoftware: Es gibt spezialisierte Software, die mehrere Dokumente in einem Ordner drucken kann. Diese Software kann oft auch verschiedene Dateiformate handhaben.


Praktische Beispiele

  • Beispiel 1: Wenn du eine Excel-Tabelle mit verschiedenen Hyperlinks zu Dokumenten hast, kannst du die obige VBA-Prozedur verwenden, um alle Dokumente in einem bestimmten Ordner zu drucken.

  • Beispiel 2: Um ein Ordner-Inhaltsverzeichnis zu drucken, kannst du eine zusätzliche Funktion erstellen, die alle Dateinamen in einer neuen Excel-Tabelle auflistet und dann druckt.


Tipps für Profis

  • Optimierung der Druckreihenfolge: Wenn die Reihenfolge der zu druckenden Dokumente wichtig ist, baue eine Sortierfunktion in dein Makro ein, bevor du die Dateien druckst.

  • Dynamische Wartezeiten: Anstatt feste Wartezeiten im Makro zu verwenden, kannst du mit einer Funktion überprüfen, ob der Drucker aktiv ist, sodass der Druckprozess reibungsloser abläuft.

  • Verwendung von PDF: Überlege, alle Dokumente in PDFs umzuwandeln, bevor du sie druckst. Dies vereinfacht die Kompatibilität und kann die Druckzeiten reduzieren.


FAQ: Häufige Fragen

1. Kann ich auch Excel-Dateien drucken?
Ja, die oben beschriebene Methode funktioniert auch für Excel-Dateien. Diese werden in der aktiven Excel-Anwendung geöffnet und gedruckt.

2. Was tun, wenn ich verschiedene Dateiformate habe?
Das Makro unterstützt mehrere Dateiformate (z.B. .doc, .pdf, .jpg). Stelle sicher, dass die entsprechenden Anwendungen zum Drucken installiert sind.

3. Wie kann ich die Wartezeiten anpassen?
In dem VBA-Code kannst du die Application.Wait-Zeilen ändern, um die Wartezeiten entsprechend deiner Anforderungen anzupassen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige