Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
540to544
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
540to544
540to544
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Fallunterscheidung im Change-Ereignis

Fallunterscheidung im Change-Ereignis
04.01.2005 18:11:04
Matthias
Hallo,
ich möchte im Change-Ereignis eines Blattes eine Fallunterscheidung nach "Eingabe" oder "Löschen" von Zellinhalten machen.
Hintergrund: beim Löschen mit der "Entf"-Taste bleibt die ActiveCell gleich. Nach einer Eingabe, die mit "Enter" abgeschlossen wird, ändert sich die ActiveCell im Blatt.
Daher hatte ich folgende Idee:

Public Ereignis As String
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Selection.ClearContents = True Then Ereignis = "Löschen"
End Sub

Leider gibt der Befehl Selection.ClearContents ja keinen True oder False Wert zurück. In der Recherche und in den FAQ habe ich nichts passendes gefunden. (Das Problem ist ja immer, dass man nicht nach einem Befehl sucht, den man noch nicht kennt.) Weiss da jemand weiter?
Gruß
Matthias

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

Betreff
Datum
Anwender
Anzeige
AW: Fallunterscheidung im Change-Ereignis
paula
hi Matthias
wieso ändert sich bei Eingabe ENTER die ActiveCell, das liegt doch nur an deinen Einstellungen (Extras/Optionen). Du als Profi solltest es doch eigentlich wissen.
gruss paula
ANFÄNGER
Das funktionert hier nicht
Matthias
Hallo Paula,
die von Dir erwähnten Einstellung sind leider dateiübergreifend. In anderen Dateien ist das Anspringen der darunterliegenden Zeile durchaus erwünscht.
Im von mir beschriebenen Fall ist es aber so, dass Eingaben von Zellinhalten und deren Löschen protokolliert werden sollen:

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
'+++ Einträge für log generieren +++
Ereignis = "Eintrag"
Wert = Cells(ActiveCell.Row - 1, ActiveCell.Column).Text
End Sub

Dieser Code funktionert bei Eingaben, die mit Enter abgeschlossen werden. (ActiveCell.Row - 1 weil nach der Eingabe eine Zelle nach unten gesprungen wird.)
Beim Löschen bleibt aber die betroffene Zelle aktiv, sodass fälschlicherweise die darüberiegende Zelle adressiert wird.
Das ist eben mein Problem.
Gruß
Matthias
PS: Ich hab bei VBA-Kenntnisse nur "gut" angegeben.
Anzeige
Tipp
04.01.2005 19:17:03
Christoph
Hi Matthias
mein Tipp:
du könntest den "Target.Value" im Change-Ereignis abfragen (Code s.u. - bau dir noch die nötigen Fehlerabfangungen ein)
oder andere Möglichkeit: schau dir mal "OnKey" in der OL an
Gruß
Christoph

Option Explicit
Dim strNew$, strOld$
Private Sub Worksheet_Change(ByVal Target As Range)
strNew = Target.Text
MsgBox strOld & "/" & strNew
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
strOld = Target.Text
End Sub

AW: Das funktionert hier nicht
ChrisL
Hi Matthias
Erstmal verwende Target statt ActiveCell, müsstest du wissen ;-))
Entweder versuch anhand des Protokolls zu bestimmen, ob Eintrag schon vorhanden oder nicht. Oder z.B.

Private Sub Worksheet_Change(ByVal Target As Range)
Dim wert As String
wert = Target
If wert = "" Then
MsgBox "lass mal"
Else
MsgBox "protokolliere Wert: " & Target
End If
End Sub

Schliesslich könntest du auch den Ausgangswert mittels SelectionChange Ereignis speichern und mit dem neuen Wert abgleichen.
Gruss
Chris
Anzeige
Vielen Dank Christoph M und ChrisL!
Matthias
Beide Tipps haben mir geholfen. So klappt es:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
AlterWert = Target.Text
End Sub


Private Sub Worksheet_Change(ByVal Target As Excel.Range)
NeuerWert = Target.Text
If NeuerWert = "" And AlterWert <> "" Then
Ereignis = "Löschen"
Else: Ereignis = "Eingabe"
End If
End Sub

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige