PDA

Vollständige Version anzeigen : Zellenwert ermitteln bevor "DEL" gedrückt wird.


Accesbeginner
10.07.2015, 17:54
Hallo freunde,

dank Hajo_Zi dient das u.a. Code dafür, dass durch Enter oder DEL, ein Makro gestartet werden kann.

Option Explicit ' Variablendefinition erforderlich

Private Sub Worksheet_Change(ByVal Target As Range)
'***********************************************
'* H. Ziplies *
'* 07.07.15 *
'* erstellt von HajoZiplies@web.de *
'* http://Hajo-Excel.de/ *
'***********************************************
Dim RaBereich As Range ' Variable für Bereich
Dim RaZelle As Range ' Variable für Zelle
Set RaBereich = Range("A1:A9999") ' Bereich der Wirksamkeit
Dim StTarget As String ' Variable = Zellinhalt
If CallByName(Selection, IIf(Val( _
Application.Version) > 11, "CountLarge", "Count"), VbGet) = 1 Then
' von Nepumuk
StTarget = Target
' Zelle die in dem Bereich liegen auf die Variable schreiben
' damit werden nur noch die Zellen bearbeitet die im vorgegeben Bereich liegen
' jede Zelladresse ist einzeln angegeben
Set RaBereich = Intersect(RaBereich, Target)

If Not RaBereich Is Nothing Then

Application.EnableEvents = False

If Target.Value = "" Then

MsgBox "DEL wurde gedrückt" '<<< Hier Makro 2 für die DELtaste einsetzen

Application.EnableEvents = True

GoTo BeendeSub

End If
ActiveCell.Offset(-1, 0).Select

MsgBox "ENTER wurde gedrückt '<<< Hier Makro 1 für Entertaste einsetzen


Application.EnableEvents = True

End If

End If
BeendeSub:
Set RaBereich = Nothing ' Variable leeren
End Sub


Alles schön und gut.

Mein naechstes Problem ist:

Wenn ich eine Zellenwert lösche, muss ich vorher noch den Zelleninhalt ermittelt haben. Damit die gleiche Wert durch "DEL" auslösende Code, in eine anderen Tabelle ebenfalls gelöscht wird.

Den Aktiven Zellenwert in eine Variable zu setzen,

Var_AktiveZelleWert = ActiveCell.Value

hilft nicht weiter, weil der Code erst nach dem löschen ausgelöst wird.

Kann mir jemand helfen ?

Hajo_Zi
10.07.2015, 18:10
das wird schon seinen Grund haben warum Du den Code zum feststellen des alten Inhaltes gelöscht hast.
Ich vermute der war in meinem Code enthalten.

<img src="http://Hajo-Excel.de/images/grusz1.gif" align="middle" height="40" alt="Grußformel"><a href="http://Hajo-Excel.de/index.htm"><img border="0" src="http://Hajo-Excel.de/images/logo_hajo3.gif" align="middle" height="40" alt="Homepage"></a>

Accesbeginner
10.07.2015, 18:19
Hallo Hajo, wüsste nicht was ich aus deinem Code gelöscht habe.

Hier das Originale:

Option Explicit ' Variablendefinition erforderlich

Private Sub Worksheet_Change(ByVal Target As Range)
'***********************************************
'* H. Ziplies *
'* 07.07.15 *
'* erstellt von HajoZiplies@web.de *
'* http://Hajo-Excel.de/ *
'***********************************************
Dim RaBereich As Range ' Variable für Bereich
Dim RaZelle As Range ' Variable für Zelle
Set RaBereich = Range("A1:A9999") ' Bereich der Wirksamkeit
Dim StTarget As String ' Variable = Zellinhalt
If CallByName(Selection, IIf(Val( _
Application.Version) > 11, "CountLarge", "Count"), VbGet) = 1 Then
' von Nepumuk
StTarget = Target
' Zelle die in dem Bereich liegen auf die Variable schreiben
' damit werden nur noch die Zellen bearbeitet die im vorgegeben Bereich liegen
' jede Zelladresse ist einzeln angegeben
Set RaBereich = Intersect(RaBereich, Target)
If Not RaBereich Is Nothing Then
Application.EnableEvents = False
Application.Undo
If Target <> StTarget And StTarget <> "" Then
Application.Undo
End If
Application.EnableEvents = True
End If
End If
Set RaBereich = Nothing ' Variable leeren
End Sub

Dann verrate mir bitte, wie ich den Zellenwert abfangen kann, bevor es gelöscht wird. Denn ich habe wirklich nicht viel Ahnung von VBA.

Danke für deine Antwort.

Accesbeginner
11.07.2015, 00:04
OK, Das Thema ist erledigt.

mit Application.Undo

habe ich das gelöschte Zellenwert nochmals zurückschreiben lassen.
(Somit konnte ich feststellen WAS gelöscht wurde)

Erst danach habe ich diesen Wert in beiden Tabellen nochmals gelöscht.

So sieht der Code jetzt aus:

Option Explicit ' Variablendefinition erforderlich

Private Sub Worksheet_Change(ByVal Target As Range)
'***********************************************
'* H. Ziplies *
'* 07.07.15 *
'* erstellt von HajoZiplies@web.de *
'* http://Hajo-Excel.de/ *
'***********************************************
Dim RaBereich As Range ' Variable für Bereich
Dim RaZelle As Range ' Variable für Zelle
Set RaBereich = Range("A1:A9999") ' Bereich der Wirksamkeit
Dim StTarget As String ' Variable = Zellinhalt
If CallByName(Selection, IIf(Val( _
Application.Version) > 11, "CountLarge", "Count"), VbGet) = 1 Then
' von Nepumuk
StTarget = Target
' Zelle die in dem Bereich liegen auf die Variable schreiben
' damit werden nur noch die Zellen bearbeitet die im vorgegeben Bereich liegen
' jede Zelladresse ist einzeln angegeben
Set RaBereich = Intersect(RaBereich, Target)

If Not RaBereich Is Nothing Then

Application.EnableEvents = False

If Target.Value = "" Then

MsgBox "DEL wurde gedrückt" '<<< Hier Makro 2 für die DELtaste einsetzen
Application.Undo ' Löschen Rückgängig

Application.EnableEvents = True

GoTo BeendeSub

End If
ActiveCell.Offset(-1, 0).Select

MsgBox "ENTER wurde gedrückt '<<< Hier Makro 1 für Entertaste einsetzen


Application.EnableEvents = True

End If

End If
BeendeSub:
Set RaBereich = Nothing ' Variable leeren
End Sub

Lieber Hajo !

Aus deinem Code musste ich die Zeile

If Target <> StTarget And StTarget <> "" Then

folgendemassen umschreiben.

If Target.Value = "" Then

da sonst immer wieder Enter reaktion ausgelöst wurde, auch wenn ich nur DEL gedrückt habe.

Ohne deine Hilfe kam ich nicht weiter.

HERZLICHEN DANK NOCHMALS !