Live-Forum - Die aktuellen Beiträge
Datum
Titel
17.10.2025 10:28:49
16.10.2025 17:40:39
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

innerhalb einer VBA-Prozedur 2 Zustände abfragen u reagieren

Forumthread: innerhalb einer VBA-Prozedur 2 Zustände abfragen u reagieren

innerhalb einer VBA-Prozedur 2 Zustände abfragen u reagieren
20.09.2024 13:12:44
JensS
Hallo zusammen,

ich brauche mal Eure Hilfe weil ich mich irgendwie verfranzt habe.
Und zwar möchte ich innerhalb einer Prozedur 2 Zustände abfragen und jeweils darauf reagieren.

In "D12" steht die Anrede und in D12 ein Name.
Falls in D12 "Sehr geehrte Damen und Herren" steht darf natürlich kein Name enthalten sein.
Falls in D12 "Sehr geehrter Herr" ODER "Sehr geehrte Frau" steht, MUSS in D13 ein Name enthalten sein, bzw. eingegeben werden müssen.

Wie kann ich das am besten lösen.
Mit meinem nach nachfolgender Code löse ich leider nicht beide Zustände auf.

Danke für Deine Hilfe im Voraus.
Jens




Private Sub Worksheet_Change(ByVal Target As Range)


Dim Bereich As Range, zelle As Range
Application.ScreenUpdating = False

If Range("D12") = "Sehr geehrte Damen und Herren," Then
Range("D13:D13").Select 'Eingegebenen Namen löschen
Selection.ClearContents
MsgBox "Da die Anrede ''Sehr geehrte Damen und Herren'' verwendet wurde, wurde der eingegebene Name entfernt !"

If Range("D12") = "" Then
Else
Set Bereich = Range("Stammdaten!D12:D12")
For Each zelle In Bereich
If zelle.Value > "" And InStr(1, "Sehr geehrter Herr,Sehr geehrte Frau", zelle.Value) > 0 Then
Range("D13:D13").Select
MsgBox "Bitte den Nachnamen des Angebot-Empfängers eingeben !"
End If

Next

Application.ScreenUpdating = True
End If
End If

End Sub
Anzeige

19
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: innerhalb einer VBA-Prozedur 2 Zustände abfragen u reagieren
20.09.2024 13:31:35
snb
Private Sub Worksheet_Change(ByVal Target As Range)

if right(cells(13,4),1)>"n" then cells(12,4)=inputbox("name")
End Sub
AW: innerhalb einer VBA-Prozedur 2 Zustände abfragen u reagieren
20.09.2024 13:46:32
Onur
Was soll das "For Each" bei einer EINZIGEN Zelle denn bringen ???

Range("D13:D13")

Wozu DAS denn? Wieso nicht einfach
Range("D13")

"In "D12" steht die Anrede und in D12 ein Name." ????
Was genau ist denn deiner Meinung nach der Unterschied zwischen "D12" und D12 ???
Ausserdem brauchst du keinen VBA für sowas - Formel reicht. Guckst du hier:

https://www.herber.de/bbs/user/172312.xlsx


Anzeige
AW: innerhalb einer VBA-Prozedur 2 Zustände abfragen u reagieren
20.09.2024 15:24:15
daniel
Hi
wie hast du denn die Eingabe in D12 gestaltet?
hast du dort ein DropDown (z.B. Datenüberprüfung Liste), so dass der Anwender nur diese drei Möglichkeiten hat oder könnte der Anwender auch die Anrede zusammen mit dem Namen eingeben ("Sehr geehrter Herr Mustermann")
in dem Fall wäre es ja sinnvoll, den Namen abzutrennen und in die Zelle D13 zu schreiben.

Gruß Daniel
Anzeige
AW: innerhalb einer VBA-Prozedur 2 Zustände abfragen u reagieren
20.09.2024 16:14:23
JensS
Ja in D12 gibt es ein Dropdown, welches nur diese Möglichkeiten beinhaltet.

In meinem vorigen Post habe ich eine Datei angehängt, bitte schau mal.
AW: innerhalb einer VBA-Prozedur 2 Zustände abfragen u reagieren
20.09.2024 16:48:26
daniel
saubere IF-Blöcke schreiben.
kein EXIT-Sub verwenden, sobald man das Change-Event für mehrere Zellbereiche mit unterschiedlichen Funktionaltäten benötigt.
macht man gerne mal, wenns schnell gehen muss.

Private Sub Worksheet_Change(ByVal Target As Range)


If Not Intersect(Target, Range("D15")) Is Nothing Then
Sheets("Stammdaten").Range("A1:A500").Rows.AutoFit
ActiveSheet.Calculate
ThisWorkbook.RefreshAll
Call ZeilenhöheÜbertragen

ElseIf Not Intersect(Target, Range("D12")) Is Nothing Then

Application.EnableEvents = False 'sonst wird Worksheet_Change angetriggert
With Range("D13")
Select Case Range("D12").Value
Case "Sehr geehrte Damen und Herren,"
If .Value > "" Then
.ClearContents
MsgBox "Da die Anrede ''Sehr geehrte Damen und Herren'' verwendet wurde, wurde der eingegebene Name entfernt !"
End If

Case "Sehr geehrter Herr", "Sehr geehrte Frau"
If .Value = "" Then
Range("D13:D13").Select
MsgBox "Bitte den Nachnamen des Angebot-Empfängers eingeben !"
End If

End Select
End With
Application.EnableEvents = True
End If

End Sub
Anzeige
AW: innerhalb einer VBA-Prozedur 2 Zustände abfragen u reagieren
20.09.2024 13:58:56
JensS
Ich relativer VBA-Laie und hatte mir einen Quellcode im Netz gefunden und ihn versucht, meinen Gegebenheiten anzupassen.
Natürlich bleibt es nicht aus das dabei Dinge überflüssig sind. Ich bitte um Entschuldigung.
Darüber hinaus möchte ich diese Problematik per VBA lösen, da die Prüfung erst zu einem bestimmten Zeitpunkt stattfunden soll.
Ich hoffe es gibt noch eine Lösung wie ich sie mir vorstelle.

Beste Grüße
Anzeige
AW: innerhalb einer VBA-Prozedur 2 Zustände abfragen u reagieren
20.09.2024 14:01:24
Onur
"Ich hoffe es gibt noch eine Lösung wie ich sie mir vorstelle. " - Kein Problem, aber dafür müsstest du mal die Datei posten, damit man sieht, wo was wirklich steht.
AW: innerhalb einer VBA-Prozedur 2 Zustände abfragen u reagieren
20.09.2024 16:46:29
Onur
"da die Prüfung erst zu einem bestimmten Zeitpunkt stattfunden soll" ???
Die Prüfung findet doch bei dir dank
Private Sub Worksheet_Change(ByVal Target As Range)

auch schon bei der Eingabe statt.
Guckst du hier:

https://www.herber.de/bbs/user/172319.xlsm
Anzeige
AW: innerhalb einer VBA-Prozedur 2 Zustände abfragen u reagieren
20.09.2024 14:51:09
JensS
Ich habe jetzt dank Eurer Hilfe meinen Code fast so wie ich ihn haben möchte.
Allerdings besteht noch das Problem, dass im Falle des Case "Sehr geehrter Herr", "Sehr geehrte Frau" trotzdem die MsgBox "Bitte den Nachnamen des Angebot-Empfängers eingeben !" ausgegeben wird, auch wenn bereits das Feld mit einem Namen gefüllt ist.
Hab bislang erfolglos probiert das zu korrigieren.

   

Private Sub Worksheet_Change(ByVal Target As Range)

Application.EnableEvents = False 'sonst wird Worksheet_Change angetriggert
With Range("D13")
Select Case Range("D12").Value
Case "Sehr geehrte Damen und Herren,"
.ClearContents
MsgBox "Da die Anrede ''Sehr geehrte Damen und Herren'' verwendet wurde, wurde der eingegebene Name entfernt !"

Case "Sehr geehrter Herr", "Sehr geehrte Frau"
If .Value = "" Then Range("D13:D13").Select
MsgBox "Bitte den Nachnamen des Angebot-Empfängers eingeben !"

End Select
End With
Application.EnableEvents = True

End Sub
Anzeige
AW: innerhalb einer VBA-Prozedur 2 Zustände abfragen u reagieren
20.09.2024 14:52:27
Onur
Wie bereits gesagt: "Kein Problem, aber dafür müsstest du mal die Datei posten, damit man sieht, wo was wirklich steht. "
AW: innerhalb einer VBA-Prozedur 2 Zustände abfragen u reagieren
20.09.2024 15:06:33
ralf_b
du solltest das Target prüfen. Welche Zelle sich dahinter verbirgt.

und nur dann den Code nutzen wenn das target (die veränderte Zelle) D12 ist.

if Target.address >"$D$12" then exit sub 'abbruch wenn nicht d12 geändert wurde.
Anzeige
AW: innerhalb einer VBA-Prozedur 2 Zustände abfragen u reagieren
20.09.2024 16:54:10
Yal
Hallo Jens,

es liegt an diese beiden Zeilen:
            If .Value = "" Then Range("D13:D13").Select

MsgBox "Bitte den Nachnamen des Angebot-Empfängers eingeben !"


Anleitung-Anfang-Ende müssen zusammenpassen:
            If .Value = "" Then 

Range("D13:D13").Select
MsgBox "Bitte den Nachnamen des Angebot-Empfängers eingeben !"
End If


Siehst Du die Unterschied?
Im erste gilt den "if" nur für die eigene Zeile: Anweisung nach dem "Then"
Im zweiten (es darf nach dem "Then" nichts geben), bis zu "End If".

VG
Yal
Anzeige
AW: innerhalb einer VBA-Prozedur 2 Zustände abfragen u reagieren
20.09.2024 17:52:06
JensS
Das war die finale Lösung.
Besten Dank dafür an Dich und natürlich alle anderen die geholfen haben.

Ich wünsche allen ein sonniges und erholsames Wochenende.
AW: innerhalb einer VBA-Prozedur 2 Zustände abfragen u reagieren
20.09.2024 13:33:31
snb
Private Sub Worksheet_Change(ByVal Target As Range)
if right(cells(13,4),1)>"n" and cells(12,4)="" then cells(12,4)=inputbox("name")
End Sub
Anzeige
AW: innerhalb einer VBA-Prozedur 2 Zustände abfragen u reagieren
20.09.2024 13:39:18
JensS
Vielen Dank für Deine schnelle Antwort.

Jedoch funktioniert die nicht wie erhoffe.
Auch wenn bereits ein Name in der betreffenden Zelle steht, erscheint die Input-Box.

Zum Anderen sollen die Werte nicht über eine Input-Box eingegeben werden, sondern direkt in der betreffenden Zelle, so wie ich es im meinem Code formuliert habe.

Vielleicht kann noch jemand meinen Code so zusammenstellen/korrigieren, dass dieser inhaltlich bleibt, aber eben funktioniert.
Danke dafür im Voraus.
Anzeige
AW: innerhalb einer VBA-Prozedur 2 Zustände abfragen u reagieren
20.09.2024 13:56:58
Yal
Noch ein Gedicht:

Private Sub Worksheet_Change(ByVal Target As Range)


Application.EnableEvents = False 'sonst wird Worksheet_Change angetriggert
With Range("D13")
Select Case Range("D12").Value
Case "Sehr geehrte Damen und Herren,"
.ClearContents
Case "Sehr geehrter Herr", "Sehr geehrte Frau"
If .Value = "" Then .Value = InputBox("Bitte den Nachnamen des Angebot-Empfängers eingeben !")
End Select
End With
Application.EnableEvents = True
End Sub



VG
Yal
Anzeige
AW: innerhalb einer VBA-Prozedur 2 Zustände abfragen u reagieren
20.09.2024 13:58:59
Yal
Es wird wohl eine Leerzeichen nach "Sehr geehrter Herr" (bzw Frau) geben,

daher eher
Select Case Trim(Range("D12").Value)


VG
Yal
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige