Änderung von Feldwert in Tabelle1 = VBA-Code wird ausgeführt
#11
Hallo Julia,

jetzt hat Du ein anderes Ereignis ausgewählt.
Dieses wird meist automatisch rein geschrieben, wenn man im Dropdown des Codefensters Worksheet auswählt.
Im rechten Dropdown bitte das Change Ereignis wählen.

Und hier mal etwas zum Testen:


Code:
Private Sub Worksheet_Change(ByVal Target As Range)
 If Not Intersect(Target, Range("A1,C1,D1")) Is Nothing Then
   MsgBox "Du hast den Inhalt der Zelle " & Target.Address(0, 0) & " verändert!"
 Else
   MsgBox "Du hast einen Zellinhalt einer Zelle verändert, die nicht im Code in der Schnittmenge angegeben ist"
 End If
End Sub
Gruß Atilla
Top
#12
Hallo julia,

mein Vorschlag ist mit der Art der Range auch Fehlerlastig, deshalb hir zwei weiter Varianten:


Code:
Private Sub Worksheet_Change(ByVal Target As Range)
 If Target.Address = "$A$1" Or Target.Address = "$C$1" Then
   MsgBox "Du hast den Inhalt der Zelle " & Target.Address(0, 0) & " verändert!"
 Else
   MsgBox "Du hast einen Zellinhalt einer Zelle verändert, die nicht im Code in der Schnittmenge angegeben ist"
 End If
End Sub


oder so, was das Gleiche wie oben macht:


Code:
Private Sub Worksheet_Change(ByVal Target As Range)
 If Not Intersect(Target, Union(Range("A1"), Range("C1"))) Is Nothing Then
   MsgBox "Du hast den Inhalt der Zelle " & Target.Address(0, 0) & " verändert!"
 Else
   MsgBox "Du hast einen Zellinhalt einer Zelle verändert, die nicht im Code in der Schnittmenge angegeben ist"
 End If
End Sub


Getestet mit Dropdowns in A1 und C1
Gruß Atilla
[-] Folgende(r) 1 Nutzer sagt Danke an atilla für diesen Beitrag:
  • o0Julia0o
Top
#13
Auch Hallo,

(21.02.2017, 21:29)o0Julia0o schrieb: Ich habe eine neue Variante. Jedoch auch hier, sobald ich ein 2. Feld mit einbaue, funktioniert sie nicht mehr:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  If Target.Address = "$D$1" Then
  MsgBox "Zelle ausgewählt"
  End If
  If Target.Address = "$L$1" Then
  MsgBox "Andere Zelle ausgewählt"
  End If
End Sub

Mit der Ergänzung in Rot sollte deine Variante auch funktionieren  :19:
Gruß Stefan
Win 10 / Office 2016
[-] Folgende(r) 1 Nutzer sagt Danke an Steffl für diesen Beitrag:
  • o0Julia0o
Top
#14
oh man  Blush  - naja, wenigstens kein logischer Fehler. Und Danke, ne!

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
geht überigens auch bei Dropdownfeldern, wenn man mehrere Ifs untereinander schreibt.
Top
#15
So funktioniert das ja, jedoch gibt es ein Problem:
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("D1")) Is Nothing Then
MsgBox "Zelle ausgewählt"
End If
If Not Intersect(Target, Range("L1")) Is Nothing Then
MsgBox "Andere Zelle ausgewählt"
End If
End Sub
Es gibt 3 Fällle für Änderungen in D1 oder L1(hier sind bereits Werte aus der Auswahlliste voreingestellt):
1. Wenn ich einen Wert per Dropdownauswahl einstelle, dann funktioniert es.
2. Wenn ich einen Wert ohne Dropdownauswahl eintippe & mit Enter bestätige, der in der Auswahl existiert, dann funktioniert es.
3. Wenn ich einen Wert, welcher nicht in der Auswahl besteht eintippe, dann kommt folgende Fehlermeldung(ist ja auch logisch): "Dieser Wert entpricht nicht den Einschränkungen für die Datenüberprüfung, die für diese Zelle definiert sind."
[url=
Dateiupload bitte im Forum! So geht es: Klick mich!
]
Ich klicke auf "Abbrechen" und gebe einen Wert ein(oder wähle einen per Dropdownmenü), welcher in der Auswahl hinterlegt ist. Jetzt wird die MsgBox 2x mal hintereinander angezeigt. Wenn ich zuvor auf Wiederholen klicke und einen Wert von der Auswahlliste eingebe, dann wird die MsgBox 3x hintereinander ausgegeben.

Das kommt wohl daher:
2x Msgbox = 1x Änderung bemerkt, wegen falschem Wert. 2. Änderung wegen Abbrechen und somit Rücksetzung auf den voreingestellten korrekten Wert.
3x Msgbox = 1x Änderung bemerkt, wegen falschem Wert. 2. Änderung weil er intern (vom Nutzer ungesehen, ein Abbruch durchführt und auf voreingestellten Wert zurückstellt). 3. wegen Angabe des neuen Wertes. Der neue Wert kann natürlich auch der voreingestellte Wert sein.

Wie bekomme ich es hin, dass die MsgBox nur 1x angezeigt wird, bzw. wenn noch Code hinter der MsgBox ausgführt werden soll, dieser auch nur 1x ausgeführt wird.
Top
#16
Hallöchen,

das ist zwar etwas von hinten durch die Brust ins Auge, aber Du könntest zu Beginn des Makros die Eventsteuerung deaktivieren und nach kurzer Zeit, z.B. 3 Sekunden, wieder einschalten. Ob die 3 Sekunden passen, sei mal dahingestellt.

Das könnte so aussehen. Du kannst in A1 etwas eingeben, das Makro wird 1x gestartet. Dann gibst Du noch fix etwas anderes ein, und die Meldung gibt Dir das dann aus. Wenn Du z.B. bei Öffnen der Mappe, Aktivierung der Seite und nach der Änderung den Inhalt von A1 speicherst könntest Du sogar noch auswerten, ob sich was geändert hat ...

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
Application.OnTime Now + TimeValue("00:00:03"), "EventsOn"
End Sub
Sub EventsOn()
Application.EnableEvents = True
MsgBox Cells(1, 1).Value
End Sub
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
[-] Folgende(r) 1 Nutzer sagt Danke an schauan für diesen Beitrag:
  • o0Julia0o
Top
#17
Danke. Und wenn ich beim 1. Mal etwas richtiges eingebe, wird die Eingabe auch als nicht eingegeben gewertet. Und wenn ich mir zwischen 2 Eingaben 10 Sekunden Zeit lasse? Das passiert ja durchaus, weil ich nachschlagen muß, was jetzt der Fehler war z.B. Trotzdem eine interessante Idee!
Top
#18
Hallo,

oder man nutzt die Gültigkeit ohne Fehlermeldung und Fehler behandelt man dann im Code und gibt dort entsprechende Meldungen aus.
Dann kann sogar das hineinkopieren abgefangen werden.
Gruß Atilla
[-] Folgende(r) 1 Nutzer sagt Danke an atilla für diesen Beitrag:
  • o0Julia0o
Top
#19
Hallo Julia,

Zitat:Und wenn ich mir zwischen 2 Eingaben 10 Sekunden Zeit lasse?

Irgendwie musst Du Excel dann mitteilen, das alles ok ist.

Das könnte man auch in dem zweiten Makro abfragen. Die 3 Sekunden wären dann für's vertippen und danach fragst Du den Anwender noch, ob die Eingabe korrekt ist. Dazu kannst Du eine msgbox nehmen, im Prinzip so:

Code:
If MsgBox("Eingabe ok?", vbOKCancel) = vbCancel Then
  Exit Sub
Else
  'TueWas
End If
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
[-] Folgende(r) 1 Nutzer sagt Danke an schauan für diesen Beitrag:
  • o0Julia0o
Top
#20
Hm.. Nachfrage ist lästig während des Arbeitsprozesses. Das würde ja dann jedes Mal passieren, diese Nachfrage an den Nutzer.

(25.02.2017, 13:07)atilla schrieb: oder man nutzt die Gültigkeit ohne Fehlermeldung und Fehler behandelt man dann im Code und gibt dort entsprechende Meldungen aus.
Gültigkeit ist ein Befehl?
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 2 Gast/Gäste