Program ćwiczenia nr 4: Okna dialogowe. 1. Tworzenie okien dialogowych. 2. Umieszczanie i konfigurowanie elementów sterujących we własnych oknach dialogowych. 3. Tworzenie własnych okien dialogowych. 4. Odczytywanie danych z okien dialogowych. 5. Modyfikowanie elementów okien w trakcie gdy jest ono aktywne. Celem ćwiczenia jest zapoznanie się z tworzeniem i wykorzystywaniem okien dialogowych w Visual Basic wbudowanym w Microsoft Excel. 1. Tworzenie okien dialogowych. Okna dialogowe aplikacji Visual Basic służą do wzbogacenia komunikacji z użytkownikiem. Najłatwiejszą drogą do dodania dialogów do aplikacji, jest użycie predefiniowanych dialogów. Są one łatwe do zaprojektowania i użycia, ale są ograniczone do określonego działania. Wyróżnia się trzy predefiniowane dialogi w aplikacjach Visual Basic: InputBox - wyświetla podpowiedź w oknie dialogu i zwraca tekst napisany przez funkcja użytkownika. InputBox - wyświetla podpowiedź w oknie dialogu i zwraca tekst wprowadzony metoda przez użytkownika. Ta metoda jest podobna do InputBox funkcja, ale dostarcza dodatkowe funkcje wprowadzania specyficznych typów danych. MsgBox - wyświetla komunikat w oknie dialogu i zwraca wartość zwróconą przez przycisk naciśnięty przez użytkownika. Zwracana wartość może być zignorowana. 2. Umieszczanie i konfigurowanie elementów sterujących we własnych oknach dialogowych. Funkcji lub metody InputBox można użyć do zapytania użytkownika o informację. Kiedy jest używane okno InputBox, dostępne są tylko predefiniowane elementy dialogu. Można zmienić jedynie tekst na belce tytułowej i zgłoszenie wyświetlane dla użytkownika. Do stworzenia bardziej wyszukanego działania, trzeba użyć dialogu stworzonego przez użytkownika. Poniższy program przedstawia jak można wyświetlić InputBox: Sub OpenMyWorkBook() MyBook = InputBox( Enter the workbook to open:, Workbook Open ) Workbooks.Open filename:=mybook Który po wywołaniu wygląda następująco:
Wyświetlanie informacji przez funkcję MsgBox. Czasami zachodzi potrzeba wyświetlenia informacji takiej jak sygnalizacja błędu lub ostrzeżenia. Wtedy można użyć funkcji MsgBox. Poniższa linia programu przedstawia jak można wyświetlić MsgBox: MsgBox "Error encountered while trying to open file, " & _ "please retry.", vbexclamation, "Text Editor" Można używać funkcji MsgBox z różnymi ikonami i przyciskami. Wykonuje się to przez tworzenie sumy stałych jako buttons w argumentach wywoływanej funkcji. Można również określić, który przycisk wybrał użytkownik w oknie dialogowym, bazując na wartości zwróconej prze funkcję. Poniższy przykład funkcji MsgBox, wyświetla krytyczny komunikat w oknie dialogu zawierającym przyciski Tak lub Nie. Przycisk Nie jest odpowiedzią domyślną. Zmienna DialogStyle zawiera sumę wbudowanych stałych która definiuje dialog w argumencie buttons. Sub Macro1() ' Put together a sample message box with all the proper components. Msg = "This is a sample of critical-error message." Msg = Msg & " Do you want to continue?" 'Describe dialog DialogStyle = vbyesno + vbcritical + vbdefaultbutton2 Title = "MsgBox Demonstration" Response = MsgBox(Msg, DialogStyle, Title) 'Get User response. If Response = vbyes Then 'Evaluate response and Msg = "You chose Yes." 'act appropriately Else Msg = "You chose No or pressed Enter." End If MsgBox Msg Uwaga: Stałe vbyes, vbyesno, vbcritical, itp. są predefiniowane w Visual Basic. Aby dowiedzieć się więcej o funkcji MsgBox i InputBox i pozostałych stałych można przeczytać pomoc Visual Basic Reference (help).
3. Tworzenie własnych okien dialogowych. Aby utworzyć własny dialog, należy najpierw utworzyć nową formę Wstaw Makro Dialog, po czym ukazuje się początkowy wzór dialogu: Elementy kontrolne tworzonego dialogu: Label Grop Box Check Box List Box Combination List-Box Scroll Bar Control Properties Toggle Grid Edit Box Create Button Option Button Drop Down Combination Drop-Down Edit Spinner Edit Code Run Dialog Mają one odpowiednio znaczenie: Label Edit Box Group Box Tekst dostarczony przez użytkownika, nazwy, instrukcje i warunki. Prostokąt w który użytkownik może wprowadzić tekst, liczby, lub referencję komórki arkusza Obramowanie zawierające grupę przycisków lub innych elementów kontrolnych
Create Button Przycisk komendy takiej jak Ok. lub Cancel Check Box Prostokąt który oznacza czy opcja jest ustawiona, Option Button Przycisk radiowy. Przycisk do wybierania jednego z grupy wzajemnie wykluczających się. List Box Lista łańcuchów tekstowych, jeden lub kilka z nich może być wybranych. Drop-Down Pojedynczy prostokąt ze strzałką, która po wybraniu rozwija listę łańcuchów tekstowych. Combination Pojedynczy edytowany prostokąt, kombinowany z listą łańcuchów List-Edit tekstowych. Combination Pusty prostokąt i strzałka, połączona z Drop-Down. Drop-Down Edit Scroll Bar Pozioma lub pionowa belka do zmiany numerycznej wartości Spinner Para przycisków do zwiększania lub zmniejszania wyświetlanej wartości. A oto przyciski do obsługi dialogu: Control Properties Edit Code Toggle Grid Run Dialog Używane do przedstawienia lub zmiany własności wybranych obiektów Używane do tworzenia lub zmiany kodu przyporządkowanego do wybranego obiektu. Używane do umieszczania elementów kontrolnych w siatce. Używane do przedstawienia dialogu w stanie uruchomionym. Aby wstawić element kontrolny, należy kliknąć na przycisku reprezentującym dany element, następnie na formie w wybranym miejscu należy nacisnąć lewy przycisk myszki i przeciągnąć do żądanego rozmiaru. Aby zmienić własności danego obiektu należy kliknąć prawym przyciskiem myszki i wybrać z rozwijanego menu Formatuj Obiekt. Aby uruchomić tak zaprojektowany dialog należy użyć metody Show w procedurze która została przyporządkowana do przycisku, komendy menu lub zdarzeniu w środowisku Microsoft Excel. Sub Macro1() DialogSheets("Dialog1").Show Funkcja Show zwraca wartość True jeśli do zamknięcia dialogu zostanie użyty przycisk Ok., False jeśli przycisk Cancel. 4. Odczytywanie danych z okien dialogowych. Można użyć połączenia do transferu informacji z elementu kontrolnego do komórki w arkuszu. Kiedy element kontrolny jest podłączony do komórki w arkuszu, wybrane pole w List Box lub wartość wskazywaną przez Check Box jest bezzwłocznie uaktualniana w arkuszu zawierającym połączoną komórkę. W przypadku dialogu, można napisać procedurę która pobierze informację wprowadzoną do elementu kontrolnego lub jego zmianę i uaktualniającą tę zmianę w innych procedurach aplikacji. Na przykład, jeśli dialog zawiera pojedynczy Edit Box, można użyć poniższej procedury do transferu danych z Edit Box do aktywnej komórki.
Sub EditBox4_Change() ThisText = DialogSheets( MyDialog ).EditBoxes(1).Text Application.Sheets(2).Activate ActivateCell.Value = ThisText Można pracować z wszystkimi elementami kontrolnymi pewnego typu przez indeksowanie ich kolekcji klas. Na przykład, kolekcją klas dla przycisków opcjonalnych jest OptionButtons. Jeśli potrzeba czytać tablicę stanu każdej opcji przycisku w oknie dialogu, można użyć poniższej procedury: Sub ButtonChecking() N = 0 For Each OptionBtn In DialogSheets(1).OptionButtons N = N + 1 If OptionBtn.Value = xlon Then Sheets( sheet1 ).Cells(N, 1) = Checked Else OptionBtn.Value = xloff Then Sheets( sheet1 ).Cells(N, 1) = Not checked End If Next Uwaga: Procedura może czytać i ustawiać zbiory własności elementów kontrolnych w dowolnym czasie, przed wyświetleniem dialogu, w czasie gdy jest widoczny i po jego zamknięciu. 5. Modyfikowanie elementów okien w trakcie gdy jest ono aktywne. Zmiana zainicjowanych własności elementów kontrolnych w czasie projektowania jest możliwa używając komendę Obiekt w menu Format. Można również zmienić własności elementów kontrolnych w czasie działania procedury. Na przykład może zajść potrzeba zmiany tekstu po tym jak użytkownik zaznaczył Check Box. Kompletna lista własności dla każdego elementu kontrolnego jest inna. Aby dowiedzieć się więcej o własnościach elementów kontrolnych można przeczytać pomoc Visual Basic Reference (help). Włączanie opcji gdy warunek jest spełniony. Można użyć własność Enabled elementu kontrolnego, aby zapobiegać możliwości zmiany przez użytkownika, dotąd, aż pewien warunek nie jest spełniony. Pokazuje to poniższa procedura : Sub CheckBox6_Click() If DialogSheets(1).CheckBoxes(1).Value = nlon Then DialogSheets(1).OptionButtons.Enabled = True Else DialogSheets(1).OptionButtons.Enabled = False End If Zmiana własności dialogu w czasie działania. Czasami zachodzi konieczność zmiany własności dialogu w czasie jego działania np. wysokości lub ukrycia. Ilustrują to poniższe procedury: Set the expanded size Sub Button8_Click() Dialog Sheets( MyFileOpenDialogg ).DialogFrame.Height = 500 Poniższa procedura ukrywa dialog : Sub Button1_Click() N = MsgBox( Are you sure you want to close?, YesNo ) If N = vbyes Then DialogSheets(1).Hide
End If Zadania do wykonania. 1. Utworzyć własne okna dialogowe. 2. Napisać makro wykonujące zmiany własności dialogu i obiektów w trakcie jego działania.