PDA

Vollständige Version anzeigen : Zellinhalte in Kopf- und Fusszeilen übernehmen (verschiedene Tabellenblätter).


Mitch11
22.04.2009, 18:49
Hallo,

kann mir bitte jemand weiterhelfen?

Ich habe eine Exceldatei mit vier Tabellenblättern ("Daten", "Köpfe", "Kosten", "Stunden").

Im ersten Tabellenblatt „Daten“ steht folgendes:

A1 = 22.04.2009
A2 = (Januar 2009)
A3 = Köpfe
A4 = Kosten
A5 = Stunden

Nun möchte ich in der rechten Fusszeile in den Tabellenblättern „Köpfe“, „Kosten“ und „Stunden“ als Datum die Eingabe aus der Zelle A1 aus dem Tabellenblatt "Daten" haben.

Die mittlere Kopfzeile soll in den Tabellenblättern wie folgt aussehen:

Tabellenblatt "Köpfe" = A3 & A2 aus Tabellenblatt "Daten"
Tabellenblatt "Kosten" = A4 & A2 aus Datenblatt "Daten"
Tabellenblatt "Stunden" = A5 & A2 aus Datenblatt "Daten".

Jemand eine Idee wie das mit VBA zu realisieren ist?

jinx
22.04.2009, 20:24
Moin, Mitch,

nur eine Idee? ;)

Sub MitchHeaderFooter()
Dim wks As Worksheet
Dim strRHeader As String
Dim strMFooter As String

For Each wks In Worksheets
strRHeader = Sheets("Daten").Range("A1").Text
Select Case wks.Name
Case "Köpfe"
strMFooter = Sheets("Daten").Range("A3").Text & " " & Sheets("Daten").Range("A2").Text
Case "Kosten"
strMFooter = Sheets("Daten").Range("A4").Text & " " & Sheets("Daten").Range("A2").Text
Case "Stunden"
strMFooter = Sheets("Daten").Range("A5").Text & " " & Sheets("Daten").Range("A2").Text
Case Else
strMFooter = ""
End Select
With wks.PageSetup
.LeftHeader = ""
.CenterHeader = ""
.RightHeader = strRHeader
.LeftFooter = ""
.CenterFooter = strMFooter
.RightFooter = ""
End With
Next wks
End Sub

Mitch11
22.04.2009, 21:06
Vielen Dank jinx, hört sich gut an.
Ich habe den Code in meine Musterdatei (siehe Anlage) eingefügt.
Leider ohne Erfolg, in der Seitenansicht sehe ich weder Kopf- noch Fusszeile.

Was habe ich falsch gemacht?

jinx
22.04.2009, 21:26
Moin, Mitch,

der Code gehört in ein allgemeines Modul und muss zumindest einmal ausgeführt werden. Siehe dazu die angehängte Antwortmappe mit einer Schaltfläche auf der Tabelle Daten.

Alternativ dazu ließe sich de Vorgang durch die Verwendung des Ereignisses Private Sub Workbook_BeforePrint(Cancel As Boolean) in DieseArbeitsmappe bei jeder Druckvorschau bzw. jedem Ausdruck aufrufen, dann müsste die Prozedur aber etwas umgeschrieben werden...

Mitch11
22.04.2009, 21:54
Klasse jinx!

Die Daten brauche ich in der Kopf- und Fusszeile genau umgekehrt.
Deinen Code konnte ich entsprechend ändern (siehe Anhang).
Jetzts habe ich noch im Arbeitsblatt "Daten" die Zellen A3 bis A5 formatiert (fett, unterstrichen und größere Schrift), wie bekomme ich dieses Layout auch mit in die Kopfzeile?

jinx
23.04.2009, 05:38
Moin, Mitch,

einen brauchbaren Ansatz dafür erhält man immer, wenn man den Makro-Rekorder über Extras/Makros/aufzeichnen startet, die Aktion durchführt, die Aufzeichnung beendet und sich den erhaltenen Code ansieht. Leider verhalten sich Kopf- und Fußzeilen nicht ganz nach den sonstigen Spielregeln, sodass ein Zuordnen direkt nur unzureichend möglich ist:

Sub MitchHeaderFooter2()
Dim wks As Worksheet
Dim strRFooter As String
Dim strMHeader As String

For Each wks In Worksheets
strRFooter = Sheets("Daten").Range("A1").Text
Select Case wks.Name
Case "Köpfe"
strMHeader = "&""Arial,Fett""&14&U" & Sheets("Daten").Range("A3").Text & " " & Sheets("Daten").Range("A2").Text
Case "Kosten"
strMHeader = "&""Arial,Fett""&14&U" & Sheets("Daten").Range("A4").Text & " " & Sheets("Daten").Range("A2").Text
Case "Stunden"
strMHeader = "&""Arial,Fett""&14&U" & Sheets("Daten").Range("A5").Text & " " & Sheets("Daten").Range("A2").Text
Case Else
strMHeader = ""
End Select
With wks.PageSetup
.LeftHeader = ""
.CenterHeader = strMHeader
.RightHeader = ""
.LeftFooter = ""
.CenterFooter = ""
.RightFooter = strRFooter
End With
Next wks
End Sub
Schriftart und Schriftgröße könnten direkt übernommen werden, Ausprägungen müssen abgefragt und wegen der unterschiedlichen Stelle des Anfügens ggf. über Select Case-Verzweigungen vorgenommen werden.

Mitch11
23.04.2009, 11:15
Hallo jinx,

dank Deiner Tipps bin ich nun schon ein ganzes Stück weiter.
Werde nun am Feinlayout rumbasteln.

Nochmals 1000 Dank.

hugolee
26.08.2009, 15:09
Hallo,

ich wollte keinen eigenen Thread eröffnen, deshalb hier meine ähnliche Frage.

Zuerst einmal eine allgemeine Frage zur Kopf-/Fußzeile.
Kann ich diese für mehrere Register auf einmal einstellen?


Jetzt meine gezielte Frage...

Ich habe eine Tabellenregister "Allgemein"
A1 enthält "26.01.2009" Bearbeitungsdatum
A2 enthält "Müller, Ulli" Bearbeiter

Insgesamt habe ich 75 Register.
Ich will in allen Registern folgende Kopfzeile haben.
LINKS Firmenlogo (Bilddatei)
MITTE Firmenanschrift
RECHTS Datum (aus Register Allgemein A1)

Ich will in allen Registern folgende Fußzeile haben.
LINKS Bearbeiter (aus Register Allgemein A2)
MITTE Registername
RECHTS Seite x/y

Kann mir jemand den Code für die Kopf-/Fußzeile generieren?
Zumindest für die blauen Zeilen.
Wenn der Rest (hab ich händisch gemacht) auch zu machen ist, wäre Super.

DANKE
hugolee

jinx
26.08.2009, 16:12
Moin,. hugolee,

ja - Tabellen gruppieren und Änderung dann durchführen.

Sub hugoleeHeaderFooter()
Dim wks As Worksheet

For Each wks In Worksheets
With wks.PageSetup
.LeftHeader = ""
.CenterHeader = ""
.RightHeader = Sheets("Allgemein").Range("A1").Text
.LeftFooter = Sheets("Allgemein").Range("A2").Text
.CenterFooter = wks.Name
.RightFooter = ""
End With
Next wks
End Sub
Die anderen Sachen gehen auch, aber ich habe hier nur Excel97 und Excel2000 zur Verfügung - damit lassen sich keine Grafiken in Kopfzeilen einfügen.

Vielleicht sollten wir nur noch einen Thread im Forum haben - schließlich hat doch alles etwas mit Excel zu tun, oder? :entsetzt:

hugolee
27.08.2009, 08:43
Hallo jinx,

DANKE für die Hilfe.
Das mit dem Tabelle gruppieren und ändern hat super geklappt, auch mit Graphik einfügen.

Das MAKRO funktioniert auch super.
Will noch ne kleine Änderung einbauen, die ich nicht hinbekomme.

Bei dem Eintrag in der Kopfzeile (rechts) benötige ich erst einen Zeilenumbruch (RETURN) und dann den Eintrag (Sheets("Allgemein").Range("A1").Text
)
Das ganze soll in Arial und Schriftgröße 12 sein.



Anmerkung - alles in einem Thread:
Ich wollte einfach einen weiteren Thread vermeiden und hab meine Frage in einen passenden existierenden gestellt. Ich gehe einfach davon aus, dass die Leute die Suchfunktion nutzen und auch Threads durchlesen, bevor sie einen neuen starten.


hugolee

chris-kaiser
27.08.2009, 08:49
hiho


.RightHeader = "&""Arial,Fett""&12" & chr(13) &Sheets("Allgemein").Range("A1").Text

ist aber nicht getestet

hugolee
27.08.2009, 09:26
DANKE Chris, das funktioniert.

Habe es zuvor probiert, aber kam mit der Notation des & nicht zurecht.

Einmal "&"
dann "&12"
dann &

find ich irgendwie "ungewohnt"

DANKE nochmals
hugolee