LibreOffice Calc VBA LibreOffice Calc umożliwia tworzenie własnych funkcji i procedur przy użyciu składni języka VBA. Dostęp do edytora makr: Narzędzia->Makra->Zarządaj makrami->libreoffice Calc Aby rozpocząć pracę należy wprowadzić nazwę makra a następnie użyć przycisku Nowy. Uruchomienie programu (F5)
1. Deklaracje funkcji i procedur Funkcje definiowane są z użyciem słowa kluczowego Function Function funkcja(arg1 As Integer, arg2 As Double) As String kod funkcji End Function Funkcja ta przyjmuje dwa argumenty liczbowe: arg1 - liczba całkowita, arg2 - liczba zmiennoprzecinkowa, Funkcja zwraca łańcuch znakowy (string). Liczba argumentów wejściowych może być dowolna, oddzielona przecinkami. Po deklaracji typu funkcji następuje kod funkcji zakończony poleceniem end function. W przypadku procedur słowo kluczowym jest słowo Sub. Ponieważ procedura nie zwraca żadnej wartości, po liście argumentów nie występuje instrukcja As. Sub procedura(arg1 As Integer, arg2 As Double) kod procedury End Sub 1.1. Typy zmiennych Podstawowymi typami zmiennych są: Boolean - typ logiczny true / false, Byte, typ całkowitoliczbowy bez znaku, zakres 0-255 Integer - typ całkowitoliczbowy, zakres od -32 768 do 32 767 Long - typ całkowitoliczbowy, Single, Double - typ zmiennoprzecinkowy pojedynczej i podwójnej precyzji String - łańcuch znakowy (tekst) Date - data Object obiekt 1.2. Instrukcje sterujące Instrukcje sterujące służą do warunkowego wykonywania bloków kodu. Do instrukcji sterujących zaliczamy: instrukcje if-else:
if warunek then kod1 else kod2 end if W przypadku, spełnienia warunku wykonywana jest instrukcja kod1. Instrukcja else jest opcjonalna i jest wykonywana,gdy warunek nie jest spełniony. instrukcje Select-Case. Jest to instrukcja wielokrotnego wyboru, np.: Select Case Range("A1").Value Case 2 Range("B1").Value = "ndst" Case 3 Range("B1").Value = "dst" Case 3.5 Range("B1").Value = "pdst" Case 4 Range("B1").Value = "db" Case 4.5 Range("B1").Value = "pdb" Case 5 Range("B1").Value = "bdb" Case Else Range("B1").Value = "nieklas." End Select W zależności od wartości w komórce o adresie A1, w komórce B1 wpisywany jest odpowiedni tekst. Instrukcja Case Else jest wykonywana, gdy żaden z powyższych przypadków nie był spełniony. Polecenie Range służy do odwoływania się do komórek poprzez adres bezwględny i z góry określony. Jeżeli odwołanie jest zależne od instrukcji, wtedy korzystać należy z polecenia Cells (przykład w opisie pętli For). pętla For-To-Next - służy do wielokrotnego, z góry określonego wykonywania bloku instrukcji. Dim licznik As Integer Dim silnia As Long silnia = 1 For licznik = 1 To 5 Step 1 silnia = silnia * licznik Cells(licznik, 1) = silnia Next licznik
W poniższym kodzie w kolejnych wierszach umieszczone są wartości silni. W tym celu zadeklarowano dwie zmienne pomocnicze: licznik - zliczający ilość wykonywanych pętli oraz silnia przechowująca kolejne wartości funkcji silni. Instrukcja Step definiuje zmianę wartości licznika (o ile wartość zmiennej licznik ma się zwiększać w każdej iteracji). Jeżeli wartość kroku jest równa 1, instrukcja ta może być pominięta. For Each-Next - służy do obsługi zbiorów danych (kolekcji). For Each element In Range("A1:A10") If element.value < 0.5 Then element.interior.color = RGB(255, 0, 0) End If Next
ZADANIA 1. Napisz procedurę, która będzie wyświetlała prosty komunikat Msgbox 2. Napisz funkcję, która będzie funkcją losująca z pewnego przedziału podanego przez użytkownika (min, max przedziału) rnd() wbudowana funkcja losująca w VBA dla przedziału (0,1) 3. Napisz funkcję, która sprawdza deltę, dla zadanych parametrów a,b,c i jako wynik wypisuje czy delta jest większa, mniejsza czy równa zero 4. Napisz procedurę, która dla kolumny złożonej z dat, sprawdza jaki to dzień tygodnia, a następnie w sąsiedniej kolumnie w formie słownej zapisuje (np. wtorek) Pętla For, Select Case, funkcja Weekday() - sprawdza dzień tygodnia i jako wynik podaje liczbę oznaczającą dzień tygodnia 5. Napisz procedurę, która w zadanym obszarze koloruje liczby parzyste na zielono, a nieparzyste na czerwono. 6. Napisz procedurę, która dla kolumny złożonej z liczb dziesiętnych, przelicza je na liczby binarne i szesnastkowe i wynik zapisuje w sąsiednich kolumnach WorksheetFunction.Dec2Bin- zamienia liczbę dziesiętna na liczbę binarną WorksheetFunction.Dec2Hex- zamienia liczbę dziesiętna na liczbę szesnastkową 7. Napisz procedurę, która w zadanym zbiorze danych pokoloruje na żółto liczby podzielne przez 6, a na czerwono liczby podzielne przez 20 oraz na zielono liczby podzielne przez 13.
Funkcja Mod() - zwraca resztę z dzielenia Czerwony - RGB(255,0,0) Zółty - RGB(255,255,0) Zielony RGB(0,255,0) 8. Za pomocą funkcji Los () wypełnij komórki w zakresie A1:A30, z przedziału <-5;5>. Napisz funkcje (4 osobne funkcje), które: oblicza sumę wartości ujemnych oraz wartości dodatnich. oblicza wartość min oraz max (bez używanie funkcji wbudowanych LibreOffice Calc) 9. Napisz procedurę, która dla dwóch kolumn Imię i Nazwisko realizuje funkcję ZŁĄCZ_TEKSTY, wpisując złączony tekst w sąsiedniej kolumnie. operator & - operator łączenia wyrażeń