Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1824to1828
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

Hinweis bei späterer Terminänderung

Hinweis bei späterer Terminänderung
11.04.2021 12:26:21
Robert
Hallo, ich benötige Hilfe bei der Umsetzung folgender VBA Anforderung:
Problem:
Im Blatt "Stammdaten" werden Termine eingetragen und im Blatt "Terminübersicht" werden diese über ein Dropdownfeld ausgewählt. Soweit so gut. Nun kommt es vor das später Anpassungen an den Terminen im Blatt "Stammdaten" erfolgen. Jedoch werden diese Änderungen nicht automatisch bei den zuvor ausgewählten Terminen im Blatt "Terminübersicht" übernommen bzw. aktualisiert. So kommt es also vor, dass Termine existieren die es also gar nicht mehr gibt. Bsp. Datei: https://www.herber.de/bbs/user/145456.xlsx
Lösungsidee:
Bei der Anpassung eines Termin im Blatt "Stammdaten" (A2:A31) soll eine MsgBox mit einem Hinweis ausgegeben werden, falls bereits dieser Termin im Blatt "Terminübersicht" (A2:A31) ausgewählt wurde. Idealerweise wäre die Anzahl der ausgewählten Termine hilfreich und die Option zum ersetzen der gefunden Termine im Blatt "Terminübersicht" mit den neuen Anpassungen. Also in etwa so: Möchten Sie die 4 ausgewählten Termine im Blatt "Terminübersicht" mit dem angepassten Termin ersetzten? und dann dazu die Option Ja/Nein.
Ich hoffe ich habe mich verständlich ausgedrückt und freue mich auf Antworten. Gruss Robert

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: warum diese mit Dropdownzellen auswählen ...
11.04.2021 12:56:33
neopa
Hallo Robert,
... mit einer einfachen INDEX()-Formel könntest Du doch die Termine in das andere Blatt holen. Wobei mir unklar ist, wozu überhaupt dieses zusätzliche Tabellenblatt noch notwendig sein soll. In Stammdaten steht doch schon alles.
Gruß Werner
.. , - ...
AW: warum diese mit Dropdownzellen auswählen ...
11.04.2021 13:08:30
Robert
Hallo Werner,
die Trennung und das Dropdown sind historisch bedingt. Trennung der Aufgaben...
Die einzelnen Termine in der "Terminübersicht" werden im weiteren Verlauf zugewiesen.
Die Index-Funktion ist denke ich auch hier am besten geeignet, jedoch möchte ich wie beschreiben diese gern in VBA haben und eine MsgBox ausgeben.
Gruss Robert
Anzeige
AW: VBA-Lösung gesucht, thread offen owT
11.04.2021 13:26:47
neopa
Gruß Werner
.. , - ...
AW: warum diese mit Dropdownzellen auswählen ...
12.04.2021 22:52:49
Yal
Hallo Robert,
die Schwierigkeit liegt daran, den bisherige Wert abzufangen. Das erreicht man, in dem die Calculation temporär auf Manual gesetzt wird.
Folgende Code gehört in dem Code-pane der Worksheet Stammdaten.
Private Calc_Mem
Private Sub Worksheet_Activate()
Calc_Mem = Application.Calculation
Application.Calculation = xlCalculationManual
End Sub
Private Sub Worksheet_Deactivate()
On Error Resume Next
Application.Calculation = Calc_Mem
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
Dim AlterEintrag
Dim NeuerEintrag
AlterEintrag = Target.EntireRow.Range("A1").Value
Target.Worksheet.Calculate
NeuerEintrag = Target.EntireRow.Range("A1").Value
If Target.Column = 2 Or Target.Column = 3 Then
Application.EnableEvents = False
Worksheets("Terminübersicht").Cells.Replace LookAt:=xlWhole, _
What:=AlterEintrag, _
Replacement:=NeuerEintrag
Application.EnableEvents = True
End If
End Sub

Was passiert:
_ wenn auf "Stammdaten" gewechselt wird, schaltet sich die Berechnung auf Manual. Aktueller Zustand wird vorher gespeichert.
_ es wird die bisherige Werte in Spalte A gelesen,
_ dann berechnet,
_ neue Werte in Spalte A gelesen,
_ wenn der "Change" die Spalte 2 oder 3 betrifft, wird auf Tabelle "Terminübersicht" der alte Text durch den neuen ersetzt.
_ beim Verlassen des Blattes "Stammdaten" wird das bisherige Berechnungsmodeus wieder eingestellt.
Viel Erfolg damit. Auf Rückmeldung freut man sich.
VG
Yal
Anzeige
AW: warum diese mit Dropdownzellen auswählen ...
13.04.2021 19:49:10
Robert
Hallo Yal,
der Code funktioniert echt super! Ich bin begeistert. Habe Ihn mit einer MsgBox hinter #Then# getestet und ich habe noch 2 Fragen dazu:
1. Der Code wird ja im Prinzip immer ausgeführt, auch wenn im Tabellenblatt Terminübersicht kein Termin ausgewählt wurde von den vorhandenen.
_Ist es möglich, dass bei Änderungen in Spalte B+C eine MsgBox nur erscheint, wenn auch der Termin in Spalte A im Blatt Terminübersicht ausgewählt wurde? (Andernfalls ist ja eine Änderung ohne Auswirkung und die Meldung soll nicht erscheinen)
2. Welche Auswirkungen hat das Deaktivieren der automatischen Berechnung für andere Formeln im selben Blatt? Kann es passieren das diese Berechnungen nicht stattfinden? (Bsp. Matrixformel oder S-Verweis)
_Ist es dann sinnvoller eine andere Auslösung für die Zellen wie z.B. If Not Application.Intersect zu verwenden? oder die automatische Berechnung bei Zellenmarkierung wie bei SelectionChange erst zu deaktivieren?
Gruss Robert
Anzeige
AW: warum diese mit Dropdownzellen auswählen ...
13.04.2021 21:54:04
Yal
Hallo Robert,
zu 1
dass der Code immer anspringt, liegt wahrscheinlich daran, dass Du es nicht im Code-Pane vom Blatt "Stammdaten" abgelegt hast, sondern wahrschienlich im Code-Pane von "Diese Arbeitsmappe", weil sonst würde es nicht reagieren, wenn irgenwas auf dem Blatt "Terminübersicht" geändert wird.
zu 2
Die Deaktivierung der autom. Berechnung gilt nur zwischen dem Moment, wo Du zum Blatt "Stammdaten" wechselst, bis Du diese wieder verlässt. In diesem Zustand, also wenn Du auf dem Blatt bist, passiert folgendes:
wenn Du eine Änderung an einer Formel oder Zahl machst, dann startet "Worksheet_Change". Worksheet_Change berechnet immer das Blatt "Stammdaten" neu. Nur das es davor und danach 2 Werte liest. Diese Werte haben nur eine Wirkung, wenn die Änderung in Spalte B or C stattgefunden haben. Daher sind sonstige Auswirkungen sehr begrenzt.
Man könnte auch zu Spalte= 2 order Spalte =3 hinzufügen, dass nur was gemacht werden soll, wenn AlterEintrag ungleich NeuerEintrag und wenn keine der beiden leer ist.
Performance-mässig spielt es eine kleine Rolle.
Auch vom Auswirkung: wichtig ist dabei, dass der Replace mit LookAt:=xlWhole. Sonst könnten einzelne Buchstaben ersetzt werden und wir hätten eventuell ein schöne Schlamassel.
VG
Yal
Anzeige
AW: warum diese mit Dropdownzellen auswählen ...
13.04.2021 23:00:18
Robert
Hallo Yal,
habe den Code im korrekten Arbeitsblatt #Stammdaten# hinterlegt. Ich meinte in der Frage schon solche Formeln im selben Arbeitsblatt. Habe nun aber verstanden was passiert falls zwischenzeitlich Änderungen erfolgen. Das solle passen. Wie müsste der Code lauten wenn auch geprüft werden soll: AlterEintrag ungleich NeuerEintrag und wenn keine der beiden leer ist?
Gruss Robert
AW: warum diese mit Dropdownzellen auswählen ...
14.04.2021 08:10:16
Yal
Hallo Robert
If Target.Column = 2 Or Target.Column = 3 Then
If AlterEintrag  NeuerEintrag Then
End If
End If

Also so:
If Target.Column = 2 Or Target.Column = 3 Then
If AlterEintrag  NeuerEintrag Then
Application.EnableEvents = False
Worksheets("Terminübersicht").Cells.Replace LookAt:=xlWhole, _
What:=AlterEintrag, _
Replacement:=NeuerEintrag
Application.EnableEvents = True
End If
End If

VG
Yal
Anzeige
AW: warum diese mit Dropdownzellen auswählen ...
16.04.2021 14:03:51
Robert
Hallo Yal,
bin erst heute dazu gekommen weiter zu testen. Mit If AlterEintrag NeuerEintrag Then funktioniert die Prüfung auf Änderungen wunderbar. Jetzt fehlt nur noch die Prüfung ob der Termin im Blatt Terminübersicht überhaupt vorhanden ist. Wie müsste der Code lauten wenn er das vorab vergleicht?
Mit dem Code:
If Worksheets("Terminübersicht").Range("A:A").Find(AlterEintrag, LookIn:=xlValues, LookAt:=xlWhole) Then
klappt es leider nicht.
Gruss Robert
AW: warum diese mit Dropdownzellen auswählen ...
17.04.2021 16:23:26
Yal
Hallo Robert,
die Prüfung ist nicht notwendig: wenn nichts vorhanden wird auch nichts ersetzt.
VG
Yal
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige