Wykorzystany zakres arkusza

UsedRange to jedna z właściwości obiektu Worksheet.  Zwraca wartość typu Range wyznaczony przez pierwszą i ostatnią niepustą komórkę w arkuszu. 

kliknij, aby powiększyć

Jeżeli np. pierwsza niepusta komórka to B2, a ostatnia to D10, to właściwość UsedRange to zakres Range(„B2:D10”). 
Trzeba pamiętać też o tym, że nawet jeżeli komórka wydaje się pusta, wcale nie musi taka być – może tam być np. formuła zwracającą wartość tekstu o zerowej długości. Także wstawienie zwykłej spacji w komórce sprawia, że nie jest ona już pusta. 

Do czego można ją wykorzystać? Możliwości tu jest wiele: do zaznaczania, formatowania, czyszczenia itp.  
Jedną z ciekawszych możliwości może być też sprawdzenie, czy w arkuszu nie ma np. jakichś niepotrzebnych śmieci. Mogą się pojawić m.in.  przy wielokrotnym kopiowaniu i wstawianiu różnych danych z innych plików. 
Może to w efekcie spowodować znaczne i zupełnie niepotrzebne zwiększenie rozmiaru pliku i spowolnienie pracy. 
Np.

Public Sub ZaznaczUsedRange()
ActiveSheet.UsedRange.Select
End Sub

Po uruchomieniu tej procedury – w arkuszu zostanie zaznaczony cały wykorzystywany zakres komórek. 
Np.

kliknij, aby powiększyć

Tu akurat wstawiłam spację w komórce K19. Normalnie jej nie widać, ale  dla zakresu UseRange ma znaczenie. Czasem warto sprawdzić. 



A tu możesz mi postawić kawę: 

buycoffee.to/marzatela

Widoczność arkusza

Visible czyli widoczność arkusza to jedna z właściwości obiektu Worksheet.  Określa, czy dany arkusz jest widoczny czy nie. 

kliknij, aby powiększyć

Właściwość ta może przybierać jedną z 3 wartości:

kliknij, aby powiększyć

Wartości te to:

    • xlSheetHidden
      arkusz jest ukryty
    • xlSheetVeryHidden
      arkusz jest bardzo ukryty, bez możliwości odkrycia w Excelu
    • xlSheetVisible
      arkusz jest odkryty

Po wykonaniu kodu takiej przykładowej procedury w skoroszycie z trzema arkuszami:

Public Sub Ukryte()
Arkusz1.Visible = xlSheetVisible
Arkusz2.Visible = xlSheetHidden
Arkusz3.Visible = xlSheetVeryHidden
End Sub

Efekt końcowy w arkuszu wygląda tak:

Arkusz1 – jest widoczny na liście zakładek

kliknij, aby powiększyć

Arkusz2 – niewidoczny na na liście zakładek, ale można go odkryć (klikniecie prawym przyciskiem myszy na pasku zakładek i wybór opcji Odkryj z menu podręcznego)

Następnie w formularzu wybieramy nazwę arkusza do odkrycia. Jeżeli jest kilka ukrytych arkuszy, widoczne są tu wszystkie:  

Arkusz3 – nie jest widoczny ani na pasku zakładek, ani w formularzu z ukrytymi arkuszami. Widać go jedynie w edytorze VBA w oknie obiektów Excela:

kliknij, aby powiększyć

 Właściwość Visible jest często stosowana i bardzo przydatna. 


Kurs Programowanie VBA w Excelu 365 od podstaw

 

Nazwa kodowa arkusza

Nazwa kodowa arkusza to ta nazwa arkusza widoczna w edytorze VBA (Alt+F11).

kliknij, aby powiększyć

W nawiasie, po prawej stronie nazwy kodowej znajduje się nazwa arkusza widoczna w Excelu. 

Standardowo, nazwa kodowa każdego arkusza w nowym skoroszycie jet zawsze taka sama, jak jego nazwa w Excelu. Zmiana nazwy arkusza nie ma jednak wpływu na zmianę jego nazwy kodowej.

Nazwę kodową arkusza można też zmienić. Wystarczy zaznaczyć jego nazwę i nacisnąć przycisk F4, aby pokazało się okno właściwości modułu. 


Chcąc zmienić nazwę  kodową arkusza wpisujemy nową nazwę w opcji  Name
Efekt końcowy wygląda tak:

Nazwa kodowa arkusza nie może zawierać żadnych znaków specjalnych, nie może też mieć spacji. W ten sam sposób mnożna też zmieniać nazwy kodowe modułów ogólnych. 

W kodzie VBA nazwa kodowa arkusza to właściwość CodeName obiektu Worksheet.  

Public Sub Nazwy()
Dim NazwaArkusza As String
Dim NazwaKodowaArkusza As String
NazwaArkusza = ActiveSheet.Name ’nazwa arkusza
NazwaKodowaArkusza = ActiveSheet.CodeName ’nazwa kodowa arkusza
End Sub

Ja w swoich projektach często stosuję nazwy kodowe arkuszy. W ten sposób kod jest odporny na wszelkie zmiany nazw w oknie Excela – użytkownicy często lubią to robić. 

Uwaga: zdarzyło mi się kiedyś pracować nad projektem dla klienta pracującego na wersji angielskiej Excela i w pewnym momencie zaczęły pojawiać się dziwne błędy. Okazało się, że Excel sam zaczął zmieniać nazwy kodowe arkuszy (te standardowe, wstawiane automatycznie). W moim edytorze był Arkusz1, Arkusz2, Arkusz3 – u klienta natomiast Sheet1, Sheet2, Sheet3 i edytor VBA nie znajdował używanych przeze nazw kodowych. Rozwiązaniem okazała się symulowana zmiana nazwy kodowej – wchodziłam we właściwości, zmieniałam nazwę kodową i od razu wracałam do tej, która była wcześniej. Pomogło. Nie wiem, z czego to wynikało, a całkiem często zdarza mi się tworzyć aplikacje dla klientów korzystających czy to z wersji angielskiej czy niemieckiej.   Na wszelki wypadek jednak od tej pory zawsze zmieniam nazwy kodowe. 
Generalnie zawsze zmieniam nazwy kodowe modułów ogólnych, szczególnie wtedy, gdy kod aplikacji Excela jest rozbudowany i modułów jest więcej. 


A tu możesz mi postawić kawę: 

buycoffee.to/marzatela

 

Nazwa arkusza

Nazwa arkusza to ta nazwa, która jest widoczna na dolnym pasku Excela. 

Często też jest nazywana zakładką.
Każdy arkusz ma swoją własną, unikalna nazwę.
Chcąc zmienić nazwę arkusza, wystarczy kliknąć dwukrotnie na jego nazwie i wpisać nową nazwę:

W kodzie VBA nazwa arkusza to właściwość Name obiektu Worksheet.  

Public Sub Work()
Dim NazwaArkusza As String
’nazwa aktywnego arkusza: 
NazwaArkusza=ActiveSheet.Name
(…)
End Sub

W tym przypadku zmienna NazwaArkusza zwraca nazwę aktywnego arkusza (ActiveSheet), która w dalszym ciągu instrukcji może zostać wykorzystana lub zmieniona. 

Uwaga: jeżeli w skoroszycie są formuły odwołujące się do komórek z innych arkuszy, po zmianie nazwy arkusza zostaną one automatycznie zaktualizowane, nie trzeba nic dodatkowo zmieniać. 
W kodzie VBA nie ma niestety takiej automatycznej aktualizacji – tu po zmianie arkusza trzeba wszędzie ręcznie zmienić nazwę arkusza na nową.  


Kurs Makra w Excelu 365 od podstaw

 

Ostatnia niepusta komórka w wierszu

Jak wyznaczyć ostatnią niepustą komórką w wierszu?  Bardzo podobnie jak w przypadku ostatniego wiersza w kolumnie
Wykorzystywana jest  właściwość obiektu Range czyli Range.End

Na przykładzie takiego arkusza:

kliknij, aby powiększyć

Chcąc znaleźć adres ostatniej komórki w wierszu 1 możemy skorzystać
np. z takiego kodu:

Public Sub OstatniWiersz()
Dim OstKom1
Dim OstKom2
OstKom1 = Range(„A1”).End(xlToRight).Address
OstKom2 = Cells(1, Columns.Count).End(xlToLeft).Address
End Sub

OstKom1 – od komórki A1 szukana jest ostatnia niepusta komórka w prawo
OstKom2- od ostatniej komórki w wierszu (wyznaczonej przez liczbę kolumn) w lewo. Ten sposób jest najczęściej stosowany i najbezpieczniejszy. 


A tu możesz mi postawić kawę: 

buycoffee.to/marzatela