Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1304to1308
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

automatische Zeilenmarkierung

automatische Zeilenmarkierung
26.03.2013 21:40:17
Steffen
Hallo zusammen,
ich habe hier eine Datei hochgeladen, für die ich Eure Unterstützung brauche.
https://www.herber.de/bbs/user/84555.xls
Ich habe eine Jahresübersicht mit 52 Kalenderwochen.
Vorne habe ich je eine Spalte mit Projektbeginn und eine mit Ende. Ich möchte nun, dass automatisch die entsprechenden Kalenderwochen in der jeweiligen Zeile markiert werden z.B. in Rot, die in dem Zeitraum Anfang bis Ende liegen.
Würde mich sehr freuen wenn mir jemand weiterhelfen kann.
Vielen Dank und noch einen schönen Abend!
Grüße
Steffen

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: automatische Zeilenmarkierung
26.03.2013 22:04:45
Rainer
Hallo Steffen,
füge den folgenden Code in den VBA-Editor ein und starte dann das Makro.
Man kann natürlich die Zeile For projekt = 5 to 7 noch variabel gestalten. So wie ich es auf die Schnelle gemacht habe werden wirklich die die drei zeilen 5, 6 und 7 berücksichtigt.
Ggf könnte man das Makro dann auch aotmatisch laufen lassen, sobald in Spalte A oder B eine Änderung vorgenommen wird.

Option Explicit
Sub markieren()
Dim week_start As Byte
Dim week_end As Byte
Dim markierung As Byte
Dim projekt As Integer
For projekt = 5 To 7 'in den zeilen 5 bis 7 stehen deine projekte, ggf anpassen
week_start = dt_Kalenderwoche(Range("a" & projekt).Value)
week_end = dt_Kalenderwoche(Range("b" & projekt).Value)
For markierung = week_start To week_end
Cells(projekt, markierung + 3).Interior.Color = vbRed
Next markierung
Next projekt
End Sub
Function dt_Kalenderwoche(dat As Date) As Integer
Dim a As Integer
a = Int((dat - DateSerial(Year(dat), 1, 1) + _
((Weekday(DateSerial(Year(dat), 1, 1)) + 1) Mod 7) - 3) / 7) + 1
If a = 0 Then
a = dt_Kalenderwoche(DateSerial(Year(dat) - 1, 12, 31))
ElseIf a = 53 And (Weekday(DateSerial(Year(dat), 12, 31)) - 1) Mod 7 
Hoffe das hilft,
viele Grüße,
Rainer

Anzeige
AW: automatische Zeilenmarkierung
27.03.2013 07:44:29
Steffen
Hallo Rainer,
vielen Dank für deine schnelle Hilfe!
Es funktioniert =)
Kannst Du mir bitte noch verraten, wie ich das hinbekomme, dass automatisch bei jeder Änderung des Datums die Markierung auch angepasst wird.
Und noch eine kleine Bitte.
Ist das möglich, dass immer die Spalte mit der aktuellen Kalenderwoche, gelb eingefärbt wird?!
Vielen Dank und Grüße
Steffen

AW: automatische Zeilenmarkierung
27.03.2013 08:10:31
Rainer
Guten Morgen,
damit das Makro bei jeder Änderung durchgeführt wird machst Du:

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
Call markieren
End Sub
Für die Einfärbung der aktuellen Spalte würde ich noch folgende Code einbauen:

Private Sub Workbook_Open()
Call aktuelle_kw_färben
End Sub
Function aktuelle_kw_färben()
Dim datum As Date
Dim aktuelle_kw As Byte
datum = Now()
aktuelle_kw = dt_Kalenderwoche(datum)
Range("A:BC").Interior.Color = vbWhite
Call markieren
Columns(1 + aktuelle_kw).Interior.Color = vbYellow
End Function
Ich hab hier allerdings noch einen Bug drin, für den ich gerade keine Zeit mehr habe :-) Müsstest Du mal selbst schauen. Die Frage ist nämlich, was zuerst passieren soll. Soll die Spalte gelb sein, oder soll sie rot sein, wenn ein Projekt in der aktuellen Woche ist. Das eine überschreibt das andere :-)
Wenn sich nun an den Datumsfeldern was ändert oder so, ist das glaube ich noch nicht ganz sauber gelöst.
Ich denke man sollte es so machen:
1. mal alle Spalten weiß einfärben
2. die Projekte markieren
3. die aktuelle Woche markieren
Und das muss dann vielleicht bei jeder Änderung aufgerufen werden. Erscheint mir gerade der beste Weg, hört sich aber für den Effekt auch reichlich kompliziert an.
Vielleicht hat da noch jemand ne bessere Lösung?
Viele Grüße,
Rainer

Anzeige
AW: automatische Zeilenmarkierung
27.03.2013 13:21:53
Steffen
Hallo zusammen,
ich habe jetzt noch einen Bug bei der Zeilenmarkierung festgestellt. Wenn ich z.B. das Projektende vom 01.11.2013 auf 01.05.2013 verkürze, bleiben die Zellen weiterhin rot. (Bei einer Verlängerung des Zeitraums funktioniert es)
Kann man das korrigieren, dass das auch automatisch wieder angepasst wird?!
ich habe leider keine so große Ahnung von VBA, deswegen bin ich auf Eure Hilfe angewiesen!
Vielen Dank und einen schönen Nachmittag!

AW: automatische Zeilenmarkierung
27.03.2013 14:13:04
Rainer
Hallo Steffen,
pass einfach die sub an, die bei jeder Änderung aufgerufen wird:

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
Range("d3:bc12").Interior.Color = vbWhite
Call markieren
Call aktuelle_kw_färben
End Sub
dadurch wird nun bei jeder änderung erstmal alles im bereich d3:bc12 weiß gefärbt, dann werden die markierungen neu gesetzt, dann wird die wochennummer eingefärbt.
vg,
Rainer

Anzeige
AW: automatische Zeilenmarkierung
31.03.2013 16:45:39
Steffen
Hallo Rainer,
vielen Dank erstmal für Deine Rückmeldung!
einen Bug habe ich noch gefunden... Die aktuelle KW färbt er nicht richtig ein. Jetzt z.B. 11 obwohl wir in der 13 sind..
Ist es möglich, dass er die aktuelle KW nicht bis ganz nach unten färbt, sondern, dass ich festlege bis wohin. Z.B. Zeile 81
Und angenommen, ich füge jetzt vorne noch 2 Spalten ein. Wie stelle ich da sicher, dass dann immer noch die richtige KW eingefärbt wird?!
ich hatte schonmal eine Datei mit aktueller KW einfärben. Damals hatte ich folgendes Script verwendet.
Nur das funktioniert jetzt nicht, da das alles überschrieben wird.
 Private Sub Workbook_Open()
MakeWhite
MakeGrey
DINKw (Date)
End Sub
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Application.EnableEvents = False
Sh.Range("B4").Value = Date
Application.EnableEvents = True
End Sub
Function MakeWhite()
For i = 8 To 60
Dim val As Integer
val = i
Range(ColLtr(val) & 7).Select
With Selection.Interior
.ColorIndex = 0
.Pattern = xlSolid
End With
Next i
End Function
Function MakeGrey()
Range("I8:BH71").Interior.ColorIndex = 15
End Function
Function DINKw(Datum As Date) As Integer
Dim lngT As Long
Dim KW As Integer
lngT = DateSerial(Year(Datum + (8 - Weekday(Datum)) Mod 7 - 3), 1, 1)
KW = ((Datum - lngT - 3 + (Weekday(lngT) + 1) Mod 7)) \ 7 + 1
For i = 7 To 71
Range(ColLtr(KW + 8) & i).Select
With Selection.Interior
.ColorIndex = 6
.Pattern = xlSolid
End With
Next i
End Function
Function ColLtr(iCol As Integer) As String
If iCol > 0 And iCol 

Vielen Dank und noch schöne Ostern!

Anzeige
AW: automatische Zeilenmarkierung
01.04.2013 16:25:16
Rainer
Hi Steffen,
richtig, da war noch ein Fehler bei der KW, sorry.
Tausche die Zeile

Columns(1 + aktuelle_kw).Interior.Color = vbYellow

durch diese hier:

Range(Cells(2, 3 + aktuelle_kw), Cells(81, 3 + aktuelle_kw)).Interior.Color = vbYellow

Dadurch wird der Bug behoben und zusätzlich wird nur bis Zeile 81 gefärbt.
In der Range-Funktion steht nun sinngemäß drin: Markiere den Bereich von Zeile 2 bis 81 in gelb, und zwar für die xte Spalte, wobei x = 3 (A,B und C) plus Kalenderwoche ist. In der aktuellen Kalenderwoche würde also 3 + 14 = 17te Spalte rauskommen, also Spalte Q.
Wenn Du davor noch Spalten einfügst, musst du entsprechend die Zahl 3 erhöhen.
Alles klar?
VG,
Rainer

Anzeige
AW: automatische Zeilenmarkierung
01.04.2013 18:51:02
Steffen
Hallo Rainer,
vielen Dank klappt wunderbar!!
For projekt = 5 To 7 'in den zeilen 5 bis 7 stehen deine projekte, ggf anpassen
Eine letzte Frage habe ich noch, dann lasse ich dich in Ruhe ;-)
In dem obigen Code, werden die Zeilen 5 bis 7 angesprochen.
Wie muss ich das coden, dass ich z.B. sage Zeile 5, 6, 8, 10 und 13..
Vielen Dank und einen schönen Abend!
Steffen

AW: automatische Zeilenmarkierung
01.04.2013 19:03:46
Rainer
Hi Steffen,
freut mich, wenns nun klappt.
das ist eine For-Schleife, mit der Du in Schritten die Varible "projekt" nach oben zählen kannst.
For projekt = 5 to 7 heißt also für Projekt 5 bis 7 (also 5,6 und 7).
Du könntest es noch als
for projekt = 5 to 13 step 2
schreiben, dann hättest du als ergebnis 5,7,9,11,13
Wieso Dein Beispiel sinnvoll sein sollte erschließt sich mir nicht, aber wenn Du es genau so haben willst würde ich es so machen:

For projekt = 5 To 13 'in den zeilen stehen die projekte, ggf anpassen
If projekt = 5 Or projekt = 6 Or projekt = 8 Or projekt = 10 Or projekt = 13 Then
' dann der bisherige code
End If
Next projekt
Sinnvoller wäre es aber in meinen Augen nicht bestimmte Zeilen zu definieren, die da mit eingeschlossen sein sollen, sondern eher an einem Kriterium festzumachen, ob das Projekt mit eingefärbt werden soll oder nicht.
Zum Beispiel in dem Du in die Spalte nach dem Enddatum (bei mir C) ein ja oder nein rein schreibst
Und dann entsprechend im Code

if cells(projekt,3).Value = "ja" then
' ...und dann weiter wie oben
Rein interessehalber: was hat es denn für einen Sinn, nur manche Projekte mit reinzunehmen?
LG,
Rainer

Anzeige
AW: automatische Zeilenmarkierung
01.04.2013 19:15:46
Steffen
Guten Abend Rainer,
Hintergrund warum ich das haben möchte, vielleicht gibts da ja auch noch eine ganz andere Lösung..
Ich möchte Überschriften über manche Projekte definieren und die mit einem Überbegriff zusammenfassen. Dann benötige ich in der Zeile ja keine Markierung, da es diese Zeile nicht betrifft, weil es nur eine Überschrift ist.
Und dann ist es so, dass wenn ich bei Projektbeginn und Ende kein Datum eingetragen habe, automatisch die letzte KW (52) rot eingefärbt wird. Insofern man das irgendwie unterbinden kann, brauche ich auch nicht separate Zeilen ausnehmen.
Hoffe das war jetzt verständlich ;-)
Also falls du da eine bessere Idee hast, bin ich gerne offen =)
Liebe Dank und schöne Grüße
Steffen

Anzeige
AW: automatische Zeilenmarkierung
01.04.2013 19:29:48
Rainer
dann würde ich diese if-abfrage mit einbauen (an die gleiche stelle wie in meiner letzten antwort erwähnt)

If IsDate(Cells(projekt, 1)) And IsDate(Cells(projekt, 2)) Then
'nur wenn startdatum und enddatum ein datum ist
alles klar?
LG,
Rainer

AW: automatische Zeilenmarkierung
01.04.2013 19:46:20
Steffen
Hallo Rainer,
du bist der BESTE!
Funktioniert einwandfrei!!
Lieben Dank für Deine excellente Hilfe! Das ist nicht selbstverständlich =)
Grüße
Steffen

AW: automatische Zeilenmarkierung
01.04.2013 19:52:16
Rainer
Hi Steffen und Danke für die Blumen.
freut mich wenns klappt :-)
ich hab übrigens gerade noch ne kleine Erweiterung eingebaut (ich nutze das ding nämlich jetzt auch für meine Projekte :-) )
Die Zeile
Cells(projekt, markierung + 3).Interior.Color = vbRed
habe ich wie folgt geändert:

Cells(projekt, markierung + 3).Interior.Color = Cells(projekt, 1).Interior.Color
Dadurch wird nicht automatisch rot genommen, sondern die Farbe, mit der das Startdatum eingefärbt ist. Dadurch kann man zB für verschiedene Mitarbeiter verschiedene Farben nehmen.
LG und schönen Abend,
Rainer
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige