Kezdőlap › Fórumok › Excel programozás › [Resolved] Értékváltozás figyelése
- This topic has 4 hozzászólás, 3 résztvevő, and was last updated 7 years, 6 months telt el by ipijani.
-
SzerzőBejegyzés
-
2017-03-23-23:10 #3470
Üdv mindenkinek.
Egy cella értékének változását szeretném figyelni és egy üzenetet megjeleníteni, ha változás van.
A probléma abból adódik, hogy a cella értékét nem én változtatom, hanem a figyelt cella egy másik cellára mutat (=F3).PL. ezzel próbálkoztam, de ha nem én írok be új értéket, akkor nem működik.
Private Sub Worksheet_Change(ByVal Target As Range)
Dim KeyCells As Range
‘ The variable KeyCells contains the cells that will
‘ cause an alert when they are changed.
Set KeyCells = Range(„A1:A1”)
If Not Application.Intersect(KeyCells, Range(Target.Address)) _
Is Nothing Then
‘ Display a message when one of the designated cells has been
‘ changed.
‘ Place your code here.
MsgBox „Cell ” & Target.Address & ” has changed.”
End If
End Sub
‘Private Sub Worksheet_Change(ByVal Target As Range)A segítségetek előre is köszönöm.
Üdv:
ipijani2017-03-24-08:18 #3471Szia!
Azt a cellát kell figyeltetned, aminek a változása módosítja a „figyelt cella” (F3) értékét. Úgy látom, az A1-be viszel be értéket, erre hivatkozik az F3.
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = „$A$1” Then _
MsgBox „Megváltozott az F3 cella értéke”
End Sub2017-03-24-16:10 #3479Sziasztok!
Delila megoldása is jó lehet, de:
Ha számítás eredményének a változását szeretnétek érzékelni, akkor ezt szokás tenni:
1. A fájl megnyitásakor egy globális változóba lementjük a képlet aktuális eredményét
2. A Worksheet_Calculate eseményben pedig megnézzük, hogy most mi van a cellában (target), és az megegyezik-e az induláskorval.Ha nem egyezik, akkor változás volt. Ezt kiírhatjuk, de a mi fontos, hogy az új értéket megint tegyük el a globális változónkba.
Tehát a modul tetején van egy
Dim regi_ertek
A munkafüzet megnyitási eseményéhez tartozik a figyelendő cella értékének lementése
Private Sub Workbook_Open() regi_ertek = Sheet1.Range(figyelt cella).Value End Sub
Végül a munkalap kalkuláció eseményéhez tesszük az összehasonlítást és nem egyezés esetén a lementést.
Private Sub Worksheet_Calculate() If Range(figyelt_cella).Value <> regi_ertek Then MsgBox "Változás!" regi_ertek = Range(figyelt_cella).Value End If End Sub
Imre
2017-03-24-21:27 #3481Sziasztok!
A probléma abból adódik, hogy figyelt cellában lévő adat egy külső adatforrásból származik.
(=RSLINX|PLCD!’SC_64000_Amps.Inp_Raw,L1,C1′)
Tehát magában az excelben semmiféle felhasználói beavatkozás nem történik.
Makróval megoldható lenne, hogy figyelje a cella tartalmát, de makró futás közben az adatfrissítés jóval lassabb.Köszönöm a hozzászólásokat.
üdv.
ipijani2017-03-25-01:46 #3482Kedves Imre!
Köszönöm a segítséget, működik!
Csak globális változó helyett kiíratom egy másik cellába a változás előtti értéket.Még egyszer köszönöm.
üdv:
ipijani -
SzerzőBejegyzés
- Be kell jelentkezni a hozzászóláshoz.