09.01.2024, 10:13 (Dieser Beitrag wurde zuletzt bearbeitet: 09.01.2024, 10:14 von DarkG4m3r.
Bearbeitungsgrund: PS hinzugefügt
)
Guten Tag liebes Forum, vielleicht eine sehr spezielle Frage: ich habe einen Bauzeitenplan mit Excel erstellt. Dieser arbeitet mit einer Reihe an bedingten Formatierungen ("Gantt") um den Bauablauf darzustellen. Nun meine Frage: ist es irgendwie möglich, wenn mein Zeitbalken von L9 - Z9 geht, dann soll in AA9 die Bezeichnung von F9 stehen. An sich nicht schwer, nur wenn ich die bedingte Formatierung (also den Zeitbalken) verschiebe, soll die Bezeichnung automatisch mitverschoben werden. Im Anhang einige Bilder zum besseren Verständniss.
Zur Excel: Links bei Start und Dauer der Aktivität kann man Daten eintragen, die dann automatisch im Kalender farblich markiert werden. Zb. 14. August 2023 und 15 Tage, dann werden genau 15 Werktage eingezeichnet. Ändert man nun diesen Wert, verschiebt sich auch der Balken. Wenn man nun die unteren Aktivitäten mit den oberen verknüpft ist eine Änderung des Bauzeitplanes sehr schnell gemacht. Nur möchte ich nun gerne eben diese Aktivität neben dem Zeitbalken darstellen.
Vielen Dank und ich freue mich auf eure Antwort.
PS: die Excel ist noch nicht final, bitte verzeiht eventuelle Fehler oder schlechte Formatierungen.
09.01.2024, 12:31 (Dieser Beitrag wurde zuletzt bearbeitet: 09.01.2024, 12:31 von HKindler.)
Hi,
oder in L8 =$F8 (nach rechts und runter kopieren) und eine weitere bed.Form. mit der Formel =L$5<>$I8+1 und dem Zahlenformat ;;;
Beide Methoden, also die von mir und die von Steve, haben den Nachteil, dass der Text nicht in die Nachbarzellen ragt. Wenn das passieren soll, dann brauchst du folgende Routine im entsprechenden Tabellenblatt:
Code:
Private Sub Worksheet_Change(ByVal Target As Range) Dim Bereich As Range Dim Zelle As Range Dim Datum As Variant Dim DatZelle As Range Set Bereich = Intersect(Target, Range("H:H,J:J")) If Not Bereich Is Nothing Then For Each Zelle In Bereich If Zelle.row >= 8 Then Datum = Cells(Zelle.row, "I") For Each DatZelle In Range("L5:FT5") If DatZelle.Value > Datum Then Exit For End If Next DatZelle Intersect(Zelle.EntireRow, Range("L:FT")).ClearContents Cells(Zelle.row, DatZelle.Column).FormulaR1C1 = "=RC6" End If Next Zelle End If End Sub
Hallo hKinlder, danke für die Antwort! Deine option klappt zwar, nur wenn ich im nachhinein etwas veränder sprich einen datumsbalken verschiebe (zb die dauer von 10 auf 12 erhöhe), dann bleibt der Text wieder stehen und schiebt sich nicht mit. Wird wahrscheinlich am "clearcontents" liegen, da der Code ja den inhalt der zellen löscht.
09.01.2024, 13:39 (Dieser Beitrag wurde zuletzt bearbeitet: 09.01.2024, 13:40 von HKindler.)
Hi,
bei mir funktioniert es wenn etwas in Spalte H oder in Spalte J geändert wird. Dein Enddatum ist doch genau von den beiden Spalten abhängig - zumindest in deiner Beispieldatei.
Hast du die Routine denn in den Code-Bereich des entsprechenden Tabellenblattes kopiert?
Wenn es immer noch nicht funktioniert, dann lade deinen Versuch doch nochmals hier hoch.
PS: mit der Routine brauchst du die zuerst genannte Formel und die bed.Form. natürlich nicht!
Hallo, das funktioniert jetzt, danke! Ich hatte die Funktionen und alles auch noch drin, dann kam wohl Excel durcheinander. Folgende Probleme habe ich nun aber: wenn das Datum aus dem Bereich rausfällt dann bekomme ich eine Fehlermeldung, gibts da ne Lösung zu? Probier in der angehängten Datei beim Holzboden die gleiche Dauer einzugeben. Zudem wenn ich die Anzeigewoche verändere dann schiebts die Texte nicht mit. Wenn ich zb bei Anzeigewoche "2" eingebe, dann bleiben die Texte stehen. Wäre es vllt besser den Code auf das Enddatum umzuschreiben und nicht auf die Dauer?
09.01.2024, 14:09 (Dieser Beitrag wurde zuletzt bearbeitet: 09.01.2024, 14:28 von HKindler.)
Hi,
hatte ich nicht gesehen, dass sich das Datum in Zeile 5 ändern kann und von der "Anzeigewoche" abhängig ist. Dann müsste man halt nicht auf das Worksheet_Change()-Ereignis, sondern auf das Worksheet_Calculate()-Ereignis gehen. Das hat aber den Nachteil, dass mit jeder Berechnung die Routine abgearbeitet wird. So etwas sollte man vermeiden.
Bevor mir hier unnötig Mühe mache: Wofür brauchst du denn die Anzeigewoche? Mit dem Scrollbalken unten hast doch bereits den selben Effekt. Hi,
hab mir noch was anderes einfallen lassen (und auch gleich den Fehler mit dem zu großen Enddatum behoben).
Teste mal dies:
Code:
Private Sub Worksheet_Change(ByVal Target As Range) Dim Bereich As Range Dim Zelle As Range Dim Datum As Variant Dim DatZelle As Range If Target.Address = "$H$4" Then For Each Zelle In Intersect(Columns("J"), Me.UsedRange) Zelle.Formula = Zelle.Formula Next Zelle End If Set Bereich = Intersect(Target, Range("H:H,J:J")) If Not Bereich Is Nothing Then For Each Zelle In Bereich If Zelle.row >= 8 Then Datum = Cells(Zelle.row, "I") For Each DatZelle In Range("L5:FT5") If DatZelle.Value > Datum Then Exit For End If Next DatZelle Intersect(Zelle.EntireRow, Range("L:FT")).ClearContents If DatZelle Is Nothing Then Set DatZelle = Cells(Zelle.row, "FU") Cells(Zelle.row, DatZelle.Column).FormulaR1C1 = "=RC6" End If Next Zelle End If End Sub
Damit erhältst du auch gleich eine Ahnung, weshalb ich nicht auf das Calculate-Ereignis gehen würde...
09.01.2024, 15:59 (Dieser Beitrag wurde zuletzt bearbeitet: 09.01.2024, 15:59 von DarkG4m3r.)
Hallo! Danke für deine großen Mühen. Nun funktioniert alles wie es soll! Grandios!
Zitat:Bevor mir hier unnötig Mühe mache: Wofür brauchst du denn die Anzeigewoche? Mit dem Scrollbalken unten hast doch bereits den selben Effekt.
Das ist vor allem für den Druck. Wenn das Projekt schon weit vorangeschritten ist und es an den Innenausbau geht, dann interessiert es den Baumeister nicht mehr wann der Tischler/Holzboden kommt. Seine Arbeit ist ja schon getan. :) Und man kann zum Schluss immerwieder zurückscrollen falls jemand wissen will wann was gemacht wurde. Ich habe es damals so gelöst, vielleicht gibts ja eine bessere Lösung.
Nochmals vielen Lieben Dank!
PS: ich habs gemerkt, Excel rechnet nun ganz schön wenn ich um ein paar Wochen verschiebe. :D