Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Anzeige
Inhaltsverzeichnis

VBA - Löschen Zellinhalt nur unter Voraussetzung zulassen

Forumthread: VBA - Löschen Zellinhalt nur unter Voraussetzung zulassen

VBA - Löschen Zellinhalt nur unter Voraussetzung zulassen
25.04.2025 16:16:04
Excel_Rolf
Hallo werte Community

Mal wieder bräuchte ich eure Hilfe:

Ich habe ein Seminar-/Fortbildungs-Planungstool für unsere Firma gebastelt.
Auf dem Blatt "Terminplanung" tragen sich die Teilnehmer mit Namen zu einem Termin ein. Das Datum der Eintragung wird dann automatisch (per Formel) in einen nebenstehenden Tabellenteil übertragen, von wo aus die Personalverwaltung (PV) weiterarbeitet. Die PV quittiert dann die Termine bei den Personen für die erfolgte Buchung/Bearbeitung in unterschiedlichen Systemen (Arbeitszeitplanung, Platzreservierung Seminar, usw.) mit einem nebenstehenden "Ja".
Da auf diesem Arbeitsblatt eine Menge Formatierungen und Formeln hinterlegt sind und ich nicht will, dass da einer was kaputt macht, speist sich die Teilnehmerliste vom 2. Blatt "Teilnehmer Soll". Dort kann man die Teilnehmerliste gefahrlos ändern.

Meine Problemstellung
Ich bräuchte einen VBA-Code, der folgendes macht:
Wenn auf dem Blatt "Teilnehmer Soll" eine Person aus der Namensliste (B9:B80) gelöscht wird, soll erst geprüft werden, ob auf dem Blatt "Terminplanung" zu der Person (Name in L9:L80) bereits eine Quittierung ("Ja" in N9:N80 und/oder O9:O80 und/oder P9:P80 in derselben Spalte wie der Name) vorhanden ist und dann die Löschung verhindern, falls ja. Zusätzlich eine msgbox mit dem roten X und Hinweis "XY".
Wenn keine Quittierungen zu der Person vorhanden sind, soll der Name ganz normal gelöscht werden können.

Aufgrund verschiedener Sortierfunktionen ist es aber so, dass die Namen auf den beiden Arbeitsblättern nicht unbedingt in der gleichen Zeile stehen. Der Code müsste den betreffenden Namen bei einem Löschversuch also erstmal in Terminplanung!L9:L80 suchen und dann den Abgleich mit den nebenstehenden Zellen in N, O und P machen.
Zudem soll die Lösch-Prüfung natürlich nur im Bereich 'Teilnehmer Soll'!B9:B80 erfolgen. In allen anderen Zellen möchte ich ja ohne Probleme Inhalte löschen können.


Ich habe versucht mit meinen rudimentärsten VBA-Kenntnissen selbst eine Lösung zu finden, indem ich mir in "Teilnehmer Soll" die Spalte A als Krücke genommen habe.
Dort habe ich zu den nebenstehenden Personen in Spalte B mittels Formel die Quittierungen in "Terminplanung" abgeprüft und im Trefferfall das Wort "Eintrag" schreiben lassen. Leider schaffe ich selbst hierzu den VBA-Code nicht nach meinen Vorstellungen zu bauen.

Eleganter wäre der Code natürlich ohne Krücke, aber es würde auch nicht stören, wenn es mit erheblicher einfacher wäre.

Danke schonmal für eure Hilfe

Rolf

PS: Die Datei habe ich leider gerade nicht zur Hand, da sie auf dem Büro-PC liegt und ich von zuhause aus schreibe.
Sonst hätte ich sie natürlich gleich mit hochgeladen.
Solltet ihr sie aber brauchen, um meinen Wirrwarr zu verstehen, bekomme ich die aber schon her.
Anzeige

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA - Löschen Zellinhalt nur unter Voraussetzung zulassen
25.04.2025 16:33:06
Piet
Hallo

eine Beispieldatei mit anonymen Daten ist schon besser. Diese umfangreiche Datei baut kein Kollege nach!

mfg Piet
AW: VBA - Löschen Zellinhalt nur unter Voraussetzung zulassen
25.04.2025 17:49:18
daniel
Hi
ohne Beispieldatei schwierig, aber ich versuchs mal.
damit der Code nicht zu kompliziert wird, ergänze das Tabellenblatt "Terminplanung" um folgende Hilfsspalte (im folgenden mal Spalte X genannt) mit dieser Formel:

die Formel gilt für X9 und sollte bis X80 runtergezogen werden.
die Formel "Fehler" aus, wenn ein Name aus der Spalte L, für den eine Bestätigung vorliegt, auf dem anderen Blatt in der Spalte B fehlt.

=Wenn(L9="";"";Wenn(ZählenWenn(N9:P9;"ja")=0;"";Wenn(ZählenWenn('Teilnehmer Soll'!B9:B80;L9)=0;"Fehler";"")))


ins Modul von "Teilnehmer Soll" muss dann folgendes Makro:
Private Sub Worksheet_Change(ByVal Target As Range)

If WorksheetFunction.CountIf(Sheets("Terminplanung").Range(X:X"), "Fehler") > 0 Then
MsgBox "unzulässige Aktion"
With Application
.EnableEvents = False
.Undo
.EnableEvents = True
End With
End If
End Sub


Wenn du dann auf dem Blatt "Teilnehmer Soll" einen Namen löschst, der im Blatt "Terminplanung" vorkommt und ein ja in den Spalten N-P hat, wird die Formel in der Spalte X den Text "Fehler" ausgeben.
Im Change-Event des Tabellenblatts wird geprüft, ob im Blatt "Terminplanung" der Text "Fehler" auftaucht und wenn ja, wird die Aktion rückgängig gemacht.
Voraussetzung ist natürlich, dass zu Beginn kein Fehler vorliegt und in der Terminplanung Soll nur Namen neu hinzugefügt werden, die auch in der Teilnehmerliste vorkommen.

Gruß Daniel
Anzeige
AW: VBA - Löschen Zellinhalt nur unter Voraussetzung zulassen
26.04.2025 15:56:11
Excel_Rolf
Also hier die Datei: https://www.herber.de/bbs/user/177282.xlsm

Hallo Daniel

Danke für deine Antwort.
Der Code macht in Ansätzen schon mal das Richtige. Allerdings verhindert er dann eben sämtliche Änderungen sobald bei nur einem Teilnehmer "Fehler" hinterlegt ist.
Die Lösch-Sperre soll aber nur für den spezifischen Teilnehmer gelten, der bereits Buchungen hinterlegt hat. Andere sollen einfach gelöscht und weitere Teilnehmer hinzugefügt werden können.
In der Beispieldatei habe ich deine formelbasierte Herangehensweise jedoch etwas umgebaut - für meinen besseren Überblick - und als Ausgabe "Buchung" in "Teilnehmer Soll" in Spalte A gepackt.

Ich denke jedoch, dass der Code nicht um eine "Suchfunktion" des Namens in Spalte L nicht herumkommen wird, da ich die Lösch-Sperre final auch noch für den Eintragungsbereich G:J bräuchte. Teilnehmer sollen dort ihren Namen nicht mehr löschen können, sobald Buchungen ("Ja" in N, O oder P) vorhanden sind.

Grüße Rolf
Anzeige
AW: VBA - Löschen Zellinhalt nur unter Voraussetzung zulassen
26.04.2025 16:37:16
Daniel
Naja, der Text "Fehler" sollte ja erst dann erscheinen, wenn ein Name, der bereits ein "ja" in der entsprechenden Spalte hat, gelöscht wird.
Das müsstest du über die Formel regeln.
AW: VBA - Löschen Zellinhalt nur unter Voraussetzung zulassen
27.04.2025 05:59:01
Excel_Rolf
Hallo Daniel

Du hast natürlich recht.
Meine Leitung war mal wieder ein bisschen länger.
Mit deiner Herangehensweise konnte ich durch ein paar Anpassungen jetzt genau das machen, was ich vorhatte. Und es war doch viel einfacher als ich gedacht habe.
Auch die weitere Sperre im Eintragungsbereich war so ohne Weiteres umsetzbar.

Vielen Dank.
Anliegen damit erledigt.

Rolf
Anzeige

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige