Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1352to1356
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
Inhaltsverzeichnis

vorherigen Zellinhalt Ermitteln

vorherigen Zellinhalt Ermitteln
12.03.2014 14:17:01
Jonas
Hallo zusammen,
ich bin VBA Neueinsteiger und benötige eure Hilfe :)
Auf meinem Arbeitsblatt soll eine Auswahl an Zellen überwacht werden.
Je nachdem was dort eingetragen wird soll eine Aktion durchgeführt werden.
In meinem Beispiel gibt es eine Nachricht "xyz" wenn eine "1" eingetragen wird.
Private Sub Worksheet_Change(ByVal Target As Range)
Dim KeyCells As Range
Set KeyCells = Range("A26:CD26")
If Not Application.Intersect(KeyCells, Range(Target.Address)) _
Is Nothing Then
Range(Target.Address).Activate
If ActiveCell = "1" Then
MsgBox "xyz"
End If
End If
End Sub

Soweit klappt das bei mir auch.
Jetzt soll die Nachricht "xyz" zusätzlich durch den vorherigen Wert der Zelle bedingt sein.
Zum Beispiel soll Sie nur erscheinen, wenn der alte Zellwert "x" war und der neue Zellwert "1" ist.
Wie kann ich den Vergleich mit dem alten Zellwert realisieren?
Danke schon mal für die Hilfe!
Grüße, Jonas

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: vorherigen Zellinhalt Ermitteln
12.03.2014 14:57:21
EtoPHG
Hallo Jonas,
1. Du musst dir in einer (globalen) Variablen für das Modul den alten Wert merken und zwar bei der Auswahl (SelectionChange-Ereignis) den vorherigen Wert merken, und dann zum Vergleich hinzuziehen.
2. Dein jetzigen Code mal von überflüssigem Balast befreien und dann ausbauen.
3. Allen alten Code durch diesen ersetzen:
Option Explicit
Const sWatchRange = "A26:CD26"
Dim vOldValue As Variant
Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo errExit
If Not Intersect(Target, Range(sWatchRange)) Is Nothing Then
Application.EnableEvents = False
If Target.Count > 1 Then
MsgBox "Bitte nur 1 Zelle gleichzeitig ändern!", vbCritical, "Mehrfachbereich"
Application.Undo
Else
If Target = 1 And vOldValue = "x" Then
' Dein Code
MsgBox "xyz"
End If
End If
End If
errExit:
Application.EnableEvents = True
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target, Range(sWatchRange)) Is Nothing Then
If Target.Count > 1 Then
MsgBox "Bitte nur 1 Zelle gleichzeitig selektieren!", vbCritical, "Mehrfachbereich"
Target.Cells(1, 1).Select
Else
vOldValue = Target
End If
End If
End Sub
Gruess Hansueli

Anzeige
AW: vorherigen Zellinhalt Ermitteln
12.03.2014 15:27:18
fcs
Hallo Jonas,
im Prinzip kann man das durch Speichern des Wertes nach der Selektion der Zelle erreichen.
Probleme kann es geben bzw. es funktioniert nicht, wenn eine Zelle in A26:CD26 direkt nach dem Öffnen der Datei geändert wird, ohne vorher eine Zelle zu selektieren.
Günstiger wäre es wenn du die "alten" Werte in einer separaten Zeile eingeben würdest, dann könnte man nach meiner Einschätzung die logische Abfolge der Werte einfacher im Code verarbeiten.
Gruß
Franz
Private oldValue As Variant 'Merker für den alten Wert der Zellen
Private Sub Worksheet_Change(ByVal Target As Range)
Dim KeyCells As Range
Set KeyCells = Range("A26:CD26")
If Not Application.Intersect(KeyCells, Target) _
Is Nothing And Target.Cells.Count = 1 Then
Application.EnableEvents = False
Select Case Target.Value
Case ""
'Es gab keinen vorherigen Wert, Zelle ist leer
Case 1
Select Case oldValue
Case "x", "X"
MsgBox "1 & x -- xyz"
Case "y", "Y"
MsgBox "1 & y -- ABC"
Case Else
MsgBox "unzulässige alter Wert """ & oldValue & """ für ""1"""
End Select
Case 2
Select Case oldValue
Case "x", "X"
MsgBox "2 & x -- ZYX"
Case "y", "Y"
MsgBox "2 & y -- cab"
Case Else
MsgBox "unzulässige alter """ & oldValue & """ Wert für ""2"""
End Select
Case Else
'andere Eingabewerte
End Select
Application.EnableEvents = True
End If
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim KeyCells As Range
Set KeyCells = Range("A26:CD26")
If Not Application.Intersect(KeyCells, Target) _
Is Nothing And Target.Cells.Count = 1 Then
oldValue = Target.Range("A1").Value
Else
oldValue = Null
End If
End Sub

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige