Spis treści
Indeks 🔎︎

# Instrukcja Dim

Deklaruje zmienną lub tablicę.

Jeśli zmienne są oddzielone przecinkami (np. DIM sPar1, sPar2, sPar3 AS STRING), zostaną zdefiniowane tylko zmienne typu Variant. Każdą zmienną należy definiować w osobnym wierszu.

    Dim sPar1 As String
    Dim sPar2 As String
    Dim sPar3 As String

Funkcja Dim deklaruje zmienne lokalne wewnątrz podprogramów. Zmienne globalne są deklarowane za pomocą instrukcji PUBLIC lub PRIVATE.

## Składnia:

    [ReDim]Dim nazwa_zmiennej [(start To koniec)] [As typ_zmiennej][, nazwa_zmiennej2 [(start To koniec)] [As typ_zmiennej][,...]]

## Parametry:

Nazwa_zmiennej: Nazwa dowolnej zmiennej lub tablicy.

Start, koniec: Wartości numeryczne lub stałe definiujące liczbę elementów (liczba_elementów = (koniec - start) + 1) i zakres indeksacji.

Jeśli na poziomie procedury zastosowano instrukcję ReDim, wartości startu i końca mogą być wyrażeniami numerycznymi.

Typ_zmiennej: Słowo kluczowe deklarujące typ danych zmiennej.

Słowo kluczowe: Typ zmiennej

Bool: Zmienna logiczna, która może przyjąć wartości True (prawda) lub False (fałsz)

Currency: Zmienna walutowa (zawierająca znak waluty i 4 miejsca dziesiętne)

Date: Zmienna daty

Double: Zmienna zmiennoprzecinkowa podwójnej precyzji (w zakresie od 1,79769313486232 x 10E308 do 4,94065645841247 x 10E-324)

Integer: Zmienna typu liczba całkowita (w zakresie od -32768 do 32767)

Long: Zmienna typu liczba całkowita długa (w zakresie od -2 147 483 648 do 2 147 483 647)

Object: Zmienna typu obiekt (uwaga: ta zmienna może być wcześniej zdefiniowana wyłącznie za pomocą instrukcji Set)

Single: Zmienna zmiennoprzecinkowa typu pojedyncza precyzja (w zakresie od 3,402823 x 10E38 do 1,401298 x 10E-45).

String: Zmienna w postaci ciągu znaków składająca się z maksymalnie 64 000 znaków ASCII.

[Variant]: Zmienna typu variant (zawiera wszystkie typy określone przez definicję). Jeśli słowo kluczowe nie zostało określone, zmienne są automatycznie definiowane jako typ Variant, chyba, że zostały użyte instrukcje od DefBool do DefVar.

W LibreOffice Basic nie ma obowiązku jawnego deklarowania zmiennych. Jednak każda tablica przed użyciem powinna zostać zadeklarowana. Zmienną można deklarować za pomocą instrukcji Dim. W przypadku deklaracji wielokrotnych zmienne należy rozdzielić przecinkami. Aby zadeklarować typ zmiennej, po jej nazwie należy podać znak deklaracji typu lub użyć odpowiedniego słowa kluczowego.

LibreOffice Basic obsługuje tablice jedno- lub wielowymiarowe zdefiniowane jako określony typ zmiennych. Tablice stosuje się w programach zawierających listy lub tabele, które należy edytować. Zaletą tablic jest możliwość adresowania pojedynczych elementów za pomocą indeksów, które mogą być wyrażeniami numerycznymi lub zmiennymi.

Tablice są deklarowane za pomocą instrukcji Dim. Istnieją dwa sposoby definiowania zakresu indeksu:

DIM text(20) as String REM 21 elementów numerowanych od 0 do 20

DIM text(5 to 25) as String REM 21 elementów numerowanych od 5 do 25

DIM text(-15 to 5) as String REM 21 elementów (w tym 0)

REM numerowane od -15 do 5

Dwuwymiarowe pole danych

DIM text(20,2) as String REM 63 elementy: od 0 do 20 na poziomie 1, od 0 do 20 na poziomie 2 i od 0 do 20 na poziomie 3.

Jeśli w podprogramie lub funkcji zadeklarowano tablicę o liczbie wymiarów zdefiniowanej za pomocą instrukcji ReDim, jej typ można zadeklarować jako dynamiczny. Z reguły wymiar tablicy można definiować raz i nie można go modyfikować. Wewnątrz podprogramu można jednak zadeklarować tablicę za pomocą instrukcji ReDim. Wymiary tablicy mogą być zdefiniowane wyłącznie w postaci wyrażeń numerycznych. Dzięki temu wielkość pól nie jest większa od wymaganej.

## Przykład:

    Sub ExampleDim1
    Dim sVar As String
    Dim iVar As Integer
        sVar = "Office"
    End Sub

    Sub ExampleDim2
    ' Dwuwymiarowe pole danych
    Dim stext(20,2) As String
    Const sDim As String = " Wymiar:"
    For i = 0 To 20
        For ii = 0 To 2
            stext(i,ii) = str(i) & sDim & str(ii)
        Next ii
    Next i
    For i = 0 To 20
        For ii = 0 To 2
            MsgBox stext(i,ii)
        Next ii
    Next i
    End Sub