Realisierung e) -->beim Speichern Farben abgleichen' kann folgendermassen aussehen:
Zunächst erst einmal der Makro StundenplanFarbenAktuallisieren(), der die eigentliche Arbeit ausführt.
Er schaut nach, welche Farbe die jeweilige Zelle im Master-Stundenplan und im Slave-Stundenplan hat. Stimmen beide überein, passiert nichts. Sind sie unterschiedlich, setzt er die Hintergrundfarbe der Zelle im Slave-Stundenplan gleich der Zelle des Master-Stundenplanes.
Die Zeilen- und Spaltenanzahl der Pläne muß gleich sein.
Der Bereich der Pläne wird durch die Konstanten im Makro beschrieben. Die müssen den Plänen entsprechend angepaßt werden.
Weiterhin ist es notwendig die Namen/Nummern der Tabellenblätter der Stundenpläne anzupassen, entweder die Blattnummern oder in Anführungszeichen die Blattnamen.
Wie bekommt man den Makro in die Arbeitsmappe?
a) Öffnen der Arbeitsmappe mit Excel
b) Mit ALT+F11 den VB-Editor öffnen
b1) Im Projet-Fenster->Project(Mappenname) selektieren
b2) rechte Maustaste -> Einfügen -> Modul (es öffnet sich ein Fenster
'Mappenname - Modul 1')
b3) den Inhalt des grauen Fensters (Makro1) meines Wintotal-Beitrages
markieren -> rechte Maustaste -> kopieren
b4) Fenster->Mappenname - Modul 1' aktivieren und das ganze dort
hineinkopieren (rechte Maustaste-> Einfügen)
b5) Mit Alt+Q VB-Editor schliessen
c) Excel-Datei speichern
Jetzt kann man mit Alt+F8(Makroauswahl) und Makro aufrufen, diesen ausprobieren.
Damit der Makro bei jeder Speicherung aufgerufen wird, ist noch eine Funktion Workbook_BeforeSave notwendig, die den Makro oben aufruft. Dazu geht man folgendermassen vor:
a) Öffnen der Arbeitsmappe mit Excel (wenn nicht bereits geöffnet)
b) Mit ALT+F11 den VB-Editor öffnen
b1) Im Projet-Fenster->Project(Mappenname)->'diese Arbeitsmappe' doppelklicken
(es öffnet sich ein Fenster->Mappenname - Diese Arbeitsmappe')
b2) den Inhalt des grauen Fensters (Makro2) meines Wintotal-Beitrages markieren -> rechte Maustaste -> kopieren
b3) Fenster->Mappenname - Diese Arbeitsmappe' aktivieren und das ganze dort hineinkopieren (rechte Maustaste-> Einfügen)
b4) Mit Alt+Q VB-Editor schliessen
c) Excel-Datei speichern
Beim Speichern ist der Makro nun schon ausgeführt worden.
Viel Spaß beim Ausprobieren
Matjes
Makro 1:
Code:
Option Explicit
Sub StundenplanFarbenAktuallisieren()
'Nummer oder Name Tabellenblätter (anzupassen)
Const c_Tab_Master = 1
Const c_Tab_Slave1 = 2
'Definition des 1. Tabellenblattes (Master) (anzupassen)
Const c_Plan1_1Zeile = 8
Const c_Plan1_1Spalte = 1
Const c_Plan1_letzteZeile = 16
Const c_Plan1_letzteSpalte = 7
'Definition des 2. Tabellenblattes (Slave1) (anzupassen)
Const c_Plan2_1Zeile = 8
Const c_Plan2_1Spalte = 2
'Definitionen die für alle Tabellenblätter gilt
Const c_Plan_AnzSpalten = c_Plan1_letzteSpalte - c_Plan1_1Spalte + 1
Const c_Plan_AnzZeilen = c_Plan1_letzteZeile - c_Plan1_1Zeile + 1
Dim z As Long, c As Long, anf_c As Long, anf_z As Long, b As Long
Dim ws_m As Worksheet, ws_s As Worksheet
Set ws_m = ThisWorkbook.Worksheets(c_Tab_Master)
Set ws_s = ThisWorkbook.Worksheets(c_Tab_Slave1)
anf_c = c_Plan2_1Spalte
anf_z = c_Plan2_1Zeile
->Master Tab mit Slave Tab vergleichen
For z = 0 To c_Plan_AnzZeilen - 1
For c = 0 To c_Plan_AnzSpalten - 1
If ws_m.Cells(c_Plan1_1Zeile + z, c_Plan1_1Spalte + c).Interior.ColorIndex <> _
ws_s.Cells(anf_z + z, anf_c + c).Interior.ColorIndex _
Then
ws_s.Cells(anf_z + z, anf_c + c).Interior.ColorIndex = _
ws_m.Cells(c_Plan1_1Zeile + z, c_Plan1_1Spalte + c).Interior.ColorIndex
End If
Next
Next
End Sub
Makro 2:
Code:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Call StundenplanFarbenAktuallisieren
End Sub