excel xp - format von zellen übergeben

  • #1
X

xeen

Bekanntes Mitglied
Themenersteller
Dabei seit
28.11.2001
Beiträge
283
Reaktionspunkte
0
für meine excel tabellen benötige ich für mehrere Tabellen sowie Zellen den gleichen Inhalt. Das funktioniert soweit auch ganz gut bloß wäre es nun auch sehr praktisch wenn ich bestimmte Formatierungen übernehmen lassen kann. Also das bei Änderung der Schriftfarbe in der 1. Tabelle sich alle weiteren danach richtigen, aber die Größe Ausrichtung etc der Zelle und Schrift soll sich nicht ändern.
Gibt es da eine komfortable Lösung oder muss ich alles von hand ergänzen?
xeen
 
  • #2
Hi xeen,

prinzipell kann man alles mit Makros lösen.

Wie ist den genau der Zusammenhang zwischen der geänderten Zelle und den anderen. Ein Beispiel wäre hilfreich.

Gruß Matjes :)
 
  • #3
ist ne excel tabelle für meinen stundenplan, eienn großen fürs Zimmer, nen kleienr fürs mäppchen usw. Zur besseren Übersicht markiere ich verschiedene Fächer mit der gleichen Farbe.
Aber jedes mal den Stundenplan 3x zu ändern ist nervig. Den Text übernimmt Excel ja schon bloß habe ich für die Farben noch keine gute öglichkeit gefunden. Bei Bedarf kann ich die Tabelle hochladen.
 
  • #4
Wenn es nur um die Farben geht, kannst du das doch mit der bedingten Formatierung lösen, oder reicht dir das nicht???
 
  • #5
@trigger4711:

Das mit der bedingten Formatierung reicht leider nur für 3 Farben, da man soweit mir bekannt ist nur 3 Bedingung bzw. Farbformatierungen formulieren kann.
Außerdem ist die bedingte Formatierung für jedes der 3 Blätter zu formulieren/zu ändern. :(


@xeen:

schick mir mal die Tabelle per mail - bitte im Excel97-Format. Ich bau dir dann den Makro ein.

Wenn ich das richtig verstanden habe, ist die 1.Tabelle der Master. Also wenn in der 1.Tabelle eine Farbe geändert wird, soll sie auch in den anderen Tabellen geändert werden. Änderungen werden nur auf der 1.Tabelle vollzogen.

Da das Ändern der Farbe kein Ereignis in Excel auslöst, stellt sich die Frage, bei welchem Ereignis die Farben in die zweite und dritte Tabelle übernommen werden sollen. Folgende Möglichkeiten gäbe es:

a) Öffnen der Mappe
b) Anklicken des 2. und 3. Blattes
c) Alt+F8(Makroauswahl) und einen Makro aufrufen
d) Einen Button auf dem ersten Blatt um den Makro auszulösen
e) Speichern der Mappe

Da die Farben dauerhaft gespeichert werden sollen würde ich e) empfehlen. Was meinst Du ?

Gruß Matjes :)
 
  • #6
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
 
  • #7
Das mit der bedingten Formatierung reicht leider nur für 3 Farben, da man soweit mir bekannt ist nur 3 Bedingung bzw. Farbformatierungen formulieren kann.

Das ist mir ja jetzt erst aufgefallen. Was für eine traurige und unnötige Beschränkung.


Außerdem ist die bedingte Formatierung für jedes der 3 Blätter zu formulieren/zu ändern.

Da habe ich mal wieder nicht richtig gelsen. Sorry :-[
 
  • #8
Mir ist noch was durch die Lappen gegangen :mad:

Der Makro ist jetzt für 1 Master-Blatt und ein Slave-Blatt ausgelegt. Xeen's Stundenplan hat nur 2 Blätter.

Man kann den Makro erweitern, indem man die Definitionen für weitere Slave-Tabellen hinzufügt und die Vergleichs-Schleife auch mit diesen Parametern aufruft.

Gruß Matjes :)
 
  • #9
für den Teil des Aktualisierens habe ich noch BeforePrint und SheetActivate (Vorm Drucken und vorm anklicken der anderen Tabellen) hinzugefügt sodass man nicht immer erst speichern muss bevor man die Änderungen sehen will.
Das ergibt dann das Folgende Makro 2 anstelle von Matjhes (übrigens vielen Dank für die Hilfe, das Makro funzt super! Aber eine Frage habe ich noch: gibt es eine Variable für die Tabellenrahmen (wo und welche Art)? Ich brächte nur die Variable, den Rest kann ich selbst erledigen :)):

Code:
Private Sub Workbook_BeforePrint(Cancel As Boolean)
  Call StundenplanFarbenAktuallisieren
End Sub

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
  Call StundenplanFarbenAktuallisieren
End Sub

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Call StundenplanFarbenAktuallisieren
End Sub
xeen
 
  • #10
Hi xeen,

für die verschiedenen Umrandungen gibt es folgenden Satz:
Code:
   ->Grid
   ->Bereich definieren, für den Gitternetzlinien gesetzt werden sollen
    Set r = ws_DB.Range(Cells(anf_zeile, anf_spalte), Cells(end_zeile, endspalte))
   ->Diagonalen von links oben nach rechts unten
    r.Borders(xlDiagonalDown).LineStyle = xlNone->Diagonalen von links oben nach rechts unten
   ->Diagonalen von rechts oben nach links unten
    r.Borders(xlDiagonalUp).LineStyle = xlNone
   ->äußerer Rahmen links
    With r.Borders(xlEdgeLeft)
      .LineStyle = xlContinuous:  .Weight = xlThin:   .ColorIndex = xlAutomatic
    End With
   ->äußerer Rahmen oben
    With r.Borders(xlEdgeTop)
      .LineStyle = xlContinuous:   .Weight = xlThin:  .ColorIndex = xlAutomatic
    End With
   ->äußerer Rahmen unten
    With r.Borders(xlEdgeBottom)
      .LineStyle = xlContinuous:   .Weight = xlThin:  .ColorIndex = xlAutomatic
    End With
   ->äußerer Rahmen rechts
    With r.Borders(xlEdgeRight)
      .LineStyle = xlContinuous:  .Weight = xlThin:   .ColorIndex = xlAutomatic
    End With
   ->innere Rahmen senkrecht
    With r.Borders(xlInsideVertical)
      .LineStyle = xlContinuous:  .Weight = xlThin:  .ColorIndex = xlAutomatic
    End With
   ->innere Rahmen waagerecht
    With r.Borders(xlInsideHorizontal)
      .LineStyle = xlContinuous:  .Weight = xlThin:  .ColorIndex = xlAutomatic
    End With

Wenn Du im VB-Editor in einem Modul das Wort Borders schreibst, es dann mit der Maus selektierst und F1 drückst, geht die Hilfe zu diesem Thema auf.

Gruß Matjes :)

ps: der Makro 1 wurde noch für die Text-Farbe erweitert.

Code:
  ....
'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
      If ws_m.Cells(c_Plan1_1Zeile + z, c_Plan1_1Spalte + c).Font.ColorIndex <> _
         ws_s.Cells(anf_z + z, anf_c + c).Font.ColorIndex _
         Then
         ws_s.Cells(anf_z + z, anf_c + c).Font.ColorIndex = _
         ws_m.Cells(c_Plan1_1Zeile + z, c_Plan1_1Spalte + c).Font.ColorIndex
      End If
    Next
  Next
....
 
  • #11
lala... doch wohl ein bissichen komplizierter als ich gedacht habe :-[ Ist halt dumm das da alles so gleich aussieht.. in php ist das einfacher... ich würde noch ein letztes mal um deine Hilfe bitten Matjes. Also Slave übernimmt Master... Ich hab zwar versucht es einzubauen, aber mehr oder weniger erfolgreich.
 
Thema:

excel xp - format von zellen übergeben

ANGEBOTE & SPONSOREN

Statistik des Forums

Themen
113.836
Beiträge
707.957
Mitglieder
51.488
Neuestes Mitglied
elkhse
Oben