Różnica pomiędzy stronami "Zmienne" i "Wpłaty"

Z Henryk Dąbrowski
(Różnica między stronami)
Przejdź do nawigacji Przejdź do wyszukiwania
m (1 wersja)
 
 
Linia 1: Linia 1:
<div style="text-align:right; font-size: 130%; font-style: italic; font-weight: bold;">16.10.2020</div>
 
  
  
  
 +
<div style="text-align:justify; font-size: 150%; font-style: italic; font-weight: bold;">
 +
Wszystkim darczyńcom serdecznie dziękuję za okazane wsparcie!</div>
  
  
== Korzystanie ze zmiennych ==
+
2020.02.24, WN, 20 zł<br/>
 +
2021.03.05, AEN, Warszawa, 50 zł
  
Deklarowanie zmiennych nie jest obowiązkowe, ale jest to niebezpieczne i kto tego nie czyni, ten sam sobie szkodzi. Deklarowanie zmiennych można wymusić dodając instrukcję
 
  
<span style="color: green"><span style='color:#000080;'>Option Explicit</span></span>
 
 
w pierwszej linii każdego modułu.
 
 
 
Linki:<br/>
 
[https://help.libreoffice.org/7.0/pl/text/sbasic/shared/03103300.html?&DbPAR=WRITER&System=UNIX Instrukcja Option Explicit]
 
 
[https://help.libreoffice.org/Basic/Using_Variables/pl Korzystanie ze zmiennych]
 
 
[https://help.libreoffice.org/7.0/pl/text/sbasic/shared/01020300.html Using Procedures, Functions and Properties]
 
 
 
 
 
 
== Typy zmiennych ==
 
 
 
<b>Integer</b>: liczby całkowite od -32768 do 32767 (czyli od -2<sup>15</sup> do 2<sup>15</sup>-1)
 
 
<b>Long</b>: liczby całkowite od -2147483648 do 2147483647 (czyli od -2<sup>31</sup> do 2<sup>31</sup>-1)
 
 
<b>Single</b>: liczby wymierne od 3,402823 x 10E38 do 1,401298 x 10E-45
 
 
<b>Double</b>: liczby wymierne od 1,79769313486232 x 10E308 do 4,94065645841247 x 10E-324
 
 
<b>String</b>: ciągi znakowe o długości do 65535 znaków
 
 
<b>Boolean</b>: wartości logiczne: TRUE (prawda) lub FALSE (fałsz) (liczba zero odpowiada wartości FALSE, każda liczba różna od zera odpowiada wartości TRUE)
 
 
<b>Date</b>: informacje o dacie i godzinie (dacie 31.12.1899 odpowiada wartość liczbowa 1)
 
 
<b>Currency</b>: liczby w formacie walutowym (z symbolem waluty)
 
 
<b>Object</b>: zmienna typu obiekt
 
 
<b>Variant</b>: do zmiennej typu <b>Variant</b> można przypisać każdy rodzaj wymienionych wyżej danych
 
 
 
 
 
 
== Deklarowanie zmiennych wewnątrz procedury lub funkcji ==
 
 
Każdą zmienną należy deklarować oddzielnie. Jeżeli nazwy zmiennych oddzielimy przecinkami, to tylko ostatnia zmienna zostanie zadeklarowane zgodne z podanym typem. Pozostałe zmienne będą zmiennymi typu '''Variant'''. W poniższych procedurach typy zmiennych a1, a2, a3 oraz typy zmiennych x1, x2, x3 są (odpowiednio) jednakowe.
 
 
<span style="color: green"><b><span style='color:#1f1c1b;'>Sub </span></b>Zmienne1()
 
    <span style='color:#707070;'>'zmienne a1, a2, a3 są zadeklarowane tak samo, jak zmienne x1, x2, x3</span>
 
    <b><span style='color:#1f1c1b;'>Dim</span></b> a1, a2, a3 <b><span style='color:#1f1c1b;'>as</span></b> <span style='color:#000080;'>Long</span>
 
    <b><span style='color:#1f1c1b;'>Dim</span></b> x1 <b><span style='color:#1f1c1b;'>as</span></b> <span style='color:#000080;'>Variant</span>
 
    <b><span style='color:#1f1c1b;'>Dim</span></b> x2 <b><span style='color:#1f1c1b;'>as</span></b> <span style='color:#000080;'>Variant</span>
 
    <b><span style='color:#1f1c1b;'>Dim</span></b> x3 <b><span style='color:#1f1c1b;'>as</span></b> <span style='color:#000080;'>Long</span>
 
    a1 <span style='color:#000080;'>=</span> <span style='color:#ff0000;'>1</span>
 
    a2 <span style='color:#000080;'>=</span> <span style='color:#ff0000;'>&quot;abcd&quot;</span>
 
    a3 <span style='color:#000080;'>=</span> <span style='color:#ff0000;'>&quot;xyz&quot;</span>
 
    x1 <span style='color:#000080;'>=</span> <span style='color:#ff0000;'>1</span>
 
    x2 <span style='color:#000080;'>=</span> <span style='color:#ff0000;'>&quot;abcd&quot;</span>
 
    x3 <span style='color:#000080;'>=</span> <span style='color:#ff0000;'>&quot;xyz&quot;</span>
 
    MsgBox <span style='color:#ff0000;'>&quot;a1=&quot;</span> <span style='color:#000080;'>&amp;</span> a1 <span style='color:#000080;'>&amp;</span> <span style='color:#ff0000;'>&quot;  a2=&quot;</span> <span style='color:#000080;'>&amp;</span> a2 <span style='color:#000080;'>&amp;</span> <span style='color:#ff0000;'>&quot;  a3=&quot;</span> <span style='color:#000080;'>&amp;</span> a3 <span style='color:#000080;'>&amp;</span> <span style='color:#0095ff;'>Chr</span>(<span style='color:#ff0000;'>10</span>) <span style='color:#000080;'>&amp;</span> _
 
            <span style='color:#ff0000;'>&quot;x1=&quot;</span> <span style='color:#000080;'>&amp;</span> x1 <span style='color:#000080;'>&amp;</span> <span style='color:#ff0000;'>&quot;  x2=&quot;</span> <span style='color:#000080;'>&amp;</span> x2 <span style='color:#000080;'>&amp;</span> <span style='color:#ff0000;'>&quot;  x3=&quot;</span> <span style='color:#000080;'>&amp;</span> x3
 
    <span style='color:#707070;'>'a1=1  a2=abcd  a3=0</span>
 
    <span style='color:#707070;'>'x1=1  x2=abcd  x3=0</span>
 
<b><span style='color:#1f1c1b;'>End Sub</span></b></span>
 
 
 
<span style="color: green"><b><span style='color:#1f1c1b;'>Sub </span></b>Zmienne2()
 
    <span style='color:#707070;'>'zmienne a1, a2, a3 są zadeklarowane tak samo, jak zmienne x1, x2, x3</span>
 
    <b><span style='color:#1f1c1b;'>Dim</span></b> a1 <b><span style='color:#1f1c1b;'>as</span></b> <span style='color:#000080;'>Long</span>, a2 <b><span style='color:#1f1c1b;'>as</span></b> <span style='color:#000080;'>Long</span>, a3 <b><span style='color:#1f1c1b;'>as</span></b> <span style='color:#000080;'>Long</span>
 
    <b><span style='color:#1f1c1b;'>Dim</span></b> x1 <b><span style='color:#1f1c1b;'>as</span></b> <span style='color:#000080;'>Long</span>
 
    <b><span style='color:#1f1c1b;'>Dim</span></b> x2 <b><span style='color:#1f1c1b;'>as</span></b> <span style='color:#000080;'>Long</span>
 
    <b><span style='color:#1f1c1b;'>Dim</span></b> x3 <b><span style='color:#1f1c1b;'>as</span></b> <span style='color:#000080;'>Long</span>
 
    a1 <span style='color:#000080;'>=</span> <span style='color:#ff0000;'>1</span>
 
    a2 <span style='color:#000080;'>=</span> <span style='color:#ff0000;'>&quot;abcd&quot;</span>
 
    a3 <span style='color:#000080;'>=</span> <span style='color:#ff0000;'>&quot;xyz&quot;</span>
 
    x1 <span style='color:#000080;'>=</span> <span style='color:#ff0000;'>1</span>
 
    x2 <span style='color:#000080;'>=</span> <span style='color:#ff0000;'>&quot;abcd&quot;</span>
 
    x3 <span style='color:#000080;'>=</span> <span style='color:#ff0000;'>&quot;xyz&quot;</span>
 
    MsgBox <span style='color:#ff0000;'>&quot;a1=&quot;</span> <span style='color:#000080;'>&amp;</span> a1 <span style='color:#000080;'>&amp;</span> <span style='color:#ff0000;'>&quot;  a2=&quot;</span> <span style='color:#000080;'>&amp;</span> a2 <span style='color:#000080;'>&amp;</span> <span style='color:#ff0000;'>&quot;  a3=&quot;</span> <span style='color:#000080;'>&amp;</span> a3 <span style='color:#000080;'>&amp;</span> <span style='color:#0095ff;'>Chr</span>(<span style='color:#ff0000;'>10</span>) <span style='color:#000080;'>&amp;</span> _
 
            <span style='color:#ff0000;'>&quot;x1=&quot;</span> <span style='color:#000080;'>&amp;</span> x1 <span style='color:#000080;'>&amp;</span> <span style='color:#ff0000;'>&quot;  x2=&quot;</span> <span style='color:#000080;'>&amp;</span> x2 <span style='color:#000080;'>&amp;</span> <span style='color:#ff0000;'>&quot;  x3=&quot;</span> <span style='color:#000080;'>&amp;</span> x3
 
    <span style='color:#707070;'>'a1=1  a2=0  a3=0</span>
 
    <span style='color:#707070;'>'x1=1  x2=0  x3=0</span>
 
<b><span style='color:#1f1c1b;'>End Sub</span></b></span>
 
 
 
Link:<br/>
 
[https://help.libreoffice.org/latest/pl/text/sbasic/shared/03102100.html Instrukcja Dim]
 
 
 
 
 
 
== Deklarowanie typu funkcji oraz typu parametrów procedury lub funkcji ==
 
 
Typ funkcji oraz typy parametrów w procedurze lub funkcji deklarujemy według schematu:
 
 
<span style="color: green"><b><span style='color:#1f1c1b;'>Function </span></b>NazwaFunkcji(Parametr1 <b><span style='color:#1f1c1b;'>as</span></b> <span style='color:#000080;'>TypZmiennej</span>, ..., ParametrN <b><span style='color:#1f1c1b;'>as</span></b> <span style='color:#000080;'>TypZmiennej</span>) <b><span style='color:#1f1c1b;'>as</span></b> <span style='color:#000080;'>TypZmiennej</span></span>
 
 
Przykładowo:
 
 
<span style="color: green"><b><span style='color:#1f1c1b;'>Function </span></b>PoleProstokata(a <b><span style='color:#1f1c1b;'>as</span></b> <span style='color:#000080;'>Double</span>, b <b><span style='color:#1f1c1b;'>as</span></b> <span style='color:#000080;'>Double</span>) <b><span style='color:#1f1c1b;'>as</span></b> <span style='color:#000080;'>Double</span></span>
 
 
 
'''UWAGA:'''
 
 
Nie powinniśmy wywoływać funkcji z&nbsp;parametrem innego typu niż typ zadeklarowany w&nbsp;funkcji. Jednak ludzie popełniają błędy i&nbsp;należy wiedzieć, co się stanie w&nbsp;takim przypadku. Musimy pamiętać, że LibreOffice nie zgłosi automatycznie błędu w&nbsp;przypadku wykrycia niezgodności typów, ale podejmie próbę konwersji użytej zmiennej na typ zgodny z&nbsp;zadeklarowanym w&nbsp;kodzie funkcji. Poniższa tabela przedstawia, jakie wartości otrzymamy w&nbsp;zależności od zadeklarowanego typu parametru i&nbsp;jego pierwotnej wartości:
 
 
{| class="wikitable"  style="font-size: 100%; text-align: left; margin: 1em auto 1em auto;"
 
! width="200px" |
 
! width="60px" | '''Integer'''
 
! width="60px" | '''Long'''
 
! width="70px" | '''Single'''
 
! width="70px" | '''Double'''
 
! width="100px" | '''String'''
 
! width="90px" | '''Boolean'''
 
! width="170px" | '''Date'''
 
! width="100px" | '''Currency'''
 
|-
 
| "abc" || 0 || 0 || 0 || 0 || "abc" || '''X''' || '''X''' || '''X'''
 
|-
 
| "357" || 357 || 357 || 357 || 357 || "357" || True || '''X''' || 357.0000
 
|-
 
| "3.57" || 4 || 4 || 3,57 || 3,57 || "3.57" || True || '''X''' || 3.5700
 
|-
 
| 123 || 123 || 123 || 123 || 123 || "123" || True || 02.05.1900 || 123.0000
 
|-
 
| 456.789 || 457 || 457 || 456,789 || 456,789 || "456,789" || True || 31.03.1901 18:56:09 || 456.7890
 
|-
 
| True || -1 || -1 || -1 || -1 || "True" || True || 29.12.1899 || -1.0000
 
|-
 
| False || 0 || 0 || 0 || 0 || "False" || False || 00:00:00 || 0.0000
 
|-
 
| DateSerial(2000, 12, 30) || '''Y''' || 36890 || 36890 || 36890 || "30.12.2000" || True || 30.12.2000 || 36890.0000
 
|}
 
 
 
Symbole '''X''' oraz '''Y''' oznaczają, że wystąpi błąd i pojawią się następujące komunikaty o błędzie:
 
 
'''X''' – Niedopuszczalna wartość lub typ danych. Niezgodne typy danych.
 
 
'''Y''' – Niedopuszczalna wartość lub typ danych. Przepełnienie.
 
 
 
 
 
 
== Zmienne statyczne ==
 
 
Zmienne statyczne deklarujemy poleceniem:
 
 
<span style="color: green"><b><span style='color:#1f1c1b;'>Static</span></b> NazwaZmiennej <b><span style='color:#1f1c1b;'>as</span></b> <span style='color:#000080;'>TypZmiennej</span></span>
 
 
 
Zmienna statyczna jest widoczna tylko w obrębie procedury lub funkcji, w której została zadeklarowana. Po zakończeniu działania procedury lub funkcji, w której zmienna statyczna została zadeklarowana, wartość zmiennej statycznej nie ginie, ale będzie stanowiła wartość początkową tej zmiennej przy kolejnym wywołaniu procedury lub funkcji. Inaczej mówiąc, zmienna statyczna zachowuje wartość między kolejnymi wywołaniami procedury / funkcji.
 
 
<span style="color: green"><b><span style='color:#1f1c1b;'>Sub </span></b>StaticTest()
 
    <span style='color:#707070;'>'zmienna a po zadeklarowaniu przyjmie wartość 0</span>
 
    <b><span style='color:#1f1c1b;'>Dim</span></b> a <b><span style='color:#1f1c1b;'>as</span></b> <span style='color:#000080;'>Long</span>
 
    <span style='color:#707070;'>'zmienna statyczna s po zadeklarowaniu przyjmie wartość 0 lub wartość, jaką miała</span>
 
    <span style='color:#707070;'>'w momencie zakończenia działania procedury lub funkcji, w której została zadeklarowana</span>
 
    <b><span style='color:#1f1c1b;'>Static</span></b> s <b><span style='color:#1f1c1b;'>as</span></b> <span style='color:#000080;'>Long</span>
 
    MsgBox <span style='color:#ff0000;'>&quot;a=&quot;</span> <span style='color:#000080;'>&amp;</span> a <span style='color:#000080;'>&amp;</span> <span style='color:#ff0000;'>&quot;  s=&quot;</span> <span style='color:#000080;'>&amp;</span> s
 
    a <span style='color:#000080;'>=</span> a + <span style='color:#ff0000;'>1</span>
 
    s <span style='color:#000080;'>=</span> s + <span style='color:#ff0000;'>1</span>
 
<b><span style='color:#1f1c1b;'>End Sub</span></b></span>
 
 
<span style="color: green"><b><span style='color:#1f1c1b;'>Sub </span></b>Zmienne3()
 
    <b><span style='color:#000000;'>Call</span></b> StaticTest() <span style='color:#707070;'>'a=0  s=0</span>
 
    <b><span style='color:#000000;'>Call</span></b> StaticTest() <span style='color:#707070;'>'a=0  s=1</span>
 
    <b><span style='color:#000000;'>Call</span></b> StaticTest() <span style='color:#707070;'>'a=0  s=2</span>
 
<b><span style='color:#1f1c1b;'>End Sub</span></b></span>
 
 
 
Link:<br/>
 
[https://help.libreoffice.org/7.0/pl/text/sbasic/shared/03103500.html?&DbPAR=WRITER&System=UNIX Instrukcja Static]
 
 
 
 
 
 
== Deklarowanie zmiennych poza procedurą lub funkcją ==
 
 
Istnieją trzy instrukcje, za pomocą których deklarujemy zmienne poza podprogramem: '''Private''', '''Public''' i&nbsp;'''Global'''. W&nbsp;przypadku deklaracji Public i&nbsp;Global zmienna zadeklarowana poza podprogramem jest widoczna we wszystkich modułach. W&nbsp;przypadku deklaracji Private sytuacja jest bardziej skomplikowana i&nbsp;zależy również od tego, w&nbsp;ilu modułach zmienna została zadeklarowana.
 
 
 
Uwaga:<br/>
 
Jeżeli w&nbsp;module umieścimy kilka deklaracji zmiennej jako Private / Public / Global (co może się zdarzyć w&nbsp;wyniku błędu lub w&nbsp;czasie testowania), to o&nbsp;typie zmiennej decyduje ostatnia z&nbsp;wypisanych deklaracji.
 
 
 
 
=== Uwagi i&nbsp;oznaczenia ===
 
 
Jeżeli w&nbsp;jakimkolwiek module zostanie wywołany podprogram, wewnątrz którego zmienna Zmn została zadeklarowana instrukcją Dim, to deklaracja wewnątrz podprogramu jest nadrzędna. Oznacza to, że jest inicjowana nowa zmienna o&nbsp;nazwie Zmn, która będzie istniała do czasu zakończenia wykonywania tego podprogramu, a&nbsp;w&nbsp;tym czasie zmienna zdefiniowana na zewnątrz będzie niedostępna (zostanie przesłonięta przez nową zmienną).
 
 
 
Oznaczenia:<br/>
 
'''ModuleA''' – moduł, w&nbsp;którym znajduje się uruchamiany program (program główny)<br/>
 
'''ProgA''' – program główny uruchamiany przez użytkownika, który znajduje się w&nbsp;module o&nbsp;nazwie ModuleA<br/>
 
'''Zmn''' – nazwa zmiennej, która nie jest zadeklarowana wewnątrz ProgA i&nbsp;musi zostać zadeklarowana jako Private / Public / Global, aby system nie wykazał błędu<br/>
 
'''ModuleFrst''' – nazwa pierwszego z&nbsp;modułów, w&nbsp;którym występuje deklaracja Private zmiennej Zmn<br/>
 
'''ModuleLst''' – nazwa ostatniego z&nbsp;modułów, w&nbsp;którym występuje deklaracja Public lub Global zmiennej Zmn<br/>
 
 
 
Zauważmy, że ProgA może zakończyć działanie:<br/>
 
:* nie odwołując się do żadnych innych podprogramów<br/>
 
:* odwołując się jedynie do podprogramów z&nbsp;ModuleA<br/>
 
:* odwołując się do dowolnych podprogramów, z&nbsp;których przynajmniej jeden znajduje się w&nbsp;module innym niż ModuleA<br/>
 
 
 
 
=== Private ===
 
 
<span style="color: green"><b><span style='color:#1f1c1b;'>Private</span></b> Zmn <b><span style='color:#1f1c1b;'>as</span></b> <span style='color:#000080;'>TypZmiennej</span></span>
 
 
Jeżeli w&nbsp;danym module zmienna Zmn nie jest zadeklarowana jako Private, to każde wywołanie podprogramu z&nbsp;tego modułu (w&nbsp;którym to podprogramie zmienna Zmn nie została zadeklarowana instrukcją Dim), nie wpływa na zmienną Zmn i&nbsp;jest ona cały czas dostępna zgodnie z&nbsp;wcześniejszą deklaracją i&nbsp;poprzednią wartością.
 
 
 
 
Opis działania deklaracji Private sprowadza się do dwóch przypadków:
 
 
 
<u>A. Zmienna Zmn jest zadeklarowana jako Private w&nbsp;ModuleA</u><br/>
 
W tym przypadku deklaracja zmiennej Zmn obowiązuje tak długo, dopóki nie zostanie wywołany podprogram z&nbsp;innego modułu, w&nbsp;którym zmienna Zmn jest zadeklarowana jako Private. Od tej chwili system tworzy kolejną zmienną o&nbsp;tej samej nazwie, która będzie istniała do momentu opuszczenia tego modułu.
 
 
 
<u>B. Zmienna Zmn nie jest zadeklarowana jako Private w&nbsp;ModuleA</u><br/>
 
W tym przypadku zmienna Zmn zostanie zadeklarowana zgodnie z&nbsp;deklaracją zmiennej Zmn znajdującą się w&nbsp;ModuleFrst. Podobnie jak w&nbsp;przypadku A. deklaracja zmiennej Zmn obowiązuje tak długo, aż nie zostanie wywołany podprogram z&nbsp;innego modułu, w&nbsp;którym zmienna Zmn jest zadeklarowana jako Private. Od tej chwili system tworzy kolejną zmienną o&nbsp;tej samej nazwie, która będzie istniała do chwili opuszczenia tego modułu. Nie dotyczy to wywołania podprogramu z&nbsp;ModuleFrst – w&nbsp;tym przypadku nie zostanie utworzona nowa zmienna.
 
 
 
 
Zauważmy, że zmienna zadeklarowana jako Private tylko w&nbsp;jednym z&nbsp;modułów jest widoczna we wszystkich modułach. Może spowodować to niezamierzone skutki:<br/>
 
:* jeżeli użyjemy zmiennej o&nbsp;takiej samej nazwie wewnątrz podprogramu, to system nie ostrzeże nas o&nbsp;niezadeklarowaniu zmiennej
 
:* przypadkowe zadeklarowanie tej samej zmiennej w&nbsp;innym module jako Private może doprowadzić do błędu w&nbsp;obliczeniach
 
 
 
 
=== Public ===
 
 
<span style="color: green"><b><span style='color:#1f1c1b;'>Public</span></b> Zmn <b><span style='color:#1f1c1b;'>as</span></b> <span style='color:#000080;'>TypZmiennej</span></span>
 
 
Zmienna zadeklarowana jako Public jest widoczna we wszystkich modułach. Po wykonaniu procedury lub funkcji jej wartość zostaje zresetowana. Jeżeli zamieścimy wiele deklaracji zmiennej Zmn jako Public, to zmienna Zmn zostanie zadeklarowana zgodnie z&nbsp;deklaracją umieszczoną w&nbsp;ModuleLst.
 
 
 
 
Link:<br/>
 
[https://help.libreoffice.org/latest/pl/text/sbasic/shared/03103400.html Instrukcja Public]
 
 
 
 
=== Global ===
 
 
<span style="color: green"><b><span style='color:#1f1c1b;'>Global</span></b> Zmn <b><span style='color:#1f1c1b;'>as</span></b> <span style='color:#000080;'>TypZmiennej</span></span>
 
 
Zmienna zadeklarowana jako Global jest widoczna we wszystkich modułach. Po zakończeniu programu ProgA jej wartość nie jest resetowana i&nbsp;jest dostępna przy kolejnym wywołaniu dowolnej procedury lub funkcji. Jeżeli zamieścimy wiele deklaracji zmiennej Zmn jako Global, to zmienna Zmn zostanie zadeklarowana zgodnie z&nbsp;deklaracją umieszczoną  w&nbsp;ModuleLst.
 
 
 
Uwaga:<br/>
 
Jeżeli usuniemy deklarację zmiennej jako Global zamieszczoną w&nbsp;ModuleLst, to LibreOffice tego nie nie zauważy i&nbsp;nie nastąpi zmiana typu zmiennej. Musimy ponownie załadować plik, korzystając z&nbsp;opcji: Plik ➔ Załaduj ponownie (lub sekwencją klawiszy: Lewy Alt + [p] [w] [Enter])
 
 
 
Link:<br/>
 
[https://help.libreoffice.org/latest/pl/text/sbasic/shared/03103450.html Instrukcja Global]
 
 
 
 
=== Wnioski ===
 
 
Z powyższej analizy wynika, że najdogodniej jest posługiwać się zmiennymi zadeklarowanymi jako Public. Jeżeli dodatkowo przyjmiemy zasadę, że wszystkie te zmienne deklarujemy w&nbsp;pierwszym module zaraz pod instrukcją Option Explicit, to prawdopodobieństwo utraty kontroli nad tymi zmiennymi i&nbsp;popełnienia błędu będzie znikome.
 
 
 
Uwaga:<br/>
 
Czytelnik może spotkać się z&nbsp;deklaracją zmiennych na zewnątrz procedur lub funkcji przy pomocy słowa Dim. Taka deklaracja jest równoważna deklaracji przy pomocy słowa Private i&nbsp;nie należy jej stosować, bo po pierwsze cierpi na tym czytelność napisanego kodu, a&nbsp;po drugie nie mamy żadnej gwarancji, że ten sposób deklarowania zmiennych na zewnątrz podprogramów zostanie w&nbsp;przyszłości utrzymany.
 
 
 
 
 
 
 
 
 
[[LibreOffice Calc – makra | <b>LibreOffice Calc – makra</b>]]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[[Henryk Dąbrowski | <b>Strona główna</b>]]
 
  
  

Wersja z 20:12, 27 mar 2021


Wszystkim darczyńcom serdecznie dziękuję za okazane wsparcie!


2020.02.24, WN, 20 zł
2021.03.05, AEN, Warszawa, 50 zł