3.2k Aufrufe
Gefragt in Tabellenkalkulation von ekg Mitglied (303 Punkte)
Hallo

ich habe zwei Arbeitsmappen mit mehreren Tabellen und möcht sie in einer
bestimmten Reihenfolge ausgedruckt haben.
Genau gesagt in Mappe 1 sind Tabellen die heißen 1,2,3,4, usw.
in Mappe zwei heißen die Tabellen a,b,c usw.

Die Reihenfolge soll jetzt nach dem Druck wie folgt aussehen

1, a, 2 ,b ,3, c, 4, d usw.
Also Tabelle 1 aus Mappe 1, Tabelle 1 aus Mappe 2,Tabelle 2 aus Mappe 1, Tabelle 2
aus Mappe 2 usw.

15 Antworten

0 Punkte
Beantwortet von saarbauer Profi (15.6k Punkte)
hallo,

ist meines erachtens, wenn überhaupt, nur mit VBA zu machen.

Warum druckst du nich beides aus und sortierst diese ineinander?


Gruß

Helmut
0 Punkte
Beantwortet von ekg Mitglied (303 Punkte)
Hallo

vba wär ok. Kann mir dabei einer helfen. EInsortieren ist zu umständlcih
weil es 3 mal am Tag nötig ist
0 Punkte
Beantwortet von theblackbird_ Mitglied (605 Punkte)
Moin,

[*]Sind die Tabellennamen wirklich 1,2,3 und a,b,c?
[*]Sind die Tabellen in der jeweiligen Arbeitsmappe schon in der richtigen Reihenfolge?
[*]Ist sichergestellt, dass beide Mappen exakt die gleiche Anzahl Tabellen beinhalten?
[*] Was soll mit ueberzaehligen Tabellen geschehen, wenn die Anzahl nun doch ungleich sein sollte?

Unabhaengig der Antworten bastel ich schon mal munter drauf los. ;-)

Cu
TheBlackBird ®
0 Punkte
Beantwortet von ekg Mitglied (303 Punkte)
Hallo TheBlackBird ®

Sind die Tabellennamen wirklich 1,2,3 und a,b,c?
Nein ist nur fiktiv
Sind die Tabellen in der jeweiligen Arbeitsmappe schon in der richtigen
Reihenfolge?
ja
]Ist sichergestellt, dass beide Mappen exakt die gleiche Anzahl Tabellen
beinhalten?
ja
Was soll mit ueberzaehligen Tabellen geschehen, wenn die Anzahl nun
doch ungleich sein sollte?

schon mal schönen Dank für die Reaktion
0 Punkte
Beantwortet von theblackbird_ Mitglied (605 Punkte)
Moin,

Wolln doch malSchauen, ob der Code in dieser Beispiel-DruckMappe in etwa passt und entsprechend ausgebaut werden kann.

Achtung! Wenn der Code nicht grad in einen Fehler laeuft, dann werden die zusammengefassten Seiten direkt an den StandardDrucker gegeben. Zu Testzwecken also entweder kleine TestMappen auswaehlen.
Oder noch besser: vor dem Test einen PDF-Drucker als StandardDrucker auswaehlen.

Cu TheBlackBird ®
0 Punkte
Beantwortet von ekg Mitglied (303 Punkte)
TheBlackBird

total super :-)

noch zwei fragen :
1. wie füge ich das Makro in eine Arbeitsmappe ein und kann ich es
dann über eine Schaltfläche starten?
2. gibt es noch eine Ergänzung so das ich in allen ausgedruckten
Tabellen in die Zelle C4 meinen Vornamen einfügen kann

danke im Vorraus
0 Punkte
Beantwortet von theblackbird_ Mitglied (605 Punkte)
Moin,

[quote]1. wie füge ich das Makro in eine Arbeitsmappe ein und kann ich es
dann über eine Schaltfläche starten?[/quote]

Den Code aus der Beispielmappe wuerde ich nicht in eine andere Mappe einfuegen. Er loescht ja schliesslich in der Mappe, in der er laeuft, alle Tabellen, ausser jene die "Drucken" heisst. Daher habe ich das mal entsprechend umgebaut (siehe weiter unten). In der umgebauten Version wird neben den zu druckenden auch noch eine NEUE Mappe geoeffnet, in der die einzelnen Tabellen zusammengefasst werden. Alle 3 Mappen werden nach dem Druck derzeit OHNE SPEICHERN oder Rueckfrage geschlossen. Der Code gehoert dann nun in ein Standard-Modul. Eine Anleitung dazu findest Du unter  [b][url]http://www.excelbeispiele.de/[/url][/b] -> [b]Anleitungen[/b]-> [b]3.) Anleitung zum VBA Projekt “StandardModul"[/b].

Um das Ganze dann ueber eine Befehlsschaltflaeche zu starten folge einfach der Anleitung [b]4.) Anleitung zum Einfügen einer Befehlsschaltfläche [/b] auf der selben Site.

[quote]2. gibt es noch eine Ergänzung so das ich in allen ausgedruckten
Tabellen in die Zelle C4 meinen Vornamen einfügen kann[/quote]
Das habe ich in den unten gelisteten Code gleich einmal mit eingebaut. Du musst dann nur im Code in der Zeile mit [i]...Range("C4").Value = "Vorname"[/i] das [i]Vorname[/i] durch Deinen eigenen Namen/Text ersetzen. (AnfuehrungsZeichen muessen bleiben.)

Code fuer das StandardModul waere dann:[code]
Sub MappenDruck()
'VariablenDefinition
'===================
Dim strPathFF As String, strPathSF As String
Dim dlgFilePicker As FileDialog
Dim wbFF As Workbook, wbSF As Workbook, wbPrint As Workbook
Dim intMaxWS As Integer, intCounter As Integer
Dim varArr As Variant

    'Dialoge zur Dateiauswahl
    '========================
    Set dlgFilePicker = Application.FileDialog(msoFileDialogFilePicker)
    With dlgFilePicker
        .AllowMultiSelect = False
        .Filters.Clear
        .Filters.Add "Exceldateien *.xls*  ", "*.xls*", 1
        .InitialView = msoFileDialogViewDetails
        .ButtonName = "erste Datei waehlen"
        .Title = " erste zu druckende Datei auswaehlen"
        .Show
        If .SelectedItems.Count > 0 Then
            strPathFF = .SelectedItems(1)
        Else
            MsgBox "Abbruch": End
        End If
    End With
    With dlgFilePicker
        .AllowMultiSelect = False
        .Filters.Clear
        .Filters.Add "Exceldateien *.xls*  ", "*.xls*", 1
        .InitialView = msoFileDialogViewDetails
        .ButtonName = "zweite Datei waehlen"
        .Title = " zweite zu druckende Datei auswaehlen"
        .Show
        If .SelectedItems.Count > 0 Then
            strPathSF = .SelectedItems(1)
        Else
            MsgBox "Abbruch": End
        End If
    End With
    
    'Mappen zusammenfuehren
    '======================
    Set wbPrint = Workbooks.Add(xlWBATWorksheet)                                'Druckmappe fuer die Zusammenfassung
    Set wbFF = Workbooks.Open(strPathFF)                                        'erste zu druckende Mappe oeffnen
    Set wbSF = Workbooks.Open(strPathSF)                                        'zweite zu druckende Mappe oeffnen
    intMaxWS = wbFF.Sheets.Count                                                'SheetZahl von erster Mappe
    If wbSF.Sheets.Count < wbFF.Sheets.Count Then intMaxWS = wbSF.Sheets.Count  'intMaxWS auf kleinste SheetZahl
    For intCounter = 1 To intMaxWS Step 1                                       'Sheets in Zusammenfassung kopieren
        wbFF.Sheets(intCounter).Copy After:=wbPrint.Sheets(wbPrint.Sheets.Count)
        wbSF.Sheets(intCounter).Copy After:=wbPrint.Sheets(wbPrint.Sheets.Count)
    Next intCounter
    ReDim varArr(2 To wbPrint.Sheets.Count)                                     'Array fuer Namen derzu druckenden Sheets
    For intCounter = 2 To wbPrint.Sheets.Count                                  'Sheets durchlaufen (2 bis Ende)
        varArr(intCounter) = wbPrint.Sheets(intCounter).Name                    'SheetNamen aufsammeln
        If wbPrint.Sheets(intCounter).Type = xlWorksheet Then _
            wbPrint.Sheets(intCounter).Range("C4").Value = "Vorname"            'zu druckenden Namen schreiben !ANPASSEN!
    Next intCounter
    wbPrint.Sheets(varArr).PrintOut Copies:=1, Collate:=True, _
        IgnorePrintAreas:=False                                                 'Drucken
        
    'Alle Mappen schliessen (OHNE SPEICHERN)
    '======================================
    wbFF.Close False
    wbSF.Close False
    wbPrint.Close False
    
    'Objecte zerstoeren
    '==================
    Set wbPrint = Nothing
    Set wbFF = Nothing
    Set wbSF = Nothing
    Set dlgFilePicker = Nothing

End Sub
[/code]

Cu TheBlackBird ®
0 Punkte
Beantwortet von ekg Mitglied (303 Punkte)
TheBlackBird

funktioniert einwandfrei....

zu der Frage unten hätte ich gerne ein Auswahlfeld wo ich den Namen vorgeben kann der eingefügt werden soll.
Also ich meine ein Auswahlfeld in dem ich den zu druckenden Namen einfügen kann.
Falls du mir dabei noch einmal helfen könntest wäre ich dir sehr dankbar

2. gibt es noch eine Ergänzung so das ich in allen ausgedruckten
Tabellen in die Zelle C4 meinen Vornamen einfügen kann

danke im Vorraus
0 Punkte
Beantwortet von theblackbird_ Mitglied (605 Punkte)
Moin,

Ein Auswahlfeld? Dann musst Du aber auch sagen aus was/welchen Daten ausgewaehlt werden soll. So habe ich es ersteinmal mittels InputBox versucht. Wenn Du das so meinst, iO. Wenn Du das anders loesen wolltest, dann musst Du es mal etwas genauer schildern, oder gar mal eine Beispielmappe hochladen. Aber testen wir erstmal folgenden Code:
Sub MappenDruck()
'VariablenDefinition
'===================
Dim strPathFF As String, strPathSF As String, strInput As String
Dim dlgFilePicker As FileDialog
Dim wbFF As Workbook, wbSF As Workbook, wbPrint As Workbook
Dim intMaxWS As Integer, intCounter As Integer
Dim varArr As Variant

'Dialoge zur Dateiauswahl
'========================
Set dlgFilePicker = Application.FileDialog(msoFileDialogFilePicker)
With dlgFilePicker
.AllowMultiSelect = False
.Filters.Clear
.Filters.Add "Exceldateien *.xls* ", "*.xls*", 1
.InitialView = msoFileDialogViewDetails
.ButtonName = "erste Datei waehlen"
.Title = " erste zu druckende Datei auswaehlen"
.Show
If .SelectedItems.Count > 0 Then
strPathFF = .SelectedItems(1)
Else
MsgBox "Abbruch": End
End If
End With
With dlgFilePicker
.AllowMultiSelect = False
.Filters.Clear
.Filters.Add "Exceldateien *.xls* ", "*.xls*", 1
.InitialView = msoFileDialogViewDetails
.ButtonName = "zweite Datei waehlen"
.Title = " zweite zu druckende Datei auswaehlen"
.Show
If .SelectedItems.Count > 0 Then
strPathSF = .SelectedItems(1)
Else
MsgBox "Abbruch": End
End If
End With

'zu druckenden Namen abfragen (wenn keine Vorbelegung gewuenscht, dann
'einfach "mein Vorname" durch "" ersetzen)
'=====================================================================
strInput = InputBox("Bitte geben Sie hier den in ""C4""" & vbCrLf & _
"zu druckenden Vornamen/Text ein.", "Eingabe", "mein Vorname")

'Mappen zusammenfuehren
'======================
Set wbPrint = Workbooks.Add(xlWBATWorksheet) 'Druckmappe fuer die Zusammenfassung
Set wbFF = Workbooks.Open(strPathFF) 'erste zu druckende Mappe oeffnen
Set wbSF = Workbooks.Open(strPathSF) 'zweite zu druckende Mappe oeffnen
intMaxWS = wbFF.Sheets.Count 'SheetZahl von erster Mappe
If wbSF.Sheets.Count < wbFF.Sheets.Count Then intMaxWS = wbSF.Sheets.Count 'intMaxWS auf kleinste SheetZahl
For intCounter = 1 To intMaxWS Step 1 'Sheets in Zusammenfassung kopieren
wbFF.Sheets(intCounter).Copy After:=wbPrint.Sheets(wbPrint.Sheets.Count)
wbSF.Sheets(intCounter).Copy After:=wbPrint.Sheets(wbPrint.Sheets.Count)
Next intCounter
ReDim varArr(2 To wbPrint.Sheets.Count) 'Array fuer Namen derzu druckenden Sheets
For intCounter = 2 To wbPrint.Sheets.Count 'Sheets durchlaufen (2 bis Ende)
varArr(intCounter) = wbPrint.Sheets(intCounter).Name 'SheetNamen aufsammeln
If wbPrint.Sheets(intCounter).Type = xlWorksheet Then _
wbPrint.Sheets(intCounter).Range("C4").Value = strInput 'zu druckenden Namen schreiben
Next intCounter
wbPrint.Sheets(varArr).PrintOut Copies:=1, Collate:=True, _
IgnorePrintAreas:=False 'Drucken

'Alle Mappen schliessen (OHNE SPEICHERN)
'======================================
wbFF.Close False
wbSF.Close False
wbPrint.Close False

'Objecte zerstoeren
'==================
Set wbPrint = Nothing
Set wbFF = Nothing
Set wbSF = Nothing
Set dlgFilePicker = Nothing

End Sub


Ersetze damit komplett den bisherigen Code.

Cu TheBlackBird ®
0 Punkte
Beantwortet von theblackbird_ Mitglied (605 Punkte)
Moin,

btw: Wenn ich es mir recht ueberlege, dann frage ich mich,
ob das nicht immer und immer wieder ein und die selben
zwei Dateien sind. Wenn dem so ist, dann koennte man sich
die Auswahldialoge sparen, und die beiden Dateien fest im
Code hinterlegen. Spart beim wiederholten Drucken immer
ein paar Mausklicks. Oder, wenn Du da doch mehrere DateiKombis
hast, dann koennte man zumindest fuer die Dialoge mittels InitialFileName
mal die grobe Richtung (den Pfad z.B. "C:\Mappen\DoppelDruck\") vorgeben.

Nur so als Idee...

Cu TheBlackBird ®
...