Kopfzeile in Excel 2003

Hallo zusammen,
ich habe in Excel 2003 12 verschiedene Tabellenblätter (Jan-Dez). Jetzt möchte ich das in der Kopfzeile jeden Tabellenblattes der Name der Firma z.B. erscheint, ohne das ich jetzt jede Kopfzeile der 12 Tabellenblätter neu eintragen muss. Geht sowas oder? Kann ich Kopfzeilen verknüfpen? Oder gibt es andere Lösungen?
LG Doreen

ich habe in Excel 2003 12 verschiedene Tabellenblätter
(Jan-Dez). Jetzt möchte ich das in der Kopfzeile jeden
Tabellenblattes der Name der Firma z.B. erscheint, ohne das
ich jetzt jede Kopfzeile der 12 Tabellenblätter neu eintragen
muss. Geht sowas oder? Kann ich Kopfzeilen verknüfpen? Oder
gibt es andere Lösungen?

Hi Doreen,

aktiviere Jan, dann halte die Strg-taste gedrückt und klicke nacheinender unten die Register der anderen Blätter an, dann Ansicht—Kopf- und Fußzeilen…

Gruß
Reinhard

Hallo Doreen.

Du könntest die gewünschte Funktionalität automatisieren, indem Du den folgenden Code verwendest (bzw. anpaßt):

Private Sub Workbook\_BeforePrint(Cancel As Boolean)
 On Error GoTo Fehler
 Application.ScreenUpdating = False
 Application.ActivePrinter = "FreePDF XP auf Ne02:"
 With ActiveSheet.PageSetup
 .LeftHeader = "&""Courier New""&12" \_
 & "Firma Mustermann" & vbCr \_
 & "Musterstraße 123" & vbCr & vbCr \_
 & "12345 Musterstadt"
 .PrintQuality = 300
 .PaperSize = xlPaperA4
 .BlackAndWhite = True
 End With
 ActiveWindow.SelectedSheets.PrintOut Copies:=1, ActivePrinter:="FreePDF XP auf Ne02:", Collate:=True
Ende:
 Application.ScreenUpdating = True
 Exit Sub
Fehler:
 Cancel = True
 MsgBox "Der Ausdruck ist fehlgeschlagen."
 Resume Ende
End Sub

Du mußt dafür in den VisualBasic-Editor gehen (Menü Extras>Makros>VisualBasic-Editor) und dort auf „DieseArbeitsmappe“ doppelklicken. Daraufhin öffnet sich das Code-Fenster, in das Du den obigen Code einfach hineinkopieren kannst.

Wahrscheinlich mußt Du den Namen des Druckers noch anpassen.

VG
Carsten

Hallo Carsten,
vielen Dank, habe ich dann die Möglichkeiket den Firmennamen noch wo anders zu pflegen als im Code? Ich will das Tool dann zur Verfügung stellen und jeder soll halt einfach seinen Firmannamen selbst pflegen können.
LG Doreen

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

vielen Dank, habe ich dann die Möglichkeiket den Firmennamen
noch wo anders zu pflegen als im Code? Ich will das Tool dann
zur Verfügung stellen und jeder soll halt einfach seinen
Firmannamen selbst pflegen können.

Hi Doreen,

können die zurVerfügunggestellten meinen Hinweis nicht durchführen, warum nicht?

Zu einer Vba-Lösung, irgendwoher muß ja der Code den Firmennamen wissen.

Mit einer kleinen Tabelle die man unsichtbar machen kann in der mappe wär das kein Thema:

Benutzername Firma
Hans AEG
Bärbel Siemens
Schröder KGB

Oder jeder Benutzer muß in eine festgelegte Zelle seine Firma eintragen.

Oder, oder, es gibt da viele Möglichkeiten der Knackpunkt ist wie kommt der Code automatisch an den Firmennamen.

Ein Makro könnte auch auf dem jeweiligen Rechner alle xls-dateien öffnen und nachschauen was unter datei—Eigenschaften als Firma eingetragen ist.
Die am häufigsten genannte müßte dann der Firmennamen sein, aber genaues weiß man nicht, besonders wenn das Feld leer ist oder Microsoft da steht :smile:

Gruß
Reinhard

Hallo Doreen.

Ja. Es gibt dort eine Reihe von Möglichkeiten.

Man könnte z.B. ein weiteres Tabellenblatt einfügen, in dem der Firmenname vom Anwender eingegeben wird.
Ausgehend vom Tabellennamen „Tabelle1“ und dem Firmennamen in der Zelle A1, würde das entsprechende Code-Fragment dann so aussehen:

 .LeftHeader = "&""Courier New""&12" \_
 & Tabelle1.Cells(1, 1) & vbCr \_

Die Schriftart und die Schriftgröße können natürlich auch noch angepaßt werden; entweder direkt im Code, oder auch über den Weg in dem zusätzliche Tabellenblatt.

Etwas komplizierter wird es, wenn man dem Anwender eine Datei, z.B. eine Textdatei, mitliefert, die in einem Verzeichnis gespeichert wird und die entsprechenden Daten enthält. Aber auch das ist möglich. Es hätte auch den Vorteil, daß die Excel-Datei nich unnötig größer wird.

Noch komplizierter wird es, wenn man in Excel das Erstellen einer solchen Text-Datei mit hineinprogrammiert. Hier würde dann vor dem Drucken überprüft werden müssen, ob diese Text-Datei bereits existiert. Falls nicht, würde sie dann über eine Abfragemaske erstellt, mit Daten gefüllt und gespeichert werden.

Dann wäre da noch die Möglichkeit, die Datei ohne zusätzliches Tabellenblatt auszuliefern und vor dem Drucken abzufragen, ob dieses Tabellenblatt mit den Daten in der Datei enthalten ist. Falls nicht, würde dann auch hier über eine Abfragemaske das Tabellenblatt erstellt und mit Daten gefüllt werden.

(Tabellenblätter können für den Anwender unsichtbar gemacht werden!)

Aber welche dieser Möglichkeiten ist die beste?

VG
Carsten

Hallo Reinhard,
ich möchte im worst-case davon ausgehen, dass die User dieser Tabelle keine großen Excel-Kenntnisse mitbringen. Deswegen würde ich gern ein paar Zellen in einem separaten Tabellenblatt zur Verfügung stellen, in der solche Angaben gemacht werden können. Von da aus soll sich dann die Kopfzeile automatisch befüllen. Geht sowas???
LG Doreen

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

ich möchte im worst-case davon ausgehen, dass die User dieser
Tabelle keine großen Excel-Kenntnisse mitbringen. Deswegen
würde ich gern ein paar Zellen in einem separaten
Tabellenblatt zur Verfügung stellen, in der solche Angaben
gemacht werden können. Von da aus soll sich dann die Kopfzeile
automatisch befüllen. Geht sowas???

Hallo Doreen,

magst du bitte das was ich schrieb nochmal durchlesen?

Mag sein, ich habe mich unklar ausgedrückt, wäre nicht untypisch für mich :smile:

Die Kopf- oder Fußzeile aufgrund von Daten in einer Extratabelle zu befüllen ist kein Problem. Mittels Vba kann man dieses Extrablatt so verstecken daß man es ohne Vba nie sieht.

Kein Problem ist es auch aufgrund des Excelusernamens oder des Windowsbenutzernamens die Firma zu ermitteln, sofern dieses Zuordnung in dieser Tabelle auch vermerkt ist.

Genau deshalb fragte ich unbeantworteterweise nach :frowning:

Was soll der arme makrocode tun wenn du deine Datei an einen Otto oder eine Ottilie schickst und die stehen nicht in der Tabelle, wie soll dann das Makro den Firmennamen erschnuppern?

Machbar wäre es schon einfach, daß dann das Makro die Festplatte löscht und dabei als Meldung in einem Fensterchen bringt, „Schööne Grüße von Doreen“

Dann kriegste bald Post von einem Anwalt, den kannste ja dann fragen für welche Firma er arbeitet *gg*

Wäre natürlich geschickter andere Wege zu suchen um an den Firmennamen zu kommen…

Gruß
Reinhard

… Excel 2003 12 verschiedene Tabellenblätter (Jan-Dez). Jetzt möchte ich das in der Kopfzeile jeden Tabellenblattes der Name der Firma z.B. erscheint, ohne das ich jetzt jede Kopfzeile der 12 Tabellenblätter neu eintragen muss. Geht sowas oder? Kann ich Kopfzeilen verknüfpen? Oder gibt es andere Lösungen?

Hallo Doreen,

man kann doch einfach in die anderen Blätter statt dem Namen eine Formel eintragen, die den Eintrag z. B. vom ersten Blatt einträgt, also z. B. in Zelle A1 der Blätter Feb…Dez: =Jan!A1
Dann wird in diese Zelle der Eintrag aus Zelle A1 des Blattes Jan eingetragen ("!" ist die Excel-Konvention, dass sich die vorangehenden Zeichen auf einen Blattnamen beziehen) und man braucht den Eintrag nur im ersten Blatt vorzunehmen.

Bernhard

man kann doch einfach in die anderen Blätter statt dem Namen
eine Formel eintragen, die den Eintrag z. B. vom ersten Blatt
einträgt, also z. B. in Zelle A1 der Blätter Feb…Dez:
=Jan!A1
Dann wird in diese Zelle der Eintrag aus Zelle A1 des Blattes
Jan eingetragen ("!" ist die Excel-Konvention, dass sich die
vorangehenden Zeichen auf einen Blattnamen beziehen) und man
braucht den Eintrag nur im ersten Blatt vorzunehmen.

Hallo Bernhard,

ich schreib das in Feb!A1, gut, woher weiß dann die Zelle Mrz!A1 daß ich das schrieb?

Und was hat das alles mit Kopfzeilen in Excel zu tun?

Gruß
Reinhard

man kann doch einfach in die anderen Blätter statt dem Namen eine Formel eintragen, die den Eintrag z. B. vom ersten Blatt einträgt, also z. B. in Zelle A1 der Blätter Feb…Dez: =Jan!A1
Dann wird in diese Zelle der Eintrag aus Zelle A1 des Blattes Jan eingetragen ("!" ist die Excel-Konvention, dass sich die vorangehenden Zeichen auf einen Blattnamen beziehen) und man braucht den Eintrag nur im ersten Blatt vorzunehmen.

Hallo Bernhard,
ich schreib das in Feb!A1, gut, woher weiß dann die Zelle Mrz!A1 daß ich das schrieb?
Und was hat das alles mit Kopfzeilen in Excel zu tun?
Gruß
Reinhard

Hallo Doreen und Reinhard (Danke für den Hinweis),

ich vergaß: Variable Widerholungen über mehrerer Blätter würde ich nicht in die blattspezifischen Kopf- und Fußzeilen eintragen, sondern in die Blätter selbst mit den o. a. Formeln.

Gruß Bernhard

Hallo Reinhard,
ich hab Dich schon verstanden. Ich möchte in Tabelle1 3 Zellen für diese ANgaben zur Verfügung stellen, in die jeder seine persönlichen Daten eintragen kann. Auf diese Zellen muss sich dann der VBA Code beziehen, der dann diese Daten in die Kopfzeile meiner 12 Tabellenblätter überträgt. Carsten hat mir so einen COde schon zur Verfügung gestellt, nur geht dieser über die Druckfunktion, mit der ich nicht zurecht komme, da ichnicht weiß, wie ich meinen Drucker zuweisen soll (Name…) Kannst Du Dir das mal bitte anschauen?
LG Doreen (Ich hoffe, wir haben uns jetzt verstanden :smile:)

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Doreen.

Das mit dem Drucker ist so eine Sache. Die Anwender Deiner Excel-Datei werden ja möglicherweise verschiedene Drucker verwenden.

Um den Namen Deines eigenen Druckers herauszufinden, kannst Du einfach ein Makro aufzeichen.

Menü ‚Extras‘ > ‚Makro‘ > ‚Aufzeichnen…‘

Dann Menü ‚Datei‘ > ‚Drucken…‘

Drucker auswählen und dann auf ‚Abbrechen‘ klicken.

Aufzeichnung beenden und in den VisualBasic-Editor gehen. Dort sollte dann ein Modul hinzugekommen sein, das standardmäßig ‚Modul1‘ heißen sollte. Darauf dann doppelklicken, woraufhin sich das Code-Fenster öffnet.
Dort sollte sich dann der Code des aufgezeichneten Makros befinden und irgendwo da sollte der Name des Druckers stehen.

Du kannst die Definition des Druckers im Code auch einfach weglassen, was zur Folge hat, daß der Standard-Drucker des Anwenders zum Ausdruck verwendet wird. Der Code würde dann so aussehen:

Private Sub Workbook\_BeforePrint(Cancel As Boolean)
 On Error GoTo Fehler
 Application.ScreenUpdating = False
 With ActiveSheet.PageSetup
 .LeftHeader = "&""Courier New""&12" \_
 & "Firma Mustermann" & vbCr \_
 & "Musterstraße 123" & vbCr & vbCr \_
 & "12345 Musterstadt"
 .PrintQuality = 300
 .PaperSize = xlPaperA4
 .BlackAndWhite = True
 End With
 ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
Ende:
 Application.ScreenUpdating = True
 Exit Sub
Fehler:
 Cancel = True
 MsgBox "Der Ausdruck ist fehlgeschlagen."
 Resume Ende
End Sub

VG
Carsten

Hallo Carsten,
so hat es jetzt geklappt mit Deinem Code. Aber nur für das Active Sheet. Wie können jetzt über diesen Code die Kopfzeilen der weiteren 12 TAbellenblätter automatisch befüllt werden, wennn die Eingabezellen für die Firmendaten weiterhin in Tabelle 1 stehen?
LG Doreen

Hallo Doreen,

Dazu kann ich ohne nähere Beschreibung nicht viel sagen.

Ist Tabelle1 das von mir vorgeschlagene zusätzliche Tabellenblatt?

Auf welche Art und Weise werden denn die "Monats-"Tabellenblätter ausgedruckt?
(Wenn der Anwender sie von Hand einzeln ausgedruckt, müßte es ja mit ‚ActiveSheet‘ funktionieren)

Bitte beschreibe 'mal Deine Vorgehensweise etwas genauer.

VG
Carsten

Hallo Carsten,
ich habe es jetzt folgendermaßen gelöst:
Die Firmendaten werden in der Tabelle1 Zelle A1;A2;A3 gepflegt.
Und dann werde ich den Code 12 mal (für jedes weitere Tabellenblatt) eingeben: „With Sheets(„Tabelle1“).PageSetup“ -> für Tabelle1; „With Sheets(„Tabelle2“).PageSetup“ -> für Tabelle2 usw. bis Tabelle12.
sodass am Ende jede Kopfzeile jedes Tabellenblatts mit den Daten aus Tabelle1 befüllt wird.

Sub Kopfzeile()
Dim ws As Worksheet
On Error GoTo Fehler
Application.ScreenUpdating = False
With Sheets(„Tabelle1“).PageSetup
'With ws.PageSetup
.LeftHeader = „&“„Courier New“"&12" _
& Tabelle1.Cells(1, 1) & vbCr _
& Tabelle1.Cells(2, 1) & vbCr _
& Tabelle1.Cells(3, 1)
.PrintQuality = 300
.PaperSize = xlPaperA4
.BlackAndWhite = True
End With
With Sheets(„Tabelle2“).PageSetup
.LeftHeader = „&“„Courier New“"&12" _
& Tabelle1.Cells(1, 1) & vbCr _
& Tabelle1.Cells(2, 1) & vbCr _
& Tabelle1.Cells(3, 1)
.PrintQuality = 300
.PaperSize = xlPaperA4
.BlackAndWhite = True
End With
Ende:
Application.ScreenUpdating = True
Exit Sub
Fehler:
Cancel = True
MsgBox „Der Ausdruck ist fehlgeschlagen.“
Resume Ende
End Sub

Geht bestimmt auch komfortabler…
LG Doreen

ich hab Dich schon verstanden. Ich möchte in Tabelle1 3 Zellen
für diese ANgaben zur Verfügung stellen, in die jeder seine
persönlichen Daten eintragen kann. Auf diese Zellen muss sich
dann der VBA Code beziehen, der dann diese Daten in die
Kopfzeile meiner 12 Tabellenblätter überträgt. Carsten hat mir
so einen COde schon zur Verfügung gestellt, nur geht dieser
über die Druckfunktion, mit der ich nicht zurecht komme, da
ichnicht weiß, wie ich meinen Drucker zuweisen soll (Name…)

Hallo Doreen,

anstatt leftfooter kannst du auch leftfooter und centerfooter benutzen
Ggfs. den Blattnamen „tabelle1“ und die Zellenbezeichnungne anpassen.

Das Makro reagiert vollautomatisch auf Änderungen in Tabelle1!A1:A3

In das Modul von „Tabelle1“

Private Sub Worksheet\_Change(ByVal Target As Range)
Dim N As Byte, Txt As String
If Intersect(Target, Range("A1:A3")) Is Nothing Then Exit Sub
Txt = Range("A1") & Chr(13) & Range("A2") & Chr(13) & Range("A3")
For N = 1 To 12
 Worksheets(MonthName(N, 1)).PageSetup.LeftHeader = Txt
Next N
End Sub

Gruß
Reinhard

… endlich mal jemand, der das Problem richtig anpackt (anstatt komplizierte VBA-Programmierung usw…

noch mal zur Wiederholung: um z.B. in den 12 Arbeitsblättern die gleichen Kopfzeilen einzutragen: Blatt 1 bis 12 markieren (so, als wollte mann alle gleichzeitig ausdrucken) und dann die Kopfzeile eintragen.
Danach ist es auf allen 12 Blättern eingetragen !!

Übrigens gilt dies auch für Formeln oder Formatierungen --> bitte mal ausprobieren

viele Grüße von Mabuse