Programowanie w VBA Formanty Listy Wybory i opcje
Programowanie w VBA Formanty. Listy. Wybory i opcje. „Pokrętło” - Spinbutton.
Listy • Pole listy – List. Box – 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 – Combo. Box – lista pokazująca jeden lub kilka elementów, jednak rozszerza się po otwarciu;
Metody i właściwości list (List. Box i Combo. Box) • <Lista>. Add. Item <wartość> – dodaje <wartość> (zmienne, teksty, liczby, elementy arkusza) jako kolejny element listy; • <Lista>. List. Index – zwraca numer aktualnie wybranego elementu listy (pierwszy to 0, brak wybranego elementu lub element wpisany to -1); • <Lista>. List. Count – zwraca ilość elementów listy; • <Lista>. Remove. Item <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>. Row. Source = „a 1: a 10” – wprowadza dane z danego zakresu do listy; • <Lista>. Column. Count = 3 – umożliwia wprowadzenie powyższych danych jako kilku kolumn (wówczas można użyć zakresu np. „a 1: c 3” – 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 „fm. Multi. Select. Multi” • <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 Combo. Box, List. Box, Text. Box, Command. Button, Check. Box i sześć Option. Buttonów, wszystko odpowiednio opisane; • W Text. Box wpisywany jest efek łączenia członów z których: – w Combo. Boxie są podstawy członu (nazwa alkanu o odpowiedniej długości łańcucha) – w List. Boxie (wielokrotnego wyboru) są sufiksy oznaczające wiązanie wielokrotne i/lub grupy funkcyjne – Option. Button dopisuje prefiks rozgałęzienia łańcucha węglowego – Check. Box 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 Add. Item) 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 Combo. Boxa (czy w ogóle coś jest już wybrane, jeśli nie, to ma nic nie robić), List. Boxa, Check. Boxa i Option. Buttonów, łącząc (kumulując) człony w odpowiedniej kolejności w zmiennej tekstowej i na końcu przypisać tą zmienną do pola tekstowego (Text. Box); • Pamiętać o nadaniu początkowych wartości (np. jeden Option. Button zaznaczony od razu)
Podpowiedzi do zadania nr 1 • A tak powinno wyglądać makro uruchamiające formularz: Sub formularz() Load Userform 1 User. Form 1. Combo. Box 1. Add. Item "pent" User. Form 1. Combo. Box 1. Add. Item "heks" User. Form 1. Combo. Box 1. Add. Item "hept" User. Form 1. Combo. Box 1. Add. Item "okt" User. Form 1. Combo. Box 1. Add. Item "non" User. Form 1. Combo. Box 1. Add. Item "dek" User. Form 1. Combo. Box 1. Add. Item "ejkoz" User. Form 1. List. Box 1. Add. Item "an" User. Form 1. List. Box 1. Add. Item "en" User. Form 1. List. Box 1. Add. Item "yn" User. Form 1. List. Box 1. Add. Item "ol" User. Form 1. List. Box 1. Add. Item "al" User. Form 1. List. Box 1. Add. Item "on" User. Form 1. Option. Button 1. Value = True User. Form 1. Show Unload Userform 1 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 Spin. Button 1_Change() Text. Box 1. Text = zbior(Spin. Button 1. Value) End Sub Private Sub User. Form_Initialize() For i = -5 To 5 zbior(i) = i Next Spin. Button 1. Min = -5 Spin. Button 1. Max = 5 Spin. Button 1. Value = 0 End Sub
Ref. Edit • Pobiera adres zaznaczonego obszaru arkusza • Działa analogicznie do metody Input. Box, czyli można użyć wartości jako adresu, np. Range(Ref. Edit 1. 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 Combo. Boxie • Dodaj Ref. Edit, który w przypadku zaznaczenia komórki, będzie do niej przypisywana wartość Text. Boxa
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.
- Slides: 14