Transcript Wyklad 7

Programowanie
w VBA
Formanty. Listy. Wybory i opcje.
„Pokrętło” - Spinbutton.
Listy
• Pole listy – ListBox – lista o stałym
rozmiarze w formularzu z suwakiem z
boku pozwalającym wybierać niewidoczne
elementy, można wybierać więcej niż
jeden element na raz;
• Lista Combo – ComboBox – lista
pokazująca jeden lub kilka elementów,
jednak rozszerza się po otwarciu;
Metody i właściwości list
(ListBox i ComboBox)
• <Lista>.AddItem <wartość> – dodaje <wartość>
(zmienne, teksty, liczby, elementy arkusza) jako
kolejny element listy;
• <Lista>.ListIndex – zwraca numer aktualnie
wybranego elementu listy (pierwszy to 0, brak
wybranego elementu lub element wpisany to -1);
• <Lista>.ListCount – zwraca ilość elementów listy;
• <Lista>.RemoveItem <numer> - kasuje element
listy o danym numerze (pierwszy to 0);
• <Lista>.Clear – kasuje elementy listy;
• <Lista>.Value – zwraca zawartość aktualnie
wybranego elementu listy (brak wybranego
elementu na początku to ””);
Listy a.d.
• <Lista>.RowSource = „a1:a10” –
wprowadza dane z danego zakresu do
listy;
• <Lista>.ColumnCount = 3 – umożliwia
wprowadzenie powyższych danych jako
kilku kolumn (wówczas można użyć
zakresu np. „a1:c3” – trzy kolumny) –
domyślnie, bez tych ustawień można
wprowadzić dane tylko z jednej kolumny!;
Listy a.d.
Wielokrotny wybór w Listboxach
uruchamiamy przez zmianę właściwości
„multiselect” na „fmMultiSelectMulti”
• <Lista>.Selected(i) – zwraca True/False
czy i-ty indeks listy jest zaznaczony
• <Lista>.List(i) – zwraca wartość i-tego
indeksu listy
Zadanie 1
• Utworzyć formularz zawierający ComboBox, ListBox,
TextBox, CommandButton, CheckBox i sześć
OptionButtonów, wszystko odpowiednio opisane;
• W TextBox wpisywany jest efek łączenia członów z
których:
– w ComboBoxie są podstawy członu (nazwa alkanu o
odpowiedniej długości łańcucha)
– w ListBoxie (wielokrotnego wyboru) są sufiksy oznaczające
wiązanie wielokrotne i/lub grupy funkcyjne
– OptionButton dopisuje prefiks rozgałęzienia łańcucha
węglowego
– CheckBox w przypadku zaznaczenia dodaje człon „perfluoro”
• Przycisk powoduje zamknięcie formularza i zakończenie
programu;
Podpowiedzi do zadania nr 1
• Listy najlepiej wypełnić (poprzez AddItem)
w makrze uruchamiającym formularz;
• Wygląd docelowy formularza:
Podpowiedzi do zadania nr 1
• Aby formularz był w pełni „idiotoodporny”, należy
wszystkie możliwe zdarzenia obsłużyć uruchamiając ten
sam podprogram, a więc aby w każdej procedurze
obsługującej zdarzenie znajdowało się tylko „Call
<podprogram>”;
• W tym podprogramie (Private Sub, umiejscowiony w
kodzie formularza) należy kolejnymi instrukcjami
warunkowymi sprawdzić stan ComboBoxa (czy w ogóle
coś jest już wybrane, jeśli nie, to ma nic nie robić),
ListBoxa, CheckBoxa i OptionButtonów, łącząc
(kumulując) człony w odpowiedniej kolejności w
zmiennej tekstowej i na końcu przypisać tą zmienną do
pola tekstowego (TextBox);
• Pamiętać o nadaniu początkowych wartości (np. jeden
OptionButton zaznaczony od razu)
Podpowiedzi do zadania nr 1
• A tak powinno wyglądać makro uruchamiające formularz:
Sub formularz()
Load Userform1
UserForm1.ComboBox1.AddItem "pent"
UserForm1.ComboBox1.AddItem "heks"
UserForm1.ComboBox1.AddItem "hept"
UserForm1.ComboBox1.AddItem "okt"
UserForm1.ComboBox1.AddItem "non"
UserForm1.ComboBox1.AddItem "dek"
UserForm1.ComboBox1.AddItem "ejkoz"
UserForm1.ListBox1.AddItem "an"
UserForm1.ListBox1.AddItem "en"
UserForm1.ListBox1.AddItem "yn"
UserForm1.ListBox1.AddItem "ol"
UserForm1.ListBox1.AddItem "al"
UserForm1.ListBox1.AddItem "on"
UserForm1.OptionButton1.Value = True
UserForm1.Show
Unload Userform1
End Sub
Spinbutton
• Podstawowa właściwość to Value, a zdarzenie
to Change;
• Formant przekazujący chęć użytkownika do
zmiany wartości/pozycji listy o ustaloną z góry
wartość w górę lub w dół (lewo lub prawo);
• Przydatne jest ustalenie właściwości min, max,
smallchange (minimum i maksimum poza które
wartość spinbutton nie wyjdzie bez względu na
ilość kliknięć, oraz o ile zmieni się wartość w
górę lub w dół przy kliknięciu na formant)
Spinbutton, c.d.
• Przykładowe wykorzystanie:
Dim zbior(-5 To 5) As Integer
Private Sub SpinButton1_Change()
TextBox1.Text = zbior(SpinButton1.Value)
End Sub
Private Sub UserForm_Initialize()
For i = -5 To 5
zbior(i) = i
Next
SpinButton1.Min = -5
SpinButton1.Max = 5
SpinButton1.Value = 0
End Sub
RefEdit
• Pobiera adres zaznaczonego obszaru
arkusza
• Działa analogicznie do metody InputBox,
czyli można użyć wartości jako adresu, np.
Range(RefEdit1.Value).Value = 1
• …jak też oczywiście pobierać dane z tego
adresu.
Zadanie 2
• Przerób formularz z zadania 1 dodając
Spinbutton, który zmienia (w przypadku
zaznaczenia na listboxie czegoś innego
niż -an) numer węgla, przy którym jest
pierwsza grupa funkcyjna (od 1 do 100)
• Dodaj możliwość dodawania własnej
pozycji w ComboBoxie
• Dodaj RefEdit, który w przypadku
zaznaczenia komórki, będzie do niej
przypisywana wartość TextBoxa
Zadanie 3
• Zaprojektuj formularz, który będzie
zawierał Spinbutton i Textbox, przy czym
klikanie na Spinbutton będzie odpowiednio
przesuwał Textbox w górę lub w dół, a
przesunięcie względem początkowej
pozycji (w pixelach) będzie podawał jako
wpisana w to pole tekstowe wartość.
Zmiana o 5-10 pixeli na raz, żeby była
wyraźnie zauważalna.