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

ruhig, ruhig, wir sind doch auf dem richtigen Weg. Die Zwischenfragen sollten nur eine genauere Beschreibung der Abläufe und Fallunterscheidung ergeben.

Hallo Julia,

ich habe mal den Code von Atilla angepasst. Das mit dem D1 war ein Fehler von mir, als Vergleichszelle kämen zum Beispiel die jeweiligen Nachbarzellen von D1 und F1 zum Einsatz. Im Prinzip gibt es 3 Fälle.

(1) Fehleingabe
Es werden jetzt nur noch Meldungen angezeigt, wenn eine Fehleingabe passiert. Durch die Datenüberprüfung wird der ursprüngliche Wert wieder eingetragen. Mehr passiert nicht, die Vergleichszelle bleibt unberührt.

(2) Auswahl oder manueller Eintrag eines korrekten Wertes
Wenn Du einen anderen als den zuvor gewählten Wert auswählst, gibt es eine Action. Bisher war das eine Meldung, die hab ich auskommentiert. Der Wert wird mit der vorherigen Auswahl - "gespeichert" in der Vergleichszelle - verglichen. Bei Unterschiedlichen Einträgen wird die Vergleichszelle aktualisiert und Dein Makro ausgeführt.
Du nimmst Deinen Makroaufruf dort rein, wo ich "'hier kommt die Action rein" geschrieben habe.

(3) Auswahl oder manueller Eintrag eines korrekten Wertes, der bereits zuvor gewählt wurde
Wenn Du den gleichen Eintrag nochmal wählst, passiert nix. Der Wert wird mit der vorherigen Auswahl - "gespeichert" in der Vergleichszelle - verglichen und wegen der Übereinstimmung der Makroaufruf und die Aktualisierung der Vergleichszelle übersprungen. Es wird auch keine Meldung ausgegeben.

Code:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Target, Range("D1")) Is Nothing Then
 Application.EnableEvents = False
 If Target <> "" Then
   If Not prüfung(Target.Text, Target) Then
     MsgBox "falsche Eingabe"
     Application.Undo
   'Wert mit C1 vergleichen
   ElseIf Target <> Cells(1, 3) Then
     'MsgBox "Inhalt verändert von " & Target.Address(0, 0)
     'korrekten Wert nach C1 ausgeben
     Cells(1, 3).Value = Cells(1, 4).Value
     'hier kommt die Action rein
   End If
 End If
End If
If Not Intersect(Target, Target, Range("F1")) Is Nothing Then
 Application.EnableEvents = False
 If Target <> "" Then
   If Not prüfung(Target.Text, Target) Then
     MsgBox "falsche Eingabe"
     Application.Undo
   'Wert mit e1 vergleichen
   ElseIf Target <> Cells(1, 5) Then
     'MsgBox "Inhalt verändert von " & Target.Address(0, 0)
     'korrekten Wert nach E1 ausgeben
     Cells(1, 5).Value = Cells(1, 6).Value
     'hier kommt die Action rein
   End If
 End If
End If
Application.EnableEvents = True
End Sub
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Top
#32
Verwende

Excel-VBA für Dummies: Amazon.de: John Walkenbach, Judith Muhr: Bücher
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
Top
#33
schauanHallo Atilla,

ruhig, ruhig, wir sind doch auf dem richtigen Weg. Die Zwischenfragen sollten nur eine genauere Beschreibung der Abläufe und Fallunterscheidung ergeben.


Das glaube ich nicht Andre.

Ich tippe 90% , Dein Code funktioniert nicht.


Ich sehe gerade, Dein jetziger Code entspricht meiner zuletzt eingestellte Variante, bis auf das ersatzweise Schreiben in die Nachbarzelle.

Da glaube ich, dass Du etwas machen möchtest, was eigentlich nicht nötig ist.
Wenn man das mal durchspielt:

1. Auswahl aus dem Dropdown: prüfung(Target.Text, Target) = Wahr <=> Änderung der Zelle
Deswegen braucht der Wert auch nicht zwischengespeichert werden, oder warum soll der Wert in die Nachbarzelle

2. Falsche Eingabe: Prüfung(Target.Text, Target) =Falsch <=> keine Änderung in der Zelle, weil Zellwert zurückgesetzt wird auf den bestehenden
Gruß Atilla
Top
#34
Hallo Atilla,

einfach mal ausprobieren. Ich hab's ja genau beschrieben, was passiert.

Die Änderung mit der "Nachbarzelle" ist für den Fall (3) wo ja auch keine Meldung kommen soll, und der noch einzufügende und aufzurufende Code nicht nochmal ausgeführt werden soll. Zitat:
Zitat:Er rechnet halt zur Zeit 1-4x sowas, je nachdem wie oft man auf Wiederholen oder etwas falsches eingibt. Wobei ja nur 1x nötig wäre.
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Top
#35
Hallo Andre,

der Groschen ist gefallen.
Wer kommt denn auf so eine dumme Idee und wählt den den Sichtbaren Wert erneut aus?

Wenn's sein muss, geht das auch ohne Hilfszelle mit ein bisschen Seilchenspringen:

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim altWert
Dim neuWert
If Not Intersect(Target, Target, Range("D1")) Is Nothing Then
Application.EnableEvents = False
If Target <> "" Then
   neuWert = Target
   Application.Undo
   altWert = Target
   Target = neuWert
  If Not prüfung(Target.Text, Target) Then
    MsgBox "falsche Eingabe"
    Application.Undo
  'Wert mit C1 vergleichen
  ElseIf altWert <> neuWert Then
    MsgBox "Inhalt verändert von " & Target.Address(0, 0)
    'hier kommt die Action rein
  End If
End If
End If

If Not Intersect(Target, Target, Range("F1")) Is Nothing Then
Application.EnableEvents = False
If Target <> "" Then
   neuWert = Target
   Application.Undo
   altWert = Target
   Target = neuWert
  If Not prüfung(Target.Text, Target) Then
    MsgBox "falsche Eingabe"
    Application.Undo
  'Wert mit C1 vergleichen
  ElseIf altWert <> neuWert Then
    MsgBox "Inhalt verändert von " & Target.Address(0, 0)
    'hier kommt die Action rein
  End If
End If
End If
Application.EnableEvents = True
End Sub


Jetzt müsste snb mal sagen, ob Vba Seilchenspringen versteht. :19:
Gruß Atilla
Top


Gehe zu:


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