Pri spracovaní zmeny nejakého rozsahu sa často zabúda na to, že sa môže meniť viacero buniek naraz, t.j. rozsah Target neobsahuje len jednu bunku. Riešení môže byť viacero. Môže sa napríklad spracovať každá bunka rozsahu pomocou cyklu For Each, čo však môže robiť problém pri zmene veľkého rozsahu buniek. Alebo sa môže spracovať len jedna bunka (ľavá horná) celého rozsahu, čo môže občas vadiť.
Keby si chcel spracovávať zmenu v každej bunke, môžeš to napísať nejako takto:
For Each cell in Target.Cells
... (tu už pracuješ s premennou cell)
Next cell
Ak by si chcel spracovávať len prvú bunku, tak by to mohlo vyzerať takto:
Set cell = Target.Resize(1, 1)
... (tu už pracuješ s premennou cell)
Zistiť, či bolo zmenených viacero buniek naraz, je jednoduché:
If Target.Cells.Count > 1 Then
Tvoj program by som prepísal asi do takéhoto tvaru:
Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo ErrorHandler
Application.EnableEvents = False
Set intersection = Intersect(Target.Cells, Range("O:P"))
If Not intersection Is Nothing Then
For Each cell In intersection
If cell.Column = 15 Then cell.Offset(0, 1) = cell.Offset(-1, 0) - cell.Value
If cell.Column = 16 Then cell.Offset(0, -1) = cell.Offset(-1, -1) - cell.Value
Next
End If
ErrorHandler:
Application.EnableEvents = True
End Sub