EXCEL - macro sledující změnu buňky, aniž bych dělal v excelu cokoliv jiného...
Zdravím "exceláře"
bojuju s tímto problémem:
Mám 3 externí zdroje dat, která se mi zapisují do buněk A1, B1, C1 (mohu nastavit i zapisování každého čísla pod sebe do příslušného sloupce). Bohužel nejsem schopen zajistit synchronizaci času u jednotlivých zdrojů, ale pro moji potřebu je to nutnost. Čili potřebuji na základě změny hodnoty jakékoliv z buněk (A1 nebo B1 nebo C1) zachytit čas - třeba do vedlejších sloupců (sloupec D pro data z sl. A, sl.E pro data ze sl. B, sl.F pro data ze sl. C). Přesnost času potřebuji na desetiny, či setiny vteřiny.
Jednou z cest (a já myslím, že chytrou!) by bylo macro, které by hlídalo jen změnu A1 nebo B1 nebo C1 buňky (sem by zapisovaly ony 3 externí zdroje). Aby se mi data ale neztratila a nepřepisovala, tak pokaždé zachycené změně v hodnotách by se vložil nový řádek jako první řádek, tj. poslední data by se posunula dolů a tím by se mi časově řadila od nejstarších k nejnovějším a macro by ještě do sloupce D zapsalo čas ve formátu 07:25.15 (hh:mm:ss.00) nebo i celý datum.
Vím o funkci Worksheet_Change(), ale nějak ji neumím použít k mému prospěchu a ani netuším, jestli je to ta správná funkce na zachycení změny v buňce.
Data se mění automaticky, s nepravidelnou četností (1x za 1s nebo taky 10x za 1s), všechny zdroje jsou navzájem nezávislé a s kurzorem v excelu se nic neděje, žádné klikání na jinou buňku. Prostě se jen mění data v oněch buňkách, uživatel bude mimo pc.
Našel jsem toto:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = "2" Then
With Cells(Target.Row, Target.Column - 1)
.Value = Now
.EntireColumn.AutoFit
End With
End If
End Sub
... ale je to pro moji věc nepoužitelné, reaguje to až po pohybu kurzoru na další a další buňku
Moc bych chtěl poprosit nějakého "exceláře" - poradil by někdo s kodém, jak toto udělat? Děkuji.
Worksheet_Change sa pri zmene bunky externým zdrojom nespúšťa. Na toto sa skôr hodí udalosť AfterRefresh, viď How to Use the Query BeforeRefresh and AfterRefresh Events.
Prípadne ak používaš DDE link, tak použi SetLinkOnData.
Ďalšia možnosť je WorkSheet_Calculate, ale to nie je celkom čisté riešenie.