Nabídka portálu se při zobrazení článku přesouvá na konec pravého sloupce nabídek.
Trik pro programování maker (VBA) v MS Aplikacích |
Autor: SwitCZ
| Zdroj:
| Vytvořeno: 7.7.2003 14:26:08
| Publikováno: 7.7.2003 14:26:08
| Čtenářů: 5719
| Unikátních: 5427
|
Jak ošetřit události v Excelu, Wordu, Accessu atd.
Tento trik se hodí všem, kteří potřebují občas, tak jako já, v událostech Excelu (SelectionChange, Change) provádět nějaké akce a následnou změnu buněk, nebo jejich opravu.
Tím, že v těle procedury události změníte obsah buňky, můžete spustit cyklus, kdy se stále znovu a znovu vracíte
do události, protože se událost vyvolá vždy při změně znovu.
Řešení je velice jednoduché.
Použijte vždy před jakoukoliv změnou vlastnost EnableEvents, která
dočasně vypne zpracování událostí objektu a umožní vám provést změny bez nového vyvolání události.
Syntaxe:
Application.EnableEvents =
True |
Zapne zpracování událostí |
Application.EnableEvents =
False |
Vypne zpracování událostí |
Příklad:
Uvedu příklad, kdy ověřuji data v buňce Excelu, a pokud nejsou validní,
nedovolím opustit buňku, dokud validní nebudou. Validní data jsou možná pouze dvojího typu, a to:
a) Prázdná buňka
b) Číslo od 2 do 5
Spusťte Excel a vytvořte nový sešit.
Spusťte Microsoft Visual Basic for Application.Spustí se kombinací kláves (ALT+F11) z Excelu.
Poklikejte myší na objekt List1 (levá strana strom) a do kódu objektu vložte následující kód.
Private valRow As Long
Private valCol As Long
Private Sub Worksheet_Change( _
ByVal Target As Range)
'Jen pro sloupec 1, radek 1
If Target.Row = 1 And _
Target.Column = 1 Then
If Len(Target.Value) = 0 Then
valRow = 0
valCol = 0
ElseIf IsNumeric(Target.Value) Then
If CLng(Target.Value) > 1 And _
CLng(Target.Value) < 6 Then
valRow = 0
valCol = 0
Else
valRow = Target.Row
valCol = Target.Column
End If
Else
valRow = Target.Row
valCol = Target.Column
End If
Else
valRow = 0
valCol = 0
End If
End Sub
Private Sub Worksheet_SelectionChange( _
ByVal Target As Range)
If valRow <> 0 Then
Application.EnableEvents = False
Excel.ActiveSheet.Cells(valRow, _
valCol).Select
Application.EnableEvents = True
End If
End Sub
Snad vám tento trik opět trošku pomůže při vaší práci.
Použitelné pro Word, Excel, Outlook, Access.
Testováno
na verzích aplikací Ex2000, W2000.
|