PDA

Vollständige Version anzeigen : Bereich definieren


Pluto1
19.07.2012, 13:18
Hoi Zäme

Möchte gerne via VBA einen Kalender einfärben.
Es ist ein dynamischer Kalender der in den Zeilen B5-xxx(bis 30.6...) die Wochentagbezeichnungen stehen hat, also Mo, Di, Mi etc.
Nun möchte ich jeweils Sa + So gelb einfärben. Die Einfärbung darf aber nur ab Zeile 5 bis Zeil 42 und dann wieder ab Zeile 52 bis Zeil 88 eingefärbt werden.
Natürlich kann man das mit einer bedingten Formatierung lösen, nur habe ich dann das problem, dass wenn ich die 3. Bedinung, welche lautet jede 3 Zeile einen Rahmenstrich unten ausführen, oft die Bedinung nicht richtig funktioniert.
Mir wäre es lieber die sache mit VBA zu lösen. Ich haben nämlich noch etliche weitere Einfärbungen die gemacht werden müssen.

Mein Problem ist die Bereiche Zeile 5:42 und 52:88 zu definieren da ich ja nie weiss, welches die letzte Spalte sein wird.

Meine Variante:

Sub Wochenendedeklaration()
Dim Spalte as Integer
Dim SpalteMax as Integer

With Tabelle1
SpalteMax = .UsedRange.Columns.Count

For Spalte = 2 to SpalteMax

If Weekday(.Cells(5, Spalte).Value) = 1 Or Weekday(.Cells(5, Spalte).Value) = 7 then
.Columns(Spalte).Interior.ColorIndex = 6

Else
.Columns(Spalte).Interior.ColorIndex = xlColorIndexNone

End If

Next Spalte

End With
End Sub

Das Makro funktioniert auch gut, nur leider färbt es mir die ganzen Spalten, von der ersten bis zur letzten Zeile ein.
Wie definierie ich in meinem Makro die Bereiche und wie/wo platziere ich den Code?
Kann mir jemand helfen?
Gruss Pluto1

chris-kaiser
19.07.2012, 13:52
hi

With Tabelle1
Union(.Range(.Cells(5, spalte), .Cells(42, spalte)), .Range(.Cells(52, spalte), .Cells(88, spalte))).Interior.ColorIndex = 6
End With

Pluto1
19.07.2012, 14:35
Danke für die prompte Antwort, nur wo kommt der Code hin?
Wenn ich deinen Code nehme wird leider nicht nach den Wochenenden gesucht sondern färbt mir einfach den Bereich gelb ein.
Bitte um Hilfe
Danke Pluto1

chris-kaiser
19.07.2012, 14:40
Hi

öhmm, wo blos ;) statt
.Columns(Spalte).Interior.ColorIndex = 6

diese Zeile

Union(.Range(.Cells(5, spalte), .Cells(42, spalte)), .Range(.Cells(52, spalte), .Cells(88, spalte))).Interior.ColorIndex = 6


ich dachte du willst nicht die ganze Spalte färben?

Pluto1
19.07.2012, 15:08
Sorry habs gefunden wie - ganz zerzlichen Dank!!!!

Pluto1
19.07.2012, 15:10
Sub Wochenendedeklaration()
Dim Spalte As Integer
Dim SpalteMax As Integer

With Tabelle1
SpalteMax = .UsedRange.Columns.Count

For Spalte = 2 To SpalteMax

If Weekday(.Cells(5, Spalte).Value) = 1 Or Weekday(.Cells(5, Spalte).Value) = 7 Then
'.Columns(Spalte).Interior.ColorIndex = 6
Union(.Range(.Cells(5, Spalte), .Cells(42, Spalte)), .Range(.Cells(52, Spalte), .Cells(88, Spalte))).Interior.ColorIndex = 6

Else
.Columns(Spalte).Interior.ColorIndex = xlColorIndexNone

End If

Next Spalte

End With

End Sub


so erhalte ich was ich eigentlich wollte, es färbt mir nur die Spalten mit der Bezeichnung Samstag und Sonntag

Pluto1
20.07.2012, 13:45
Hab leider noch einen kleinen Fehler im Code den ich nicht finde.

Wie gesagt, es ist ein dynamischer Kalender. In der Zelle A1 befindet sich das Jahr. Wenn ich die Jahreszahl wechsle werden die Tage entsprechend angepasst. Bei 2012 funktioniert mein Makro bei 2013 nicht, bei 2020 funktioniert es. Für mich nicht nachvollziehbar.

Dann möchte ich noch, dass das Makro mit dem Einfärben der Zelle automatisch durchläuft, wenn ich in A1 die Jahreszahl ändere.
Ich lade mal die Datei hoch.
Wäre nett wenn mir jemand helfen könnte.
Gruss Pluto1

EarlFred
20.07.2012, 13:56
Hallo Pluto,

was meinst Du mit "funktioniert nicht"?
In 2012, 2016, 2020 usw. (Schaltjahr!) stehen die Wochentage des ersten und 2. Halbjahres genau untereinander - daher passt Deine "Logik": Prüfe das Datum im ersten Halbjahr und wende die Färbung ohne gesonderte Prüfung auch in der gleichen Spalte des 2. Halbjahres an. Ist aber grad mal kein Schaltjahr (soll hin und wieder vorkommen ;)), verschieben sich die Wochentage im 2. Halbjahr und Deine Logik kann garnicht mehr passen: 1. und 2. Halbjahr wären also separat zu prüfen.

Ist es das, was "nicht funktioniert"?

Dann möchte ich noch, dass das Makro mit dem Einfärben der Zelle automatisch durchläuft, wenn ich in A1 die Jahreszahl ändere
Bring erstmal das Makro ins Reine - dann ist es eine Kleinigkeit, dies durch das Change-Ereignis automatisch starten zu lassen.

Zudem: Eine derart simple Prüfung würde ich definitiv makrofrei halten - die bedingte Formatierung erledigt das viel einfacher!

Grüße
EarlFred

Pluto1
25.07.2012, 19:48
Du hast recht, genau das ist mein Problem. Ich versuch schon seit Tagen mein Makro abzuändern aber ich krieg es nicht hin. Meine Kenntnisse sind ja auch = 0. Das Makro habe ich mir anhand von vielen verschiedenen Forumseinträge zusammengesetzt.
Ich wäre dir wirklich dankbar für deine Hilfe,wie muss ich mein Makro abändern`?

Danke und Gruss Pluto1

Peter9
25.07.2012, 22:52
Hallo Pluto1,

das einfachste ist zwei Schleifen

Schau mal hier als Beispiel da das Zweite Halbjahr nicht immer mit dem selben Tag beginnt

Option Explicit
Sub Wochenenddeklaration()
Dim Spalte As Integer
Dim SpalteMax As Integer

With Tabelle1
SpalteMax = Cells(5, .Columns.Count).End(xlToLeft).Column '- 1
' Schleife fuers erste Halbjahr
For Spalte = 2 To SpalteMax

If Format(Cells(5, Spalte), "ddd") = "Sa" Or Format(Cells(5, Spalte), "ddd") = "So" Then
Range(.Cells(5, Spalte), .Cells(42, Spalte)).Interior.ColorIndex = 6
Else
Range(.Cells(5, Spalte), .Cells(42, Spalte)).Interior.ColorIndex = xlColorIndexNone
End If
Next Spalte

SpalteMax = Cells(52, .Columns.Count).End(xlToLeft).Column
' Schleife fuers zweite Halbjahr
For Spalte = 2 To SpalteMax

If Format(Cells(52, Spalte), "ddd") = "Sa" Or Format(Cells(52, Spalte), "ddd") = "So" Then
Range(.Cells(52, Spalte), .Cells(88, Spalte)).Interior.ColorIndex = 6
Else
Range(.Cells(52, Spalte), .Cells(88, Spalte)).Interior.ColorIndex = xlColorIndexNone
End If
Next Spalte
End With
End Sub

Pluto1
26.07.2012, 09:00
Hallo Peter9

Ganz herzlichen Dank!!! nun funktioniert es so wie ich es brauche.
Die Datei muss nämlich auf Excel 2003 laufen und ich hab noch div. andere Formatierungen vorzunehmen, unter anderem muss noch jede 3 Zeile einen Unterschrich erhalten. Als ich die 3 Bedingungen, also Sa+So belb einfärben und jede 3. Zeile einen Unterstrich als bedingte Formatierung hinterlegte funktionierte das in Excel 2003 nich, Sa+So waren ohne Rahmenstrich. Ich konnte die Reihenfolge hin und her schieben wie ich wollte, nie das gewünschte Resultat. Aus diesem Grunde habe ich dann gedacht, dass ich das Problem wohl mit VBA lösen muss.
Ganz lieben herzlichen Dank für deine Hilfe!!!:)
Gruss Pluto1