Akademia VBA

czyli jak uzyskać władzę nad światem … danych

Sprawdzenie, czy użytkownik ustawił komórkę aktywną w zakresie danych

Kategorie: Excel VBA,Uniwersalne VBA — Dariusz Kolasa o 19:50, 3 Gru 2010

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

2 komentarze »

Komentarz- TFZ

25 maja 2014 @ 14:08

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

Komentarz- Darek Kolasa

27 maja 2014 @ 21:06

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 :)

RSS komentarzy do wpisu. Adres trackback

Zostaw komentarz

Dozwolone znaczniki XHTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>