Funkcja użytkownika ANAZWA, zwraca nazwę wskazanego arkusza

Gotowe szablony, skrypty, makropolecenia i rozszerzenia. Tutaj możesz pochwalić i podzielić się swoją twórczością z innymi użytkownikami

Oceń tę funkcję. (Mogą to zrobić tylko zalogowani użytkownicy)

1. Niepotrzebna.
0
Brak głosów
2. Może się przydać.
0
Brak głosów
3. Dobrze, że została napisana.
0
Brak głosów
 
Liczba głosów: 0

Awatar użytkownika
Jermor
Posty: 2233
Rejestracja: sob paź 12, 2013 11:09 am
Kontakt:

Funkcja użytkownika ANAZWA, zwraca nazwę wskazanego arkusza

Post autor: Jermor »

Napisałem funkcję użytkownika, która zwraca nazwę wybranego arkusza.
Wywołanie funkcji:
ANAZWA(nr arkusza; komunikat)
nr arkusza - jest numerem arkusza liczonym kolejno od lewej do prawej.
komunikat - jest ciągiem znakowym, który ma zastąpić standardowy komunikat generowany przez funkcję, wtedy gdy numer arkusza jest nieprawidłowy.

Funkcja zwraca komunikat, gdy numer arkusza jest mniejszy od 1 albo większy od ilości arkuszy w skoroszycie. Standardowe komunikaty, to "nr arkusza < 1" gdy podano numer mniejszy od 1 i "numer arkusza > ilość" gdy numer arkusza jest większy niż liczba arkuszy w skoroszycie. "nr arkusza" i "ilość" są konkretnymi liczbami związanymi ze skoroszytem i argumentem użytym podczas wywołania funkcji.
Pominięcie wszystkich argumentów zwraca nazwę aktualnego arkusza.
Dodane 4 grudnia 2020 po dyskusji z kolegą @Rafkus o działaniu funkcji w środowisku Apache OpenOffice.
Okazuje się, że Calc Apache OpenOffice nie pozwala na pominięcie argumentu poprzez zasygnalizowanie tego faktu samym średnikiem. W odróżnieniu od LibreOffice, który w takiej sytuacji przyjmuje wartość takiego pominiętego argumentu jako 0, Apache OpenOffice proponuje poprawienie funkcji poprzez usunięcie średnika i próbę wykonania tak zmodyfikowanej funkcji. Brak zgody skutkuje pojawieniem się błędu "Błąd:511 - Brak argumentu".
Dlatego ostatni z poniższych przykładów zwróci błąd 511, gdy nie wyrazi się zgody na poprawienie zapisu funkcji, albo komunikat "0<1", gdy taką zgodę się zatwierdzi. Usunięty średnik sprawi, że "tekst" będzie teraz pierwszym argumentem funkcji. Ponieważ ten argument w definicji funkcji jest typu Long, to tekst zostanie przekazany do funkcji jako wartość 0.

Przykłady:
  • =ANAZWA(3) zwróci nazwę trzeciego arkusza w skoroszycie. Jeśli takiego nie ma (np. są tylko dwa) zwróci standardowy komunikat "3 > 2".
  • =ANAZWA() zwróci nazwę arkusza, w którym została użyta.
  • =ANAZWA(3;"") zwróci nazwę trzeciego arkusza w skoroszycie. Jeśli takiego nie ma (np. są tylko dwa) zwróci komunikat w postaci pustego ciągu znakowego.
  • =ANAZWA(;"tekst") zwróci "tekst", gdyż pierwszy argument jest pominięty i traktowany jak wartość 0.
Funkcja:

Kod: Zaznacz cały

Function ANazwa (Optional i As Long, Optional s As String) As String
REM Funkcja zwraca nazwę arkusza podanego jako kolejny jego numer.
REM Brak argumentu zwraca nazwę aktualnego arkusza. Pominięcie argumentu jest traktowane jak podanie wartości 0.
REM Argument mniejszy od 1 lub większy od ilości arkuszy jest sygnalizowany komunikatem.
REM Drugi argument funkcji definiuje postać komunikatu
REM Autor: Jermor (2020) Polskie forum LibreOffice i Apache OpenOffice
Dim oDok As Object, skom1 As String, skom2 As String
oDok=ThisComponent
skom1=i & " > " & oDok.Sheets.count
skom2=i & " < 1"
If Not IsMissing(s) Then skom1=s : skom2=s
If IsMissing(i) Then ANazwa=oDok.CurrentController.getActiveSheet.Name : Exit Function
If i<1 Then ANazwa=skom2 : Exit Function
If i> oDok.Sheets.count Then ANazwa=skom1	:Exit Function
ANazwa=oDok.Sheets.getByIndex(i-1).Name
End Function
AOO 4.1.15, LO 7.5.9 (x64) na Windows 10 64bit
Ważne!
Jeśli twój problem został rozwiązany, wróć do swojego pierwszego postu, przejdź do edycji i dopisz [SOLVED] w temacie.
Inni, którzy mają podobny problem, będą wiedzieli, że istnieje jego rozwiązanie.
ODPOWIEDZ