Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Wie Zeile in bestehendes Makro einfügen?
#11
Hallöchen,

kannst Du die Aufgabenstellung hinsichtlich der Markierung noch präzisieren? Es gäbe zwei Varianten. Zum einen immer die Woche mit dem ersten des Jahres die Farben setzen - da kann aber auch mal zum Jahresende die 52 und die 52 des Vorjahres und anschließen die 1 des Folgejahres farbig sein oder die markierten Wochen rollieren über die Jahre, dann kann auch mal die KW51 des Vorjahres die letzte und die KW03 die erste Farbige sein.
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#12
Hallo Andre,
schön, dass du dich an der Lösungsfindung beteiligst.
Ich will mal versuchen, die Problematik genauer zu beschreiben.
Begonnen wird im Jahr 2019. Am 1.01.2019 (A5) wird richtigerweise die Woche 1 in Klammer hervorgehoben. Weiter geht es richtig bei den Monaten Februar bis November.
Im Dezember wird dann richtig die Woche 49 und die Woche 1 (am 30.12.) hervorgehoben.
Wähle ich nun das Jahr 2020, klappt alles wie in 2019.
Im Dezember 2020 wird richtig am 01. die Woche 49 in Klammer hervorgehoben und auch richtig die Woche 53 am 28.12.2020
Wähle ich nun das Jahr 2021 wird am 01.01. auch richtig die Woche 53 in Klammer hervorgehoben.
Fälschlicherweise wird jetzt am 04.01.2021 die Woche 1 hervorgehoben. Richtig wäre - wegen dem 4 Wochen-Rhythmus - die Woche 4, dann die Woche 8 usw. hervorzuheben.
Der Wochenrhythmus sollte also über die Jahre hinweg immer beibehalten werden und die jeweilige Wochenzahl - mit und ohne Klammer - hervorgehoben werden.
Das Funktionierende Makro von Uwe sieht so aus:

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
 Application.ScreenUpdating = False 'Bildschirmaktualisierung abschalten.
   Dim obj_cell As Object
   Dim obj_wks As Object
   If Target.Column = 3 And Target.Row = 7 Then
     For Each obj_wks In ThisWorkbook.Worksheets
       Select Case obj_wks.Name
         Case "Jahr Eingabe", "Feiertage", "!"
         Case Else
           obj_wks.Unprotect
           With obj_wks.Range("A5:A35")
             .Font.ColorIndex = xlAutomatic
             .Font.Bold = False
             For Each obj_cell In .Cells
               If (0 & Replace(Replace(obj_cell.Value, "(", ""), ")", "")) Mod 4 = 1 Then
                 obj_cell.Font.ColorIndex = 50
                 obj_cell.Font.Bold = True
               End If
             Next
           End With
           obj_wks.Protect
       End Select
     Next
   End If
 Application.ScreenUpdating = True 'Bildschirmaktualisierung wieder einschalten.
End Sub

Ich würde mich freuen, wenn es hierfür eine Lösung gibt.

Gruß
ossi
Antworten Top
#13
Hallöchen,

ich hab hier mal in Tabellenform zwei Ansätze. Der Punkt hier ist, dass ich nicht über die KW gehe sondern auf Basis des Datums rechne, und das passt dann solange es Excel gibt Smile
Bei der einen Variante dividiere ich die "Datums-Zahl" durch 28 - (/*4 für 4 Wochen) und schaue nur, ob sich die Ganzzahl ändert - was sie alle 4 Wochen tut. Bei der anderen Variante würde ich von einem Startdatum eine entsprechende Anzahl Tage abziehen um irgendwo bei 0 rauszukommen Smile und schaue, ob bei der Division durch 28 der Rest 0 ist. Wenn das passt, könnte man es im VBA umsetzen. Kannst ja zum Test die Formeln und Daten weiter runter ziehen und auch ein anders  Startdatum nehmen . dann auch den Subtrahend anpassen - … Für die Formatierung kannst Du in einem Fall die 1 und in dem anderen Fall die 0 verwenden.  

Arbeitsblatt mit dem Namen 'Tabelle1'
ABCDEF
131.12.2018434651552,3214300
207.01.2019434721552,57143071
314.01.2019434791552,821430141
421.01.2019434861553,071431211
528.01.2019434931553,321430280
604.02.2019435001553,571430351
711.02.2019435071553,821430421
818.02.2019435141554,071431491
925.02.2019435211554,321430560
1004.03.2019435281554,571430631
1111.03.2019435351554,821430701
1218.03.2019435421555,071431771
1325.03.2019435491555,321430840
1401.04.2019435561555,571430911
1508.04.2019435631555,821430981

ZelleFormel
B1=A1
C1=B1/(4*7)
E1=B1-43465
F1=WENN(REST(E1;28);1;0)
B2=A2
C2=B2/(4*7)
D2=WENN(GANZZAHL(B1/(4*7))<>(GANZZAHL(B2/(4*7)));1;0)
E2=B2-43465
F2=WENN(REST(E2;28);1;0)
Verwendete Systemkomponenten: [Windows (32-bit) NT 10.00] MS Excel 2016
Diese Tabelle wurde mit Tab2Html (v2.6.2) erstellt. ©Gerd alias Bamberg
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#14
Hallo ossi,

so sollte es klappen:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim i As Long
Dim obj_cell As Object
Dim obj_wks As Object
If Target.Column = 3 And Target.Row = 7 Then
If Weekday(DateSerial(Worksheets("Jahr Eingabe").Range("C7").Value, 1, 1), 2) > 4 Then i = 1
For Each obj_wks In ThisWorkbook.Worksheets
Select Case obj_wks.Name
Case "Jahr Eingabe", "Feiertage", "!"
Case Else
obj_wks.Unprotect
With obj_wks.Range("A5:A35")
.Font.ColorIndex = xlAutomatic
.Font.Bold = False
For Each obj_cell In .Cells
If (--(0 & Replace(Replace(obj_cell.Value, "(", ""), ")", "")) + i) Mod 4 = 1 _
Or obj_cell.Value = "(1)" Or obj_cell.Value = "(53)" Then
obj_cell.Font.ColorIndex = 50
obj_cell.Font.Bold = True
End If
Next
End With
'obj_wks.Protect
End Select
Next
End If
End Sub
Gruß Uwe
Antworten Top
#15
Hallo Uwe,
ja, so klappt's. Aber es gibt noch ein Problem:
Im Jahr 2023 ist der 25.12. ein Montag und die Woche 52. Sie sollte eigentlich hervorgehoben sein. Stattdessen wird ## angezeigt. Ich kann mir nicht erklären, warum das so ist.

Dez

ABCDEFGHIJKLM
29##Mo    25 1. Weihnachtstag
30Di    26 2. Weihnachtstag
Formeln der Tabelle
ZelleFormel
A29=WENN(WOCHENTAG(B29)=2;dKW(B29);"")
B29=WENN(B28="";"";WENN(MONAT(B28+1)=MONAT($A$4);DATUM(gewJahr;MONAT($A$4);TAG(B28+1));""))
I29=WENN(ANZAHL(C29:D29)=2;(REST(D29-C29;1)>1/4)/48;0)+WENN(ANZAHL(G29:H29)=2;(REST(H29-G29;1)>1/4)/48; 0)
J29=WENN(ISTNV(INDEX($S$9:$T$37;VERGLEICH($B29;$S$9:$S$37;0);2));"";INDEX($S$9:$T$37;VERGLEICH($B29;$S$9:$S$37;0);2))
K29=WENN(ODER(C29="Krank";C29="Urlaub");1/3;WENN(UND(C29<>"";D29<>"";C29<=D29);D29-C29;0)+WENN(UND(E29<>"";F29<>"";E29<=F29);F29-E29;0)+WENN(UND(G29<>"";H29<>"";G29<=H29);H29-G29;0)-I29)
L29=K29*24
M29=K29*$P$7*24
A30=WENN(WOCHENTAG(B30)=2;dKW(B30);"")
B30=WENN(B29="";"";WENN(MONAT(B29+1)=MONAT($A$4);DATUM(gewJahr;MONAT($A$4);TAG(B29+1));""))
I30=WENN(ANZAHL(C30:D30)=2;(REST(D30-C30;1)>1/4)/48;0)+WENN(ANZAHL(G30:H30)=2;(REST(H30-G30;1)>1/4)/48; 0)
J30=WENN(ISTNV(INDEX($S$9:$T$37;VERGLEICH($B30;$S$9:$S$37;0);2));"";INDEX($S$9:$T$37;VERGLEICH($B30;$S$9:$S$37;0);2))
K30=WENN(ODER(C30="Krank";C30="Urlaub");1/3;WENN(UND(C30<>"";D30<>"";C30<=D30);D30-C30;0)+WENN(UND(E30<>"";F30<>"";E30<=F30);F30-E30;0)+WENN(UND(G30<>"";H30<>"";G30<=H30);H30-G30;0)-I30)
L30=K30*24
M30=K30*$P$7*24

Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4.8
Gruß
ossi

Hallo Andre,

danke für deinen Lösungsvorschlag. Der ist mir aber zu kompliziert und ich weiß nicht, wie man das umsetzt. Du kannst dir ja mal die Muster.xls im Thread anschauen.

Gruß
ossi
Antworten Top
#16
(02.09.2019, 00:05)ossi schrieb: Ich kann mir nicht erklären, warum das so ist.
Ich auch nicht. Aber das hat mit dem Makro nichts zu tun!
Aber dafür wird die erste Woche 2024 auch grün markiert Undecided
Ich glaube, das wird so nichts. Bei solcher fortlaufender Zählung muss doch irgendwie hinterlegt werden, wann die letzte 4. Woche war.

Gruß Uwe
Antworten Top
#17
Hallo Uwe,
es passiert ja nur am 1. Weihnachtsfeiertag (25.12.) wenn dieser ein Montag ist und gleichzeitig die 4. Woche wie in 2023.
Vielleicht könnte man im Dezemberblatt mit der bedingten Formatierung arbeiten (A5:A35). Hast du eine Idee?

Gruß
ossi
Antworten Top
#18
Moin Uwe,
Schau Dir mal meinen Ansatz an. Bin jetzt nur am Smartphone und kann erst heute Abend. Ich nehme so ein Prinzip mit einem Startdatum z. B. auch für einen Schichtkalender... Mein Startdatum ist schon seit Jahren das Gleiche :17:
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#19
Hallo ossi,

(02.09.2019, 01:38)ossi schrieb: Hallo Uwe,
es passiert ja nur am 1. Weihnachtsfeiertag (25.12.) wenn dieser ein Montag ist und gleichzeitig die 4. Woche wie in 2023.
Vielleicht könnte man im Dezemberblatt mit der bedingten Formatierung arbeiten (A5:A35). Hast du eine Idee?

Gruß
ossi

bei mir bzw. in Deiner "Beispieldatei" funktioniert es (die Bedingten Formatierungen habe ich entfernt): Die 52 beim 25.12. wird grün und es gibt auch keine ##.

Gruß Uwe
Antworten Top
#20
Hallo Uwe,


könntest du mal diese funktionierende Mappe hochladen?

Gruß
ossi
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste