Akademia VBA

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

CurrentRegion bez nagłówka

Kategorie: Excel VBA — Dariusz Kolasa o 12:08, 15 Gru 2010

Często potrzebujemy obiektu prawie identycznego z bieżącym zakresem, ale bez wiersza nagłówkowego. Oczywiście można go za każdym razem obliczyć na podstawie właściwości obiektu Range, lub zrobić to raz i zapisać w postaci funkcji

Function BiezacyZakresBezNaglowka() As Excel.Range
 
    'Oczywiscie zakładamy,
    'że komórka aktywna jest w zakresie
 
    Dim Zakres As Range
    Dim LW As Long, LK As Long
 
    Set Zakres = ActiveCell.CurrentRegion
    LW = Zakres.Rows.Count
    LK = Zakres.Columns.Count
    Set BiezacyZakresBezNaglowka = _
        Range(Zakres.Cells(2, 1), Zakres.Cells(LW, LK))
 
End Function
 
Sub TestFunkcji()
 
    'dla sprawdzenia pokolorujemy
    BiezacyZakresBezNaglowka.Interior.ColorIndex = 34
 
End Sub

CurrentRegion bez nagłówka

Kategorie: Excel VBA — Dariusz Kolasa o 12:08, 15 Gru 2010

Często potrzebujemy obiektu prawie identycznego z bieżącym zakresem, ale bez wiersza nagłówkowego. Oczywiście można go za każdym razem obliczyć na podstawie właściwości obiektu Range, lub zrobić to raz i zapisać w postaci funkcji

Function BiezacyZakresBezNaglowka() As Excel.Range
 
    'Oczywiscie zakładamy,
    'że komórka aktywna jest w zakresie
 
    Dim Zakres As Range
    Dim LW As Long, LK As Long
 
    Set Zakres = ActiveCell.CurrentRegion
    LW = Zakres.Rows.Count
    LK = Zakres.Columns.Count
    Set BiezacyZakresBezNaglowka = _
        Range(Zakres.Cells(2, 1), Zakres.Cells(LW, LK))
 
End Function
 
Sub TestFunkcji()
 
    'dla sprawdzenia pokolorujemy
    BiezacyZakresBezNaglowka.Interior.ColorIndex = 34
 
End Sub

CurrentRegion bez nagłówka

Kategorie: Excel VBA — Dariusz Kolasa o 12:08, 15 Gru 2010

Często potrzebujemy obiektu prawie identycznego z bieżącym zakresem, ale bez wiersza nagłówkowego. Oczywiście można go za każdym razem obliczyć na podstawie właściwości obiektu Range, lub zrobić to raz i zapisać w postaci funkcji

Function BiezacyZakresBezNaglowka() As Excel.Range
 
    'Oczywiscie zakładamy,
    'że komórka aktywna jest w zakresie
 
    Dim Zakres As Range
    Dim LW As Long, LK As Long
 
    Set Zakres = ActiveCell.CurrentRegion
    LW = Zakres.Rows.Count
    LK = Zakres.Columns.Count
    Set BiezacyZakresBezNaglowka = _
        Range(Zakres.Cells(2, 1), Zakres.Cells(LW, LK))
 
End Function
 
Sub TestFunkcji()
 
    'dla sprawdzenia pokolorujemy
    BiezacyZakresBezNaglowka.Interior.ColorIndex = 34
 
End Sub

Tworzenie i użycie własnej zmiennej obiektowej typu Excel.Range

Kategorie: Excel VBA — Dariusz Kolasa o 15:30, 27 Cze 2010

Przykład na tworzenie własnej zmiennej typu Range i posługiwanie się właściwościami obiektu Range, typu Range:

  1. CurrentRegion
  2. Rows(W)
  3. Columns(K)
  4. Cells(W,K)
Sub WlasnaZmiennaRange()
 
    Dim Zakres As Range
    Dim LW As Long, LK As Long
 
    'sprawdzenie, czy aktywna komórka znajduje się
    'w zakresie danych, przy pomocy własnej funkcji logicznej
    If fnBrakZakresu Then Exit Sub
 
    'ustawienie referencji do obiektu
    'na podstawie właściwości "Bieżący obszar" aktywnej komórki
    Set Zakres = ActiveCell.CurrentRegion
 
    'kolorowanie zakresu poprzez własną zmienną
    Zakres.Interior.ColorIndex = 35
 
    'odczyt liczby wierszy i kolumn zakresu
    LW = Zakres.Rows.Count
    LK = Zakres.Columns.Count
 
    'wyświetlenie wartości zmiennych w oknie debuggera
    Debug.Print "lw: " & LW
    Debug.Print "lk: " & LK
 
    'kolorowanie skrajnych wierszy
    Zakres.Rows(1).Interior.ColorIndex = 34
    Zakres.Rows(LW).Interior.ColorIndex = 34
 
    'i kolumn
    Zakres.Columns(1).Interior.ColorIndex = 34
    Zakres.Columns(LK).Interior.ColorIndex = 34
 
    'kolorowanie narożników zakresu
    Zakres.Cells(1, 1).Interior.ColorIndex = 36
    Zakres.Cells(1, LK).Interior.ColorIndex = 36
    Zakres.Cells(LW, 1).Interior.ColorIndex = 36
    Zakres.Cells(LW, LK).Interior.ColorIndex = 36
 
End Sub

Na koniec funkcja logiczna, z której korzysta powyższa procedura:

Function fnBrakZakresu() As Boolean
    If Len(ActiveCell) = 0 Then
        MsgBox "Ustaw się w niepustej komórce zakresu danych!"
        fnBrakZakresu = True
    End If
End Function