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

Forumthread: Anzahl der Ausdrucke einzelner Tabellen

Anzahl der Ausdrucke einzelner Tabellen
22.11.2004 11:12:37
Stefano
Wie Ihr schon wisst, NOCH keine Ahnung von VBA ;)
Hoffe Ihr könnt mir nochmal helfen.
Ich möchte ein Druckfenster geöffnet haben, wo alle vorhandenen
Tabellen aufgeführt werden und man die Anzahl der Ausdrucke angeben kann.
Am besten mit Tab die einzelnen Positionen abgehen und immer die Anzahl eingeben, drucken button und alles wird ausgeworfen. Habe schon so was ähnliches gefunden, aber da musste man aus einem Auswahlmenu die Tabellen auswählen, jedes mal neu.
Vielen Dank für Eure Hilfe
greetz
Stefano
Anzeige
AW: Anzahl der Ausdrucke einzelner Tabellen
Boris
Hi Stefano,
so wie du es möchtest, musst du ein kleines Userform programmieren. Allerdings ist das gar nicht ganz so einfach, wenn denn z.B. die Anzahl der Tabellenblätter variieren kann.
Daher gibt es eine Möglichkeit, das auch außerhalb von VBA zu gestalten.
Dazu ist notwendig:
1) Ein Blatt mit dem Namen "Drucken"
2) Einfügen - Name - Definieren, Name: Blätter
Bezieht sich auf: =ARBEITSMAPPE.ZUORDNEN(1+0*JETZT())
3) In A1 des Blattes "Drucken":
=WENN(ZEILE(A1)>ANZAHL2(Blätter);"";TEIL(INDEX(Blätter;ZEILE(A1));FINDEN("]";INDEX(Blätter;ZEILE(A1)))+1;31))
und weit genug runterkopieren.
So listest du alle in der Mappe vorhandenen Blätter auf - ab A1 bis A...
In B1 bis B... kannst du jetzt die gewünschte Anzahl der Ausddrucke pro Blatt eingeben.
Dann VBA-Editor öffnen - Einfügen - Modul, dort folgender Code:
Option Explicit

Sub drucken()
Const Ws_Druck As String = "Drucken"
Dim C As Range
Dim intRow As Integer
Dim strCheck As String
With Worksheets(Ws_Druck)
strCheck = MsgBox("Es werden insgesamt " & Application.Sum(.Columns(2)) & " Ausdrucke erstellt. Jetzt drucken?", vbYesNo, "Gebe bekannt...")
If strCheck = vbNo Then Exit Sub
On Error Resume Next 'quick and dirty
For intRow = 1 To ThisWorkbook.Sheets.Count
If .Cells(intRow, 2) <> "" Then
Worksheets(CStr(.Cells(intRow, 1))).PrintOut copies:=.Cells(intRow, 2)
End If
Next intRow
On Error GoTo 0
End With
End Sub

Diesen Code jetzt einem Button zuweisen - fertig.
Grüße Boris
Anzeige
AW: Anzahl der Ausdrucke einzelner Tabellen
Stefano
Danke Boris,
werds ausprobieren und posten obs geklappt hat!
Stefano
AW: Anzahl der Ausdrucke einzelner Tabellen
Achim
Poste mal, ob es geklappt hat, interessiert mich auch.
Achim
Etwas schlanker ohne Namensvergabe...
Boris
Hi Stefano,
...geht es so:
1) Ein Blatt mit dem Namen "Drucken" erstellen.
2) Im VBA-Editor in das Klassenmodul der Tabelle "Drucken" diesen Code:
Option Explicit

Private Sub Worksheet_Activate()
Dim i As Integer
Columns(1).Clear
For i = 1 To ThisWorkbook.Sheets.Count
Cells(i, 1) = Sheets(i).Name
Next i
End Sub

3) Der Rest bleibt unverändert.
Grüße Boris
Anzeige
AW: Etwas schlanker ohne Namensvergabe...
Stefano
Danke Boris, klappt wunderbar! Wäre natürlich ein Traum, wenn das nicht in Zelle A1
losgehen würde, sondern z.b. in B7. Schade auch, dass man die Auflistung der Tabellen nicht formatieren kann. Noch irgendwelche Ideen hierzu? Hast mir aber schon sehr weitergeholfen, danke!
Mit veränderten Bereichen
Boris
Hi Stefano,
dann formatie manuell die Spalte B aus dem Blatt "Drucken" so, wie du es haben möchtest. Dazu diese beiden Codes:
Einfügen in das Klassenmodul "Drucken":
Option Explicit
Private Sub Worksheet_Activate()
Dim i As Integer
Range("B7:B60000").ClearContents
For i = 1 To ThisWorkbook.Sheets.Count
Cells(i + 6, 2) = Sheets(i).Name
Next i
End Sub

In ein allgemeines Modul:
Option Explicit
Sub drucken()
Const Ws_Druck As String = "Drucken"
Dim C As Range
Dim intRow As Integer
Dim strCheck As String
With Worksheets(Ws_Druck)
strCheck = MsgBox("Es werden insgesamt " & Application.Sum(.[c7:c30000]) & " Ausdrucke erstellt. Jetzt drucken?", vbYesNo, "Gebe bekannt...")
If strCheck = vbNo Then Exit Sub
On Error Resume Next 'quick and dirty
For intRow = 1 To ThisWorkbook.Sheets.Count
If .Cells(intRow + 6, 3) <> "" Then
Worksheets(CStr(.Cells(intRow + 6, 2))).PrintOut copies:=.Cells(intRow + 6, 3)
End If
Next intRow
On Error GoTo 0
End With
End Sub

Die Druckanzahl wird demnach in Spalte C eingegeben.
Grüße Boris
Anzeige
Bestimmte Tabellen weglassen
Stefano
Boris, Du bist der Größte!
Wenn Du mir jetzt noch sagst, wie ich es anstelle, dass zwei bestimme Tabellen (immer die Gleichen, wie z.b. die Tabelle "Drucken") nicht mit in der Liste aufgeführt werden, dann bist Du echt der Allergrößte!!!
Viele Grüße
Stefano
AW: Bestimmte Tabellen weglassen
Boris
Hi Stefano,
dann änder den Code im Klassenmodul "Drucken" wie folgt:
Option Explicit

Private Sub Worksheet_Activate()
Dim i As Integer
Dim Ws As Worksheet
Range("B7:B60000").ClearContents
i = 7
For Each Ws In ThisWorkbook.Worksheets
If Ws.Name <> "Drucken" And Ws.Name <> "Internes" Then
Cells(i, 2) = Ws.Name
i = i + 1
End If
Next Ws
End Sub

Hier werden die Blätter mit den Namen "Drucken" und "Internes" nicht aufgelistet - das musst du entsprechend anpassen. Achte auf die genaue Schreibweise - es wird auch zwischen Groß-und Kleinschreibung unterschieden.
Grüße Boris
Anzeige
AW: Bestimmte Tabellen weglassen
stefano
Hat super geklappt! Wirklich ein super Forum hier und
sehr hilfsbereite User! Thanks!
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige

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