Arkusze

Z Henryk Dąbrowski
Wersja z dnia 22:36, 18 wrz 2022 autorstwa HenrykDabrowski (dyskusja | edycje) (1 wersja)
(różn.) ← poprzednia wersja | przejdź do aktualnej wersji (różn.) | następna wersja → (różn.)
Przejdź do nawigacji Przejdź do wyszukiwania
22.03.2020




Uchwyt do arkusza przez indeks, nazwa arkusza i zmiana nazwy arkusza

Sub Arkusz1()
    Dim sName as String
    Dim oSht  as Object
    'uchwyt do arkusza przez indeks; w tym przypadku uzyskujemy uchwyt do pierwszego arkusza:
    oSht = ThisComponent.getSheets().getByIndex(0)
    oSht.Name = "Test" 'zmiana nazwy arkusza
    sName = oSht.getName() 'uzyskanie nazwy arkusza
    MsgBox sName
End Sub



Uchwyt do arkusza przez nazwę, uaktywnienie arkusza

Sub Arkusz2()
    Dim sName as String
    Dim oSht as Object
    oSht = ThisComponent.getSheets().getByName("Test") 'uchwyt do arkusza przez nazwę
    ThisComponent.CurrentController.setActiveSheet( oSht ) 'mając uchwyt, możemy uczynić arkuszem aktywnym
End Sub



Uchwyt do aktywnego arkusza, liczba arkuszy w skoroszycie, uaktywnienie ostatniego arkusza

Sub Arkusz3()
    Dim n as Long
    Dim oSht as Object
    oSht = ThisComponent.getCurrentController().getActiveSheet() 'uchwyt do aktywnego arkusza
    MsgBox oSht.getName() 'nazwa aktywnego arkusza
    n = ThisComponent.getSheets().getCount() 'liczba arkuszy
    MsgBox n
    oSht = ThisComponent.getSheets().getByIndex(n - 1) 'uchwyt do ostatniego arkusza
    ThisComponent.CurrentController.setActiveSheet( oSht ) 'uaktywnienie ostatniego arkusza
End Sub



Sprawdzanie, czy arkusz o podanej nazwie istnieje, wstawianie nowego arkusza, kasowanie arkusza

Sub Arkusz4()
    Dim sNew, sOld as String
    sNew = "NowyArkusz"
    sOld = "StaryArkusz"
    If NOT ThisComponent.getSheets().hasByName( sNew ) Then 'sprawdza czy arkusz o podanej nazwie już istnieje
         ThisComponent.getSheets().insertNewByName( sNew, 2 ) 'wstawia nowy arkusz na pozycję 3 (z indeksem 2)
    End If
    If ThisComponent.getSheets().hasByName( sOld ) Then 'sprawdza czy arkusz istnieje
        ThisComponent.getSheets().removeByName( sOld ) 'kasuje arkusz o wskazanej nazwie
    End If
End Sub


Przeglądając powyższe procedury zauważamy, że wygodnie jest zdefiniować obiekt:
  oSheets = ThisComponent.getSheets()
bo skraca to kod procedur i czyni zapis bardziej przejrzystym. Obiekt oSheets jest uchwytem do skoroszytu, czyli do zbioru wszystkich arkuszy w dokumencie.


Wstawianie nowego arkusza, kopiowanie arkusza, kasowanie i przenoszenie arkusza

Sub Arkusz5()
    Dim oSheets as Object
    oSheets = ThisComponent.getSheets()
    oSheets.insertNewByName("Nowy", 1) 'wstawia nowy arkusz na pozycję 2
    MsgBox "Nowy arkusz został wstawiony"
    oSheets.copyByName("Nowy", "Nowy-kopia", 2) 'tworzymy kopię arkusza "Nowy" i wstawiamy ją na pozycję 3
    MsgBox "Kopia arkusza została utworzona"
    oSheets.removeByName("Nowy") 'kasujemy arkusz o nazwie "Nowy"
    MsgBox "Arkusz został skasowany"
    oSheets.moveByName("Nowy-kopia", 0) 'przenosimy arkusz na pozycję pierwszą
End Sub



Polecane strony internetowe

Więcej informacji Czytelnik znajdzie na stronach:

Macros - Basic reference - Calc - Sheets

Spreadsheet common – Working with sheets

The Structure of Spreadsheet Documents





LibreOffice Calc – makra                   Strona główna