Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
792to796
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
792to796
792to796
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Alle (eingeblendeten) Sheets auswählen und drucken

Alle (eingeblendeten) Sheets auswählen und drucken
26.08.2006 21:52:01
Peter
Guten Abend
Ich möchte aus einem Verzeichnis alle (eingeblendeten) Worksheets der Workbooks drucken, mit folgenden Schritten:
Jeweils eine Datei öffnen
Alle Blätter anwählen (manuell passiert dies jeweils via Kontextmenu bei den Namen der Sheets)
Drucken
Schliessen
Nächste Datei öffnen
Ich bringe es nicht fertig, alle Tabellen anzuwählen und dann zu drucken mit einem Code, der allgemein gültig ist (also ohne Namen der Sheets).
Kann mir da jemand weiterhelfen?
Danke, Peter

Sub Drucken()
Dateiname = Dir$("C:\PS\2006\08\\*.xls")
Do While Dateiname <> ""
Workbooks.Open "C:\PS\2006\08\" & Dateiname, False
FEHLT: ALLE TABELLEN AUSWÄHLEN
FEHLT ALLE AUSGEWAEHLTEN TABELLEN DRUCKEN
ActiveWorkbook.Close False
Dateiname = Dir$()
Loop
End Sub

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Alle (eingeblendeten) Sheets auswählen und drucken
26.08.2006 22:02:19
Kurt
Hi,
druck doch in einer Schleife oder was glaubst du zu gewinnen, wenn erst alle Blätter selektiert werden?
mfg Kurt
AW: Alle (eingeblendeten) Sheets auswählen und drucken
26.08.2006 22:11:11
Peter
Hallo Kurt
Da ich in den einzelnen Workbooks relativ viele Tabellen habe, glaube ich, dass das ganze etwas schneller abläuft.
Freundlicher Gruss
Peter
AW: Alle (eingeblendeten) Sheets auswählen und drucken
27.08.2006 00:57:17
Kurt
"glaube ich, dass das ganze etwas schneller abläuft."
Glaube ist bei Excel schon angebracht, bringt aber meist nichts, so auch in diesem Fall.
mfg Kurt
AW: Alle (eingeblendeten) Sheets auswählen und dru
26.08.2006 22:03:19
Josef
Hallo Peter!
Probier mal.
' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Sub Drucken()
Dim xlApp As Application
Dim objFS As FileSearch
Dim objWB As Workbook
Dim objWS As Worksheet
Dim strPath As String
Dim intIndex As Integer

strPath = "C:\PS\2006\08"

Set objFS = Application.FileSearch

With objFS
  .NewSearch
  .LookIn = strPath
  .FileType = msoFileTypeExcelWorkbooks
  .SearchSubFolders = False ' Unterordner /Ja/Nein
  
  If .Execute > 0 Then
    
    Set xlApp = CreateObject("Excel.Application")
    
    xlApp.Visible = False
    
    For intIndex = 1 To .FoundFiles.Count
      
      Set objWB = xlApp.Workbooks.Open(.FoundFiles(intIndex))
      
      For Each objWS In objWB.Worksheets
        
        If objWS.Visible Then
          objWS.PrintOut
        End If
        
      Next
      
      objWB.Close False
      
      Set objWB = Nothing
      
    Next
    
    xlApp.Quit
    
    Set xlApp = Nothing
    
  End If
  
  
  
End With

Set objFS = Nothing

End Sub


Gruß Sepp

Anzeige
AW: Alle (eingeblendeten) Sheets auswählen und dru
26.08.2006 22:09:52
Peter
Hallo Sepp
Vielen Dank!
Da ich im Moment keinen Drucker dabei habe, kann ich den Code erst am Montag testen.
Schönes Wochenende!
Peter
AW: Alle eingeblenden Sheets auswählen und drucken
27.08.2006 01:18:01
Daniel
Hallo,
folgendes nach dem Öffnen des Workbooks ergänzen:

Sub Drucken_1()
Dim SH As Worksheet
For Each SH In ActiveWorkbook.Worksheets
SH.Select (0)
Next
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
End Sub

Im Prinzip könntest du auch jedes Sheet einzeln drucken:
Public

Sub Drucken_2()
Dim SH as worksheet
For Each SH In ActiveWorkbook.Worksheets
SH.Printout
next
End Sub

Der Unterschied zwischen beiden Varianten tritt dann zutage, wenn Seitennummern in Kopf- oder Fußzeile verwendet werden.
Im ersten Fall werden die Seitennummern bei den Sheets weiter hochgezählt und nur bei einem neuen Workbook wird wieder mit 1 begonnen,
im 2. Fall wird bei jedem Sheet wieder mit 1 begonnen.
Welche Variante du wählst, solltest du davon abhängig machen, wie du deine Seitennummerierung gestalten willst.
Ähnlich sieht es aus wenn du die Möglichkeit hast und nutzt, beim Drucken gleich PDFs zu erzeugen.
Bei Variante 1 kommen alle Sheets eines Workbooks in ein PDF-File, bei der 2. Variante wird für jedes Sheet ein eigenes PDF erzeugt.
daher macht die Variante, die Sheets erst zu selektien und dann zu drucken durchaus Sinn.
Gruß, Daniel
Anzeige
AW: noch was vergessen
27.08.2006 01:27:13
Daniel
Hallo,
da ja nur die eingeblendeten Sheets gedruckt werden sollen, (sonst würde es auch eine Fehlermedlung geben, muß der Code natürlich so aussetehn:
Sheets erst anwählen und dann gemeinsam drucken:

Sub Drucken_1()
Dim SH As Worksheet
For Each SH In ActiveWorkbook.Worksheets
if sh.visible then SH.Select (0)
Next
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
End Sub

Jedes Sheet einzeln drucken
Public

Sub Drucken_2()
Dim SH as worksheet
For Each SH In ActiveWorkbook.Worksheets
if sh.visible then SH.Printout
next
End Sub

Anzeige
AW: noch was vergessen
28.08.2006 07:47:48
Peter
Guten Tag miteinander
Mir ist nicht ganz klar, wie ich die Antwort von Sepp und Daniel zusammenbauen kann.
Der Code von Sepp funktioniert so prima, allerdings werden die Sheets pro Workbook einzeln an den Drucker gesandt, was nebst Seitennummerierung dann ein Problem wird, wenn ich als Drucker einen pdf-maker definiert habe.
Wie ist also der Code von Sepp zu ergänzen, dass alle (sichtbaren) Sheets auf einmal gedruckt werden?
Im Weiteren wäre es elegant, wenn ich den Pfad nicht fest hinterlegen müsste, sondern beim Ablaufen des Codes via Browser auswählen könnte.
Danke für jeden Hinweis.
Freundlicher Gruss, Peter
Anzeige
AW: noch was vergessen
28.08.2006 20:03:35
Daniel
Hallo,
Sepp hat dir eine vollständige Lösung gepostet, ich dagegen nur den Teil, wo es ums Drucken geht. Für das öffnen der Workbooks hattest du ja schon eine funktionierende Lösung, deswegen bin ich darauf nicht mehr eingegangen. D.h. du müsstest meinen Teilcode in deinen bzw. Sepps einfügen
Ich habe dir 2 Varianten zum Drucken gepostet, Variante 2 ist die gleiche wie bei Sepp, hier wird jedes Sheet einzeln gedruckt
in Variante 1 werden erst alle sichtbaren Sheets markiert, dabei wird die Markierung immer erweitert (das bedeutet das .SELECT(0) )
und dann werden alle Sheets des Workbooks auf einmal gedruckt.
Somit hast du zumindest pro Workbook eine fortlaufende Zeilennummerierung und pro Workbook eine PDF-Datei.
Wie es allerding möglich ist, alle Workbooks in eine PDF-Datei zu bekommen, ist mir auch schleierhaft (wenn du da eine Lösung findest, würde mich das auch interessieren).
Aber ich vermute mal, die Lösung liegt hier eher im Bereich des PDF-Clients, schau mal, ob es da irgend eine Einstellmöglichkeit für MULTI-PART oder MULTI-DOK oder so was in der Richtung gibt (heiß nichts anderes, als daß ab Start der Multidok-Session alle eingehenden Druckaufträge in einer PDF-Datei zusammengefasst werden.)
Gruß, Daniel
Anzeige
AW: noch was vergessen
28.08.2006 21:14:34
Peter
Hallo Daniel
Vielen Dank für die Antwort. Vielleicht habe ich mich etwas unklar ausgedrückt; auch brauche natürlich pro Workbook ein separates pdf und nicht alle Workbooks in einem pdf. Das könnte ich dann eben mit dem pdf Programm so erreichen und nicht mit Excel, wie du es ja auch siehst.
Die Angelegenheit mit dem Drucken werde ich austesten.
Das Browsen mit dem Pfad werde ich in einem neuen Thread nochmals aufbringen, da der aktuelle ja schon etwas in die Tage gekommen ist.
Besten Dank für allen Support.
Peter
AW: noch was vergessen
28.08.2006 21:50:43
Josef
Hallo Peter!
Das sollte deine Wünsche erfüllen.
' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Sub Drucken()
Dim xlApp As Application
Dim objFS As FileSearch
Dim objWB As Workbook
Dim objWS As Worksheet
Dim strPath As String
Dim intIndex As Integer, intC As Integer
Dim arrSheets() As Variant

strPath = fncBrowseForFolder("F:\temp") 'Optional Standardordner übergeben!

If strPath = "" Then Exit Sub

Set objFS = Application.FileSearch

With objFS
  .NewSearch
  .LookIn = strPath
  .FileType = msoFileTypeExcelWorkbooks
  .SearchSubFolders = False ' Unterordner /Ja/Nein
  
  If .Execute > 0 Then
    
    Set xlApp = CreateObject("Excel.Application")
    
    xlApp.Visible = False
    
    For intIndex = 1 To .FoundFiles.Count
      
      intC = 0
      
      Set objWB = xlApp.Workbooks.Open(.FoundFiles(intIndex))
      
      For Each objWS In objWB.Worksheets
        
        If objWS.Visible Then
          Redim Preserve arrSheets(intC)
          arrSheets(intC) = objWS.Name
          intC = intC + 1
        End If
        
      Next
      
      objWB.Sheets(arrSheets).PrintOut
      
      Erase arrSheets
      
      objWB.Close False
      
      Set objWB = Nothing
      
    Next
    
    xlApp.Quit
    
    Set xlApp = Nothing
    
  End If
  
End With

Set objFS = Nothing

End Sub


Private Function fncBrowseForFolder(Optional defaultPath As Variant = "C:\") As String
Dim objFlderItem As Object, objShell As Object, objFlder As Object

Set objShell = CreateObject("Shell.Application")
Set objFlder = objShell.BrowseForFolder(0&, "Ordner auswählen...", 0&, defaultPath)

If objFlder Is Nothing Then GoTo ErrExit

Set objFlderItem = objFlder.Self
fncBrowseForFolder = objFlderItem.Path

ErrExit:

Set objShell = Nothing
Set objFlder = Nothing
Set objFlderItem = Nothing
End Function


Gruß Sepp

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige