Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

VBA Workbook_Open / Change Zellwert in Variable einlesen
#1
Hallo zusammen,
nach einiger vergeblicher Forschungsarbeit muss ich nun doch Euch "quälen":

Ich habe in einer Datei (xlsm) nur eine Tabelle und dort in Zelle A1 einen Wert (Integer).
Nun möchte ich bei einem Change-Ereignis der Zelle Code ausführen, aber nur, wenn der Zellwert sich verändert.
Über Change habe ich keine Option gefunden (vorher-nachher-Vergleich), also will ich nun über Workbook_Open den Zellwert in eine Variable lesen und diese beim Change-Ereignis vergleichen.

Bsp: 
A1 = 10 beim Öffnen
A1 = 11 nach Change => Code ausführen
A1 = 10 nach Change => nichts tun

Code-Ansatz:
Public Prot_Org As Integer

Workbook_Open
   Prot_org = Worksheets(1).Cells(1, 1).Value
End Sub

und dann in einer Privat_Sub WS_Change den Target-Wert mit der Variable vergleichen

Danke schon vorab für Hilfe/Tipps.
Antworten Top
#2
Hi, 

So eine Überwachung eine Zelle macht man am besten mit dem worksheet_change Ereignis. Innerhalb der Prozedur fragst du mittels if target.address =" A1" then ab, ob die entsprechende Zelle verändert wurde... Was dann passieren soll stellst du nach dem then rein. 

Gruß
Antworten Top
#3
Danke vorab, aber genau das ist ja das Problem.
Wenn ich NACH dem Change-Ereignis abfrage, habe ich den Wert der Zelle davor nicht mehr.

Inhalt der Zelle VOR Change = 10
Nach Change ist es entweder 11 oder auch 10, in beiden Fällen habe ich ja ein Change-Ereignis
Aber eben NICHT mehr die 10 vorher.
=> ich kann eine reale Änderung nicht weiter im Code vergleichen.
Antworten Top
#4
Hallo,



' **************************************************************
' Modul: DieseArbeitsmappe Typ = Element der Mappe(Sheet, Workbook, ...)
' **************************************************************


Option Explicit

Private Sub Workbook_Open()
varTemp = Worksheets(1).Cells(1, 1).Value
End Sub


' **************************************************************
' Modul: Tabelle1 Typ = Element der Mappe(Sheet, Workbook, ...)
' **************************************************************


Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$A$1" Then
If Target.Value <> varTemp Then
varTemp = Target.Value
MsgBox "Wert hat sich geändert."
End If
End If
End Sub


' **************************************************************
' Modul: Modul1 Typ = Allgemeines Modul
' **************************************************************


Option Explicit

Public varTemp As Variant

Gruß Uwe
[-] Folgende(r) 1 Nutzer sagt Danke an Kuwer für diesen Beitrag:
  • opa_oli
Antworten Top
#5
Hallo Uwe,

auch Dir Danke.
Dein Code weicht von meinem nur unwesentlich ab. Problem ist, dass offenbar die Variable im WB_Open nicht belegt wird und dadurch beim Change-Ereignis der Vergleich immer fehl läuft.

Unter "DieseArbeitsmappe" steht
Code:
Option Explicit
Public varTemp As String

Private Sub Workbook_Open()
'    Application.EnableEvents = False
   varTemp = Worksheets(1).Cells(1, 1).Value
'    Application.EnableEvents = True
End Sub

und unter "Tabelle1" steht
Code:
Option Explicit
Public varTemp As String


Private Sub Worksheet_Change(ByVal Target As Range)
   If Target.Address = "$A$1" Then
       If Target.Value = varTemp Then
           Stop
       Else
           Stop '2.Stop
       End If
   End If
End Sub

Der Code stoppt nach Öffnen der Datei und Ändern der Zelle A1 beim 2. Stop und varTemp ist Leer.
Vielleicht hilft das noch als weitere Eingrenzung.
Danke.
Oliver
Antworten Top
#6
Hallo Oliver

(19.10.2019, 19:52)opa_oli schrieb: Dein Code weicht von meinem nur unwesentlich ab.

tja, manchmal macht es eben der kleine Unterschied aus. Wink

Gruß Uwe
Antworten Top
#7
Angel 
o.k., ich hätte es besser formulieren müssen:

Auch Dein Code klappt nicht, deswegen habe ich meinen nochmals gepostet und auch, wo er steht.   :22: 

Wenn ich es durchlaufen lasse und nach dem Öffnen die Zelle A1 verändere, ist im Folgecode (also im Change-Ereignis) varTemp =""

Ich weiß aber nicht, wie ich es besser formulieren soll.
Aus irgendeinem Grund klappt die Übergabe der Variablen bzw. des Inhalts aus der WB_Open an das WS_Change nicht.
Höher als Public kann man doch nicht deklarieren, oder?

Nochmals Grüße
Antworten Top
#8
Moin!
Ich habe im anderen Thread (unangekündigtes Crossposting in MS-Office-Forum.Net) geantwortet, wo eine Public-Variable hingehört!
https://www.ms-office-forum.net/forum/sh...p?t=363193

Uwe hat das hier auch gemacht, unser Opa hat das aber nicht verstanden …

Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
[-] Folgende(r) 2 Nutzer sagen Danke an RPP63 für diesen Beitrag:
  • Storax, opa_oli
Antworten Top
#9
JETZT hat es der Opa verstanden  Smile

Hallo Ralf,

1. Sorry wegen der fehlenden Ankündigung. War wohl zu spät am Abend. Ich gelobe Besserung  Smile
2. Ja, der Opa hatte es tatsächlich nicht verstanden - aber aufgrund Deiner Hilfe hat es nun geklappt

Opa_Oli
Antworten Top


Gehe zu:


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