Tento kód má ale nevýhodu v tom, že označuje oblasti a kopíruje ich, čo je pomalé. Ďalej nefunguje, ak zmena oblasti je viacstĺpcová (typicky mazanie). Tu je jednoduchší kód, ale pre oba platí, že treba dať pozor, ako vzniká hodnota v sledovanej zdrojovej oblasti. Či napísaním, alebo výpočtom. Treba sledovať zmenu v takej oblasti, ktorá má priamy vplyv od užívateľa na kopírované hodnoty. Inak by bolo potrebné kopírovať celú vyplnenú časť pri každom Calculate. Lebo vzorec nevyvolá Worksheet_Change. Iba užívateľ.
Kód: Vybrat vše
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Oblast As Range, Area As Range
Set Oblast = Intersect(Range("G:G"), Target) 'definice změnené oblasti. Tu je lepšie kontrolovať iba rozumnú oblasť, napr. G1:G1000.
If Not Oblast Is Nothing Then 'test výběru
Application.ScreenUpdating = False 'zakazani updatovani stranky
For Each Area In Oblast.Areas 'projít všechny změnené podoblasti
With Area
wsCiel.Cells(.Row, 1).Resize(.Cells.Count).Value = .Value 'Přenesení hodnoty
End With
Next Area
Application.ScreenUpdating = True 'zapnuti updatovani stranky
End If
End Sub
Príklad: