Excel 2003: Aktualisierung Inhalt Kopfzeile per VBA in zwei Tabellen

16/10/2007 - 10:51 von Hein | Report spam
Hallo,

ich habe mit Hilfe dieses Forums einige wenige Zeilen VBA in eine
Excelmappe eingefügt. Im Laufe der Einsatzzeit sind mir dazu ein paar
Fragen aufgefallen.

Die Mappe ist eine Vorlage - noch nicht als xlt abgelegt, braucht noch
innerbetriebliche Bewàhrung und enthàlt immmer 2 Tabellenblàtter. Ein
Deckblatt mit Stammdaten und das ein Blatt mit den relevanten Daten.
Diese gehören zusammen und müssen auch immer zusammen gedruckt werden
bzw. durch gemeinsamen Kopfzeileninhalt zuordenbar bleiben.

Deshalb kopiert das Makro den Inhalt einiger Zellen vom Deckblatt in
die Kopfzeile der Tabellenblàtter und überschreibt den DRUCK Befehl,
so dass beide Blàtter gleichzeitig ausgedruckt werden.

Leider wird der Inhalt der Kopfzeile nur dann aktualisiert, wenn vor
dem Ausdruck jeweils das Blatt ausgewàhlt wurde und in der
Druckvorschau betrachtet wird. Das heißt, wenn auf dem Deckblatt
geàndert wird und gedruckt wird, wird die Kopfzeile des zweiten
Tabellenblattes nicht aktualisiert. Warum?

Sind mehrere solcher Tabellenblàtter geöffnet, gehen die Inhalte der
Kopfzeilen durcheinander. Warum?

vielen Dank und viele Grüße

Hein

Hier mein Code - als Ereignis in der Mappe.

Private Sub Workbook_BeforePrint(Cancel As Boolean)

Dim sh As Object

'*******************************
'Das Makro kopiert den Inhalt der Zellen in die Kopfzeile
'des jeweiligen aktiven Tabellenblattes vor dem ausdrucken
'bzw. dem Anzeigen der Seitenansicht
'*******************************
With ActiveSheet.PageSetup
.CenterHeader = Range("Titel_der_FMEA").Value _
& Chr(10) _
& Range("Deckblatt!A7").Value & " " & Range("Deckblatt!A8").Value
& " " & Range("Deckblatt!A9").Value
End With


'******************************
'Dieses Makro überschreibt den normalen Druckbefehl so,
'das mit dem normalen Exceldruckbefehl alle Blàtter dieser Mappe
'mit jeweils eigenstàndiger Seitennummerierung gedruckt werden
'******************************
Application.EnableEvents = False
For Each sh In Sheets
sh.PrintOut
Next
Application.EnableEvents = True

' normalen, eigentlich gestarteten
' Druckvorgang abbrechen
Cancel = True

End Sub
 

Lesen sie die antworten

#1 stefan onken
16/10/2007 - 14:16 | Warnen spam
hallo Hein,
On 16 Okt., 10:51, Hein wrote:
Hallo,

ich habe mit Hilfe dieses Forums einige wenige Zeilen VBA in eine
Excelmappe eingefügt. Im Laufe der Einsatzzeit sind mir dazu ein paar
Fragen aufgefallen.

Die Mappe ist eine Vorlage - noch nicht als xlt abgelegt, braucht noch
innerbetriebliche Bewàhrung und enthàlt immmer 2 Tabellenblàtter. Ein
Deckblatt mit Stammdaten und das ein Blatt mit den relevanten Daten.
Diese gehören zusammen und müssen auch immer zusammen gedruckt werden
bzw. durch gemeinsamen Kopfzeileninhalt zuordenbar bleiben.

Deshalb kopiert das Makro den Inhalt einiger Zellen vom Deckblatt in
die Kopfzeile der Tabellenblàtter und überschreibt den DRUCK Befehl,
so dass beide Blàtter gleichzeitig ausgedruckt werden.

Leider wird der Inhalt der Kopfzeile nur dann aktualisiert, wenn vor
dem Ausdruck jeweils das Blatt ausgewàhlt wurde und in der
Druckvorschau betrachtet wird. Das heißt, wenn auf dem Deckblatt
geàndert wird und gedruckt wird, wird die Kopfzeile des zweiten
Tabellenblattes nicht aktualisiert. Warum?


weil im Code ActiveSheet steht und somit nur das zum Zeitpunkt des
Druckes aktive Blatt geàndert wird. Du musst die Änderung für jedes
Blatt ausführen (For Each sh in Sheets). Teste mal diesen Code

'******************************
'Dieses Makro überschreibt den normalen Druckbefehl so,
'das mit dem normalen Exceldruckbefehl alle Blàtter dieser Mappe
'mit jeweils eigenstàndiger Seitennummerierung gedruckt werden
'******************************
Application.EnableEvents = False
For Each sh In Sheets
sh.PageSetup.CenterHeader = _
Range("Titel_der_FMEA").Value _
& Chr(10) _
& Range("Deckblatt!A7").Value & " " _
& Range("Deckblatt!A8").Value & " " _
& Range("Deckblatt!A9").Value
sh.PrintOut
Next
Application.EnableEvents = True
' normalen, eigentlich gestarteten
' Druckvorgang abbrechen
Cancel = True
End Sub

eigentlich schreibt man in VBA übrigens
Sheets("Deckblatt").Range("A7")

Sind mehrere solcher Tabellenblàtter geöffnet, gehen die Inhalte der
Kopfzeilen durcheinander. Warum?



was bedeutet durcheinander? Kannst du ein Bsp geben?

Gruß
stefan

vielen Dank und viele Grüße

Hein

Ähnliche fragen