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.