27.12.2023, 16:27 (Dieser Beitrag wurde zuletzt bearbeitet: 27.12.2023, 16:41 von Andyle.)
Hallo liebe Gemeinde
Ich habe eine Pivot-Tabelle mit Mitarbeiternamen (TB "Mitarbeiter" B5 + (+ = Eingaben nach unter)
Des weiternen habe ich ein TB "Dienstplan". Da stehen die Mitarbeiter als Zellenbezug aus "Mitarbeiter" in B9:B18 drin.
Nun mein Problem:
Die Mitarbeiteranzahl in TB "Mitarbeiter" lese ich mit =ANZAHL2(Tabelle240[Mitarbeiter]) aus.
Wenn ich jetzt im TB "Mitarbeiter" die Tabelle erweitere bzw. verkürze, soll sich der Mitarbeiterbereich im TB "Dienstplan" in der Zeilenanzahl anpassen. (Zeile einfügen/löschen) Alle Formeln/Bezüge müssen mit eingefügt werden!
hier mal eine Demo Datei wo diese Bedingung erfüllt ist. Bitte das Makro in einer Testdatei testen. Ich weiss nicht ob das löschen oder einfügen dazu führen kann, das Formeln ihren Bezug verlieren??
ActiveSheet.Name = "0" & Range("K3") + 1 & "." & Range("L3") ActiveSheet.Range("K3").Comment.Delete ActiveSheet.Range("K3").AddComment Text:="Es wurden bereits Monatsblätter angelegt!" & vbLf & "Bitte hier den Wert nicht ändern!" & vbLf & "Um weitere Monatsblätter zu erstellen, öffnen Sie das Monatsplatt mit dem letzten Monat." ActiveSheet.Range("K3").Comment.Shape.TextFrame.AutoSize = True Else
'Zeilen einfügen letztezeile = ActiveSheet.Cells(Rows.Count, 2).End(xlUp).Row 'Hier wir die letzte Zeile der Spalte B ermittelt letztezeile = letztezeile - 4 MsgBox letztezeile 'ActiveSheet.Range("W3") 'Anzahl der Mitarbeiter im TB "Mitarbeiter"
If letztezeile < ActiveSheet.Range("W3") + 8 Then '9
If ActiveSheet.Range("K3") = 12 Then ActiveSheet.Range("K3") = 1 ActiveSheet.Range("L3") = Range("L3") + 1 Else ActiveSheet.Range("K3") = Range("K3") + 1 End If
ActiveSheet.Range("C9:AG18").ClearContents
Cells.EntireColumn.Hidden = False 'Blende alle Spalten ein
'Spalten ausblenden If ActiveSheet.Range("H3") < 31 Then ActiveSheet.Columns("AG:AG").EntireColumn.Hidden = True End If If ActiveSheet.Range("H3") < 30 Then ActiveSheet.Columns("AF:AG").EntireColumn.Hidden = True End If If ActiveSheet.Range("H3") < 29 Then ActiveSheet.Columns("AE:AG").EntireColumn.Hidden = True End If 'Ende Spalten ausblenden
ActiveSheet.Name = "0" & Range("K3") + 1 & "." & Range("L3") ActiveSheet.Range("K3").Comment.Delete ActiveSheet.Range("K3").AddComment Text:="Es wurden bereits Monatsblätter angelegt!" & vbLf & "Bitte hier den Wert nicht ändern!" & vbLf & "Um weitere Monatsblätter zu erstellen, öffnen Sie das Monatsplatt mit dem letzten Monat." ActiveSheet.Range("K3").Comment.Shape.TextFrame.AutoSize = True
'Hier wir die letzte Zeile der Spalte B ermittelt letztezeile = ActiveSheet.Cells(Rows.Count, 2).End(xlUp).Row letztezeile = letztezeile - 4 ' MsgBox letztezeile ActiveSheet.Range("W3") 'Anzahl der Mitarbeiter im TB "Mitarbeiter"
If letztezeile < ActiveSheet.Range("W3") + 8 Then '9
'Hier wir die letzte Zeile der Spalte B (Bereich Mitarbeiter)im aktiven TB ermittelt letztezeile_neu = ActiveSheet.Cells(Rows.Count, 2).End(xlUp).Row - 4 'MsgBox letztezeile_neu
'Monat auf Dez prüfen und neues Jahr anfangen If ActiveSheet.Range("K3") = 12 Then ActiveSheet.Range("K3") = 1 ActiveSheet.Range("L3") = Range("L3") + 1 Else ActiveSheet.Range("K3") = Range("K3") + 1 End If
'Blende alle Spalten ein Cells.EntireColumn.Hidden = False
'Spalten ausblenden If ActiveSheet.Range("H3") < 31 Then ActiveSheet.Columns("AG:AG").EntireColumn.Hidden = True End If If ActiveSheet.Range("H3") < 30 Then ActiveSheet.Columns("AF:AG").EntireColumn.Hidden = True End If If ActiveSheet.Range("H3") < 29 Then ActiveSheet.Columns("AE:AG").EntireColumn.Hidden = True End If 'Ende Spalten ausblenden
(27.12.2023, 20:21)Andyle schrieb: So, jetzt habe ich es mit einer Schleife umgesetzt. (Anfängerglück!)
Soweit funzt es auch alles.
Was mir allerdings nicht logisch erscheint ist:
Wird der Code einmal ausgeführt, funzt alles super. Er erstellt das neue TB und trägt komplett alle Mitarbeiter aus TB "Mitarbeiter" ein.
der Code wird aus dem gerade erstellten TB wieder gestartet, dann schreibt er eventuell hinzugekommene Mitarbeiter darunter, setzt jetzt allerdings als letzte eine leere Zeile darunter, wodurch dann dass nachholen von weiteren Mitarbeitern nicht so richtig funzt.
ActiveSheet.Name = "0" & Range("K3") + 1 & "." & Range("L3") ActiveSheet.Range("K3").Comment.Delete ActiveSheet.Range("K3").AddComment Text:="Es wurden bereits Monatsblätter angelegt!" & vbLf & "Bitte hier den Wert nicht ändern!" & vbLf & "Um weitere Monatsblätter zu erstellen, öffnen Sie das Monatsplatt mit dem letzten Monat." ActiveSheet.Range("K3").Comment.Shape.TextFrame.AutoSize = True
'Hier wir die letzte Zeile der Spalte B ermittelt letztezeile = ActiveSheet.Cells(Rows.Count, 2).End(xlUp).Row letztezeile = letztezeile - 4
'Einfügen
If letztezeile < ActiveSheet.Range("W3") + 8 Then
'-------------------------------- Dim r As Long
bis = ActiveSheet.Range("W3") + 6
For r = 9 To bis If letztezeile < ActiveSheet.Range("W3") + 8 Then letztezeile = ActiveSheet.Cells(Rows.Count, 2).End(xlUp).Row letztezeile = letztezeile - 4 'Zeile einfügen ActiveSheet.Range("B" & letztezeile).EntireRow.Insert
'Hier wir die letzte Zeile der Spalte B (Bereich Mitarbeiter)im aktiven TB ermittelt letztezeile_neu = ActiveSheet.Cells(Rows.Count, 2).End(xlUp).Row - 4
With ActiveSheet .Rows(lngRowSource).Cut .Rows(lngRowTarget).Insert Shift:=xlShiftDown End With
'Text aus TB "Mitarbeiter" holen ActiveSheet.Range("B" & letztezeile_neu) = Worksheets("Mitarbeiter").Range("B" & letztezeile_neu - 1).Value End If Next r '--------------------------------
'Monat auf Dez prüfen und neues Jahr anfangen If ActiveSheet.Range("K3") = 12 Then ActiveSheet.Range("K3") = 1 ActiveSheet.Range("L3") = Range("L3") + 1 Else ActiveSheet.Range("K3") = Range("K3") + 1 End If
'Blende alle Spalten ein Cells.EntireColumn.Hidden = False
'Spalten ausblenden If ActiveSheet.Range("H3") < 31 Then ActiveSheet.Columns("AG:AG").EntireColumn.Hidden = True End If If ActiveSheet.Range("H3") < 30 Then ActiveSheet.Columns("AF:AG").EntireColumn.Hidden = True End If If ActiveSheet.Range("H3") < 29 Then ActiveSheet.Columns("AE:AG").EntireColumn.Hidden = True End If 'Ende Spalten ausblenden