Automatyzacja pracy
w AutoCAD
Informacje wstępne
BASIC
(Beginners All-Purpose Symbolic Instruction Code) Rok powstania: 1963 r.
Cel realizacji:
nauczanie studentów programowania
umożliwienie programowania osobom nie zajmującym się programowaniem profesjonalnie
Informacje wstępne
VB (Visual Basic)
Rok powstania: 1991 r.
Cel realizacji:
przystosowanie języka BASIC do programowania w środowisku wizualnym
umożliwienie łatwego tworzenia aplikacji dla środowiska Windows przez osoby nie zajmujące się profesjonalnym programowaniem
Informacje wstępne
VBA (Visual Basic for Applications)
interpreter języka Visual Basic dołączony pierwotnie do aplikacji Microsoft Office
później również inne firmy komputerowe skorzystały z tego rozwiązania w swoich aplikacjach
Cel realizacji:
samodzielne rozszerzania przez użytkownika funkcji aplikacji
łatwa automatyzacja pracy w danej aplikacji
Informacje wstępne
VB.NET (VisualBasic.NET)
adaptacja języka Visual Basic do platformy .NET ma funkcjonalność platformy .NET
Cel realizacji (platformy .NET):
dostarczenie dla aplikacji standardowej funkcjonalności, niezależnej od wyboru języka kodu
zapewnienie przenośności między różnymi procesorami oraz wykorzystanie wszystkich możliwości procesora zapewnienie przenośności między wersjami systemu
Ścieżki programowania
Algorytm
Kod źródłowy
Program w kodzie maszynowym
Interpreter Kompilator
Krok I Ścieżka
kompilacji (VB.NET)
Ścieżka interpretacji
(VBA)
Rozkazy do procesora
Podstawy języka VBA / VB.NET
czyli po prostu
Basic
Uwagi co do notacji kodu
Słowa Kluczowe Języka Basic
słowa zastrzeżone, najczęściej oznaczają rozkaz, instrukcję lub oznaczenie typu danych
pozostałe fragmenty kodu
słowa niezastrzeżone, najczęściej nazwy stałych, zmiennych lub elementów strukturalnych (procedur, funkcji)
[w nawiasach kwadratowych]
opcjonalne fragmenty kodu
jeśli występują, to bez nawiasów!
{w nawiasach klamrowych}
alternatywne fragmenty kodu
przedzielane są znakiem alternatywy |, np. Option Base {0|1}
Struktura kodu
Moduł
oddzielny funkcjonalnie fragment kodu programu zawierający własne deklaracje stałych, zmiennych, procedur i funkcji (również często typów wartości i klas)
Procedura
zbiór instrukcji wykonywanych w całości poprzez jedno wywołanie
Funkcja
procedura zwracająca wartość (jak zmienna, rezerwuje pamięć na jej przechowanie)
Instrukcja
pojedyncza linia procedury lub funkcji
w języku Basic możliwe jest umieszczenie w linii kilku instrukcji (zazwyczaj prostych) oddzielonych :
Struktura modułu
Trzy rodzaje modułów:
moduł klasy – zawiera definicję klasy, czyli szablonu obiektu;
wszystkie procedury w nim zapisane są metodami obiektów tej klasy
moduł formularza – zawiera kod formularza, czyli okna dialogowego; służy do projektowania własnych formularzy
moduł kodu źródłowego – zawiera właściwy kod programu lub inne funkcje i procedury nie będące metodami (można np. cały zbiór takich funkcji i procedur zdefiniować w osobnym module)
Struktura:
oprócz deklaracji procedur i funkcji moduł może na początku zawierać w pierwszych liniach deklaracje opcji
Option Explicit Option Base 1
Procedury
Zalety stosowania procedur:
Zalety stosowania procedur:
możliwość wielokrotnego użycia tego samego fragmentu kodu większa przejrzystość kodu
Deklaracja procedury:
[Public|Private|Friend] Sub nazwa_proc([lista argumentów]) deklaracje zmiennych lokalnych (jeśli są)
kod procedury [Exit Sub]
kod procedury End Sub
W najprostszej postaci:
Sub nazwa_proc() kod procedury End Sub
Wywołanie procedury:
nazwa_proc [wart_arg1, wart_arg2, ...]
lub
Call nazwa_proc[(wart_arg1, wart_arg2, ...)]
Funkcje
W odróżnieniu od procedur zwracają wartość.
W odróżnieniu od procedur zwracają wartość.
Deklaracja funkcji:
[Public|Private|Friend] Function nazw_fun([lista argumentów])As typ deklaracje zmiennych lokalnych (jeśli są)
kod funkcji
nazw_fun = wyrażenie kod funkcji
[Exit Function]
kod funkcji End Function
W najprostszej postaci:
Function nazw_fun() kod funkcji
nazw_fun = wyrażenie kod funkcji
End Function
Wywołanie funkcji:
nazwa_zmiennej = nazw_fun[(wart_arg1, wart_arg2, ...)]
Zmienne
Zmienna:
miejsca w pamięci (identyfikowane nazwą), w którym przechowywana jest wartość określonego typu
przechowywana wartość może się zmieniać w trakcie działania programu.
Nazwa zmiennej:
musi być unikatowa w obrębie swojego zakresu (wielkość liter nie ma znaczenia)
może zawierać do 255 znaków
nie może zawierać znaku deklarującego typ (%, &, !, #, @, $) oraz spacji, przecinka i kropki
musi zaczynać się od litery
nie może być słowem kluczowym
Deklaracje zmiennych
Deklaracja zmiennej
miejsce i fakt deklaracji ustala w danym zakresie nazwę i typ zmiennej
wywołanie zmiennej niezadeklarowanej ustala jedynie zakres jej nazwy, a jej typem jest wtedy domyślnie Variant
w języku Basic deklaracja zmiennej nie jest obowiązkowa, ale zalecana, głównie ze względu na oszczędność pamięci
Deklarację zmiennych można wymusić w obrębie modułu opcją:
składnia opcji: Option Explicit
Deklaracje zmiennych
Składnia deklaracji zmiennych:
Dim nazwa_zmiennej As typ
Deklaracja skrócona
przy użyciu znaku deklaracji typu po nazwie zmiennej:
% Integer
& Long
! Single
# Double
@ Currency
$ String
przykład: Dim nazwa$
Zmienne tablicowe
Zmienne tablicowe są uporządkowanym zbiorem wartości tego Zmienne tablicowe są uporządkowanym zbiorem wartości tego
samego typu samego typu
Elementy tablicy są zmiennymi tego samego typu Elementy tablicy są zmiennymi tego samego typu
Dostęp do elementów tablicy jest możliwy poprzez Dostęp do elementów tablicy jest możliwy poprzez
indeksowanie, czyli podanie położenia elementu w tablicy indeksowanie, czyli podanie położenia elementu w tablicy Każdy element tablicy ma swój unikalny zestaw indeksów Każdy element tablicy ma swój unikalny zestaw indeksów
Tablice mogą mieć do 60 wymiarów Tablice mogą mieć do 60 wymiarów
Deklaracja zmiennej tablicowej rezerwuje w pamięci miejsce Deklaracja zmiennej tablicowej rezerwuje w pamięci miejsce
dla wszystkich jej elementów.
dla wszystkich jej elementów.
Deklaracja zmiennych tablicowych
Deklaracja w najprostszej formie:
Deklaracja w najprostszej formie:
Dim nazwa_tab(indeks_górny) As typ_zm
tu indeks dolny tablicy wynosi 0 lub 1 (jeśli tak zadeklarowaliśmy w Option Base).
Deklaracja z podaniem indeksu dolnego:
Deklaracja z podaniem indeksu dolnego:
Dim nazwa_tab(ind_dolny To ind_górny) As typ_zm
Dla tablic wielowymiarowych (do 60 wymiarów), kolejne Dla tablic wielowymiarowych (do 60 wymiarów), kolejne
indeksowania oddzielamy przecinkami indeksowania oddzielamy przecinkami
Tablice wypełniamy wartościami odwołując się do ich Tablice wypełniamy wartościami odwołując się do ich
elementów poprzez indeksowanie.
elementów poprzez indeksowanie.
Czyszczenie zawartości tablicy:
Czyszczenie zawartości tablicy: Erase(nazwa_tab)nazwa_tab)
Deklaracja zmiennych tablicowych dynamicznych
Deklarację zmiennych tablicowych dynamicznych stosuje się aby uniknąć Deklarację zmiennych tablicowych dynamicznych stosuje się aby uniknąć wstępnej rezerwacji pamięci
wstępnej rezerwacji pamięci
deklaruje się je bez podania wymiarów:
Dim nazwa_tab() As typ_zm
rozmiar tablicy trzeba podać przed pierwszym indeksowaniem:
ReDim nazwa_tab(indeksy)
czynność tę można wykonać wiele razy, ale niszczy ona za każdym razem zawartość tablicy
zachowanie zawartości tablicy należy zadeklarować:
ReDim Preserve nazwa_tab(indeksy)
w tym wypadku można zmieniać tylko górny indeks ostatniego wymiaru funkcja zwalnia pamięć zajmowaną przez tablicę dynamiczną
Stałe
Stała:
tak jak zmienna, jest to miejsce w pamięci (identyfikowane nazwą), w którym przechowywana jest wartość określonego typu
w odróżnieniu do zmiennej, przechowywana wartość nie może się zmieniać w trakcie działania programu
reguły nadawania nazw są takie same jak dla zmiennych
Deklaracje stałych:
Const nazwa_stalej = wartość_stałej As typ Const As typ nazwa_stalej = wartość_stalej Const nazwa_stalej As typ = wartość_stalej
Widoczność zmiennych, stałych, procedur i funkcji
Jest o
Jest określana za pomocą słów kluczowych:kreślana za pomocą słów kluczowych:
[Public|Private|Friend]
Trzy poziomy zasięgu:
Trzy poziomy zasięgu:
poziom Public – obiekt jest widoczny na wszystkich poziomach aplikacji
poziom Private – obiekt jest widoczny jedynie w obrębie poziomu deklaracji
poziom Friend – obiekt jest widoczny na wszystkich
poziomach AcadDocument, ale nie w innych dokumentach
Czas życia zmiennych
Zmienna lokalna jest niszczona (zwalniana jest jej pamięć) Zmienna lokalna jest niszczona (zwalniana jest jej pamięć)
automatycznie po wyjściu sterowania poza zasięg jej automatycznie po wyjściu sterowania poza zasięg jej
widoczności (wyjściu z procedury) widoczności (wyjściu z procedury)
Aby ich wartości pozostały po ustaniu wykonywania procedury, Aby ich wartości pozostały po ustaniu wykonywania procedury,
trzeba zadeklarować je jako
trzeba zadeklarować je jako Static
Użycie słowa kluczowego
Użycie słowa kluczowego Static przed nazwą procedury przed nazwą procedury zachowuje wszystkie zmienne po jej opuszczeniu.
zachowuje wszystkie zmienne po jej opuszczeniu.
Typy danych
Liczby całkowite:
Liczby całkowite:
Byte - 1 bajt; wartości od 0 do 255 - 1 bajt; wartości od 0 do 255
Integer - 2 bajty; od -32768 do 32767 - 2 bajty; od -32768 do 32767
Long - 4 bajty; od ok. -20 mld do ok. 20 mld - 4 bajty; od ok. -20 mld do ok. 20 mld Decimal - 14 bajtów; do 28 cyfr z przecinkiem - 14 bajtów; do 28 cyfr z przecinkiem
Liczby „rzeczywiste” (właściwie zmiennoprzecinkowe):
Liczby „rzeczywiste” (właściwie zmiennoprzecinkowe):
Single - 4 bajty; od ok. -3.4e38 do ok. 1.4e45 - 4 bajty; od ok. -3.4e38 do ok. 1.4e45 Double - 8 bajtów; rzędu +/-1.8e308 - 8 bajtów; rzędu +/-1.8e308
Currency - 8 bajtów; +/-9.2e14 (+4 miejsca po przecinku) - 8 bajtów; +/-9.2e14 (+4 miejsca po przecinku) Wartości logiczne:
Wartości logiczne:
Boolean - True/False Daty:
Daty:
Date - od 1/1/100 do 31/12/9999 - od 1/1/100 do 31/12/9999 Łańcuchy znakowe:
Łańcuchy znakowe:
String (ustalonej długości) - od 0 do 65535 znaków (ustalonej długości) - od 0 do 65535 znaków
Łańcuchy znakowe
Dowolne znaki ujęte w cudzysłowach Pusty łańcuch (o długości 0): ""
Deklaracja zmiennej łańcuchowej o stałej długości
Dim nazwisko As String * 30
Deklaracja zmiennej łańcuchowej o zmiennej długości
Dim nazwisko As String
Łańcuchy znakowe łączy się operatorem &
Łańcuch może zawierać znaki sterujące, takie jak:
vbNewLine – znak nowego wiersza vbTab – tabulator
Instrukcje
Instrukcje przypisania zmiennej wartości Instrukcje przypisania zmiennej wartości
innej zmiennej:
nazwa_zm = nazwa_innej_zm
funkcji:
nazwa_zm = nazwa_fun(argumenty)
wyrażenia:
nazwa_zm = wyrażenie
Zmiennej tablicowej przypisujemy wartości odwołując się do Zmiennej tablicowej przypisujemy wartości odwołując się do
jej elementów za pomocą indeksowania jej elementów za pomocą indeksowania
nazwa_tab(indeksy) = wyrażenie
Instrukcje warunkowe
Służą do sterowania wykonywaniem instrukcji w zależności od Służą do sterowania wykonywaniem instrukcji w zależności od
spełnienia warunków zapisanych w postaci wyrażeń spełnienia warunków zapisanych w postaci wyrażeń
warunkowych warunkowych
Wyrażenia warunkowe przyjmują wartości logiczne (
Wyrażenia warunkowe przyjmują wartości logiczne (booleanboolean):):
prawdy (True) fałszu (False)
Wyrażenia warunkowe tworzy się przy użyciu Wyrażenia warunkowe tworzy się przy użyciu
operatorów porównania i operatorów logicznych operatorów porównania i operatorów logicznych
Operatory porównania i logiczne
Operatory porównania Operatory porównania
= równości, <> nierówności, > większości,
< mniejszości, >= niemniejszości,
<= niewiększości Is tożsamości
Like podobieństwa Operatory logiczne
Operatory logiczne AND koniunkcji OR alternatywy
Instrukcja warunkowa If
If warunek Then instrukcja
lub dla kilku krótkich instrukcji:
If warunek Then instrukcja1 : instrukcja2 : ...
lub w postaci blokowej:
If warunek Then blok instrukcji End If
Instrukcje są wykonywane tylko wtedy, gdy warunek jest spełniony.
Instrukcja warunkowa If … Else
If warunek Then instrukcja1 Else instrukcja2
Można użyć kilku krótkich instrukcji w jednej linii oddzielając je dwukropkami – analogicznie jak na poprzednim slajdzie.
Postać blokowa:
If warunek Then
blok instrukcji1 Else
blok instrukcji2 End If
Instrukcje po Then są wykonywane, gdy warunek jest
Instrukcja If … ElseIf
Stosowana jest przy zagnieżdżeniu warunków:
If warunek1 Then blok instrukcji1 ElseIf warunek2 Then
blok instrukcji2
[ElseIf warunek_n Then blok instrukcji_n]
[Else
blok instrukcji_pozost]
End If
Warunki sprawdzane są po kolei i wykonywany jest tylko jeden blok instrukcji.
Instrukcja Select Case
W tym wypadku sprawdzane jest, czy
W tym wypadku sprawdzane jest, czy wyrażenie przyjmuje przyjmuje podane wartości
podane wartości
Select Case wyrażenie Case wartość1
blok instrukcji1 [Case wartość_n
blok instrukcji_n]
...
[Case Else
blok instrukcji_else]
End Select
W przypadku, gdy jakiś blok_instrukcji wykonywany jest dla kilku wartości, używa się konstrukcji:
Instrukcja Select Case Is
W przypadku, kiedy nie chodzi o równość W przypadku, kiedy nie chodzi o równość
wyrażenie = wartość, ale o inną relację, wtedy używana , ale o inną relację, wtedy używana jest konstrukcja:
jest konstrukcja:
Select Case wyrażenie Case Is relacja1
blok instrukcji1 ...
End Select
Tego typu konstrukcja może występować razem ze zwykłymi wyrażeniami typu Select Case
Instrukcja Select Case…To…
W przypadku, kiedy chodzi o zakres pomiędzy dwiema W przypadku, kiedy chodzi o zakres pomiędzy dwiema
wartościami, używana jest konstrukcja:
wartościami, używana jest konstrukcja:
Select Case wyrażenie
Case wartość1 To wartość2 blok instrukcji
...
End Select
Tego typu konstrukcja również może występować razem ze zwykłymi wyrażeniami typu Select Case
Pętle
Są to wyrażenia strukturalne pozwalające wykonywać blok Są to wyrażenia strukturalne pozwalające wykonywać blok
instrukcji (instrukcję) wielokrotnie.
instrukcji (instrukcję) wielokrotnie.
Konieczne jest podanie warunek zakończenia wykonywania Konieczne jest podanie warunek zakończenia wykonywania
instrukcji (warunku wyjścia z pętli).
instrukcji (warunku wyjścia z pętli).
W przypadku błędnej definicji warunku wyjścia może dojść do W przypadku błędnej definicji warunku wyjścia może dojść do
sytuacji, kiedy pętla będzie wykonywana bez możliwości jej sytuacji, kiedy pętla będzie wykonywana bez możliwości jej
zakończenia.
zakończenia.
Pętlę taką można przerwać kombinacją klawiszy
Pętlę taką można przerwać kombinacją klawiszy Ctrl+BreakCtrl+Break
Pętla Do
Do
If warunek Then Exit Do blok_instrukcji
Loop
Wykonywanie instrukcji pętli kończy się, gdy podczas sprawdzania warunek jego wartość jest równa True
Pętla Do Until
Do Until warunek
blok_instrukcji Loop
Instrukcje w bloku są wykonywane, dopóki warunek nie uzyska wartości True
Jeśli przed pierwszym wykonaniem pętli warunek będzie miał wartość True, instrukcje nigdy nie zostaną wykonane
Warunek jest sprawdzany przed każdym wykonaniem instrukcji
Pętla Do While
Do While warunek
blok_instrukcji Loop
Instrukcje w bloku są wykonywane tak długo, jak długo warunek ma wartość True
Jeśli przed pierwszym wykonaniem pętli warunek ma wartość False, instrukcje nie będą wykonane
Warunek jest sprawdzany przed każdym wykonaniem instrukcji
Pętla Do…Loop Until
Do
blok_instrukcji Loop Until warunek
Instrukcje w bloku są wykonywane, dopóki warunek nie uzyska wartości True
Bez względu na wartość początkową warunku pierwszy przebieg pętli będzie wykonany
Warunek jest sprawdzany po każdym wykonaniu instrukcji
Pętla Do…Loop While
Do
blok_instrukcji Loop While warunek
Instrukcje w bloku są wykonywane, jak długo warunek ma wartość True
Bez względu na wartość początkową warunku pierwszy przebieg pętli będzie wykonany
Warunek jest sprawdzany po każdym wykonaniu instrukcji
Pętla While Wend
While
While warunekwarunek
blok_instrukcji WendWend
Instrukcje są wykonywane o ile
Instrukcje są wykonywane o ile warunekwarunek ma wartość True ma wartość True Jeśli na początku
Jeśli na początku warunekwarunek ma wartość False ma wartość False, instrukcje nie , instrukcje nie są wykonywane
są wykonywane
Warunek jest sprawdzany przed każdym wykonaniem instrukcji Warunek jest sprawdzany przed każdym wykonaniem instrukcji
Pętla For
For For liczniklicznik = = wart_poczwart_pocz To To wart_konc wart_konc [Step [Step krokkrok]] blok_instrukcji
Next
Next liczniklicznik
Pętla wykonywana jest określoną liczbę razy dla
Pętla wykonywana jest określoną liczbę razy dla licznikalicznika narastającego po każdym przebiegu pętli co
narastającego po każdym przebiegu pętli co krokkrok od od wart_pocz
wart_pocz do do wart_koncwart_konc Człon
Człon Step krokStep krok występuje w kodzie, gdy wartość występuje w kodzie, gdy wartość krokkrok różni różni się od 1 (wartość ta może być ujemna).
się od 1 (wartość ta może być ujemna).
Pętla kończy się, kiedy licznik przekroczy
Pętla kończy się, kiedy licznik przekroczy wart_koncwart_konc
Pętla For Each
For Each element In kolekcja blok_instrukcji
Next element
Pętla wykonywana jest tyle razy, jaka jest liczność kolekcji Instrukcje są wykonywane dla każdego elementu kolekcji
Obsługa plików
Aby na pliku wykonać jakąś operację (odczyt, zapis), należy Aby na pliku wykonać jakąś operację (odczyt, zapis), należy
wykonać następujące czynności:
wykonać następujące czynności:
1. Otworzyć plik z deklaracją w jakim celu.
2. Dokonać na nim operacji odczytu lub zapisu.
3. Zamknąć plik.
Otwarcie pliku
Składnia:
Składnia:
Open ścieżka For tryb As [#]NrPliku Parametr
Parametr ścieżka, to ścieżka dostępu do pliku w systemie. , to ścieżka dostępu do pliku w systemie.
Podajemy ją w postaci łańcucha znakowego (w cudzysłowach Podajemy ją w postaci łańcucha znakowego (w cudzysłowach
" ") lub w postaci zmiennej łańcuchowej przechowującej
" ") lub w postaci zmiennej łańcuchowej przechowującej wartość tego łańcucha.
wartość tego łańcucha.
Parametr
Parametr tryb, to cel otwarcia pliku: , to cel otwarcia pliku: Input – do odczytu, – do odczytu, Output – do zapisu (niszczy zawartość pliku), – do zapisu (niszczy zawartość pliku), Append – do – do
dopisania na końcu pliku. Te trzy tryby używane są do plików dopisania na końcu pliku. Te trzy tryby używane są do plików
tekstowych, pozostałe to:
tekstowych, pozostałe to: Binary i i Random..
NrPliku, to pierwszy dostępny (nie zajęty!) numer w zakresie , to pierwszy dostępny (nie zajęty!) numer w zakresie 1–511.
1–511.
Odczyt z pliku
Składnia:
Składnia:
Input [#]NrPliku, Lista zmiennych Kolejne wartości w pliku muszą odpowiadać sekwencyjnie Kolejne wartości w pliku muszą odpowiadać sekwencyjnie
typom zmiennych z podanej listy.
typom zmiennych z podanej listy.
Składnia:
Składnia:
LineInput [#]NrPliku, Zm_łańcuchowa Do zmiennej zwracana jest wartość całej linii (do znaku Do zmiennej zwracana jest wartość całej linii (do znaku
powrotu karetki Chr(13) lub sekwencji znaków powrotu karetki powrotu karetki Chr(13) lub sekwencji znaków powrotu karetki i końca linii iChr(13)+Chr(10)) w postaci łańcucha znakowego.
i końca linii iChr(13)+Chr(10)) w postaci łańcucha znakowego.
Zapis do pliku
Składnia:
Składnia:
Write [#]NrPliku[, Lista wartości]
Pominięcie listy wartości powoduje zapisanie pustej linii.
Pominięcie listy wartości powoduje zapisanie pustej linii.
Wartości w pliku oddzielane są przecinkami, a łańcuchy Wartości w pliku oddzielane są przecinkami, a łańcuchy
znakowe wpisywane w cudzysłowach. Na końcu każdej listy znakowe wpisywane w cudzysłowach. Na końcu każdej listy
wartości wstawiany jest znak końca linii. Lista wartości może wartości wstawiany jest znak końca linii. Lista wartości może być podana bezpośrednio, albo za pośrednictwem zmiennych.
być podana bezpośrednio, albo za pośrednictwem zmiennych.
Składnia:
Składnia:
Print [#]NrPliku[, Lista wyrażeń]
W tym wypadku dostępne są większe możliwości sterowania W tym wypadku dostępne są większe możliwości sterowania sposobem zapisu (wstawianie spacji, tabulatorów, ustawianie sposobem zapisu (wstawianie spacji, tabulatorów, ustawianie
miejsca wpisu w linii, itd.).
miejsca wpisu w linii, itd.).
Zamknięcie pliku
Składnia:
Składnia:
Close [Lista NrPlików]
Pominięcie listy numerów powoduje zamknięcie wszystkich Pominięcie listy numerów powoduje zamknięcie wszystkich
wskaźników do pliku.
wskaźników do pliku.