Często występującym problemem jest próba uruchomienia kodu wymagającego zakresu danych, w czasie gdy użytkownik:
- nie ustawił się w zakresie danych (stoi w pustej komórce poza zakresem)
- nie uaktywnił właściwego typu arkusza (np stoi w arkuszu typu wykres)
- nie uaktywnił właściwego typu okna (np stoi na oknie wykresu osadzonego w arkuszu)
Tu z pomocą mogą przyjść nam 3 sprawdzające to funkcje logiczne:
Option Explicit Public Const WERSJA = "Wykresy VBA v.0.1 (Akademia-VBA.pl)" Private Function NienormalnyArkusz() As Boolean If ActiveSheet.Type <> xlWorksheet Then MsgBox "Ustaw się w arkuszu danych!", vbExclamation, WERSJA NienormalnyArkusz = True End If End Function Private Function NienormalneOkno() As Boolean If ActiveWindow.Type <> xlWorkbook Then MsgBox "Ustaw się w oknie danych!", vbExclamation, WERSJA NienormalneOkno = True End If End Function Private Function BrakZakresu() As Boolean If Len(ActiveCell) = 0 Then MsgBox "Ustaw się w niepustej komórce zakresu danych!", vbExclamation, WERSJA BrakZakresu = True End If End Function |
Takie funkcje bardzo upraszczają kod procedury głównej, w naszym przypadku uruchamiającej formularz generujący wykresy. Powinny być raczej prywatne, ponieważ nie są zbyt przydatne jako funkcje arkuszowe
Sub UruchomFormularz() If NienormalnyArkusz Then Exit Sub If NienormalneOkno Then Exit Sub If BrakZakresu Then Exit Sub fmWykresy.Show End Sub |
Hej
Czy abstrahując od zróżnicowania komunikatów nie załatwiłoby czasem dwóch pierwszych przypadków:
[cc lang=”vb”]
If TypeName(Selection)<>„Range” …
[/cc]
PS. I chyba warto zaznaczyć, że w Twoich funkcjach istotna jest kolejność ich wywołania w procedurze UruchomFormularz.
Pzdr
TFZ
No oczywiście, że jeszcze nigdy w życiu nie użyłem tej jakże interesującej funkcji 🙂
Kolejność wywołania też oczywiście ma znaczenie
Dzięki za uwagi 🙂