Wie es Euch gefällt. programmieren. Hier legt der Makroentwickler

Ähnliche Dokumente
Programmieren mit Excel VBA Teil 2 Formulare als Benutzerschnittstellen

Microsoft Access 2010 Bilder

Makro + VBA 2007 effektiv

Überschrift/Caption. Eigenschaftenfenster

Wichtige Standardaktionen durchführen

3 Hilfefunktionen PROJEKT. Windows XP Professional Edition. Hilfefunktion starten. Das elektronische Handbuch. Das Stichwortregister der Windows-Hilfe

Makros erstellen und aufrufen Dr. V.Thormählen

I Inhaltsverzeichnis B Beispielverzeichnis Vorwort... 17

Dropdown-Formularfelder mit mehr als 25 Einträgen Erklärung

Formulare. Datenbankanwendung 113

Projekt 3 Steuerelemente und Ereignisse

1 MAKROS AUFZEICHNEN. 1.1 EinfÄhrung

VBA mit Office 97 lernen

3 Maps richtig ablegen und

Handbuch zum VivaWeb-Serienbrief-Programm

11.1 Warum überhaupt VBA?

Anleitung zum Download der EBMG_Datei_9_2.xls

Wichtige Standardaktionen durchführen

4 Makros ausprobieren

10 Anwenderfreundlich mit Makros

Das Anwendungsfenster

Access für Windows. Ricardo Hernández García 1. Ausgabe, 1. Aktualisierung, Dezember Automatisierung, Programmierung ACC2010P

Kennen, können, beherrschen lernen was gebraucht wird

Kennen, können, beherrschen lernen was gebraucht wird

3 VOREINSTELLUNGEN ANPASSEN

Mit Dokumenten arbeiten

DAS EINSTEIGERSEMINAR

3 Mit Programmen und Fenstern

10 Makros Makros aufzeichnen

3 VOREINSTELLUNGEN ANPASSEN

4. Mit Fenstern arbeiten

ECDL - Europäischer Computer Führerschein. Charlotte von Braunschweig, Konrad Stulle, Sabine Spieß. 1. Ausgabe, 1. Aktualisierung, März 2012

Hochschulrechenzentrum Justus-Liebig-Universität Gießen. CorelDRAW X7. Zoomen

7 DOKUMENTEE FORMATIEREN

Kurzanleitung. Zitiertil-Creator. Dokumentvorlagen Dokumente Formatvorlagen Format Zeichen Format Absatz

1 MAKROS AUFZEICHNEN. 4 MAKRO + VBA EFFEKTIV Edi Bauer

Handbuch ECDL 2003 Modul 5: Datenbank Formulare anpassen

Word starten. Word Word 2010 starten. Schritt 1

1 MAKROS AUFZEICHNEN. 1.1 Einführung

Folienübergänge und Animationen Folien Übergänge Animationen und Effekte. Unterschiede zwischen Impress und PowerPoint Unterschiede

Word Kapitel 1 Grundlagen Lektion 1 Benutzeroberfläche

Microsoft Word 2013 Aufzählungen und Nummerierungen

Word 2010 Online Formulare mit Vorversionstools

Inhaltsverzeichnisse. 1. Überschriften zuweisen. 2. Seitenzahlen einfügen. 3. Einen Seitenwechsel einfügen

Dateiansichten in Ordnern

zur Verfügung gestellt durch das OpenOffice.org Dokumentations-Projekt

Algorithmen und ihre Programmierung

Technische Dokumentation Abstimmungs-/ Anwesenheitsliste

Begleitskript zum VBA Einführungskurs

JavaScript. Dies ist normales HTML. Hallo Welt! Dies ist JavaScript. Wieder normales HTML.

Neben dem Symbol Entwurfsmodus ist das Symbol Befehlschaltfläche zu sehen.

MICROSOFT EXCEL XP. Inhaltsverzeichnis

Word. Verweise. Textmarken, Querverweise, Hyperlinks

Kontinuierliche Darstellung der Massenschwerpunktskoordinaten der Baugruppe.

Einrichtungshinweise Microsoft Internet Explorer 10

Hierfür sind mit dem Content Management System (CMS) Joomla in Verbindung mit SIGE Pro Inhalte angelegt worden, die genau diesen Zweck erfüllen.

3.1 PowerPoint starten

Beschreibung für Import der Protokolldaten nach Microsoft Excel

KOPF- UND FUßZEILEN KOPF- UND FUßZEILEN HINZUFÜGEN

Inhaltsverzeichnis. Teil I Erste Schritte. 1 Einleitung 11. Teil II Grundlagen von VBA. 2 Die ersten VBA-Prozeduren erstellen 17

Gegenüber der direkten Formatierung jedes Wortes, jedes Satzes, Absatzes und jeder Seite hat die Arbeit mit Formatvorlagen mehrere Vorteile:

Textstellen hervorheben

Erstellen eines Formulars

Einführung in Automation Studio

Text markieren mit der Maus. Text markieren mit der Tastatur. Text schnell formatieren. Löschen, überschreiben, rückgängig machen

Ausführen eines Makros beim Starten von OpenOffice.org

Arbeitsbuch. Makroprogrammierung mit Excel

Microsoft Visual Studio Community 2015

Formulare mit Microsoft Word 2010 erstellen

Anwendungen individuell anpassen

Hinweis zu aktiven Inhalten von Dateien

Microsoft PowerPoint 2013 Folienübergänge

Nach dem Starten von Excel sieht der Bildschirm in der Regel wie folgt aus:

Visual Basic Editor CATIA V5

Normal.Dot und Co. - Dokumentvorlagen in Word (Teil 2)

1 TEXTEINGABE UND TEXTEDITION

SL BKRD DECUS RESPEC GAMING MOUSE

Gestalten eigener Menüleisten in MS-Office 97/2000/XP/2003

Verknüpfen & Einbetten von Daten

Word 2010 Formulare erstellen mit Inhaltssteuerelementen

Alternative Schutzmechanismen für Excel

17 VBA-Praxisbeispiel

2 Zum Beginn der Diagrammerstellung müssen Sie den Datenbereich mit den Spalten- und Zeilenüberschriften markiert haben.

Einführung in Visual Basic 6.0

1 Visual Basic for Application mit Excel (VBA)

Erstellung eines elektronischen Bilderbuchs mit Open Office

Bilderverwaltung mit Access

Inhaltsverzeichnis Farbpaletten Grundlagen Farbpaletten auswählen Benutzerdefinierte Farbpaletten erstellen...

1 Aufgaben verwalten und delegieren

Access 2010 Programmierung Schleifen

Senioren starten mit Word

Beschreibung: Erforderliches Programm: Excel (97)2000 bis 2007

Schnellbausteine. Word Aufbau ZID/Dagmar Serb V.01/Jun2011

Impressum. Impressum

VBA- Programmierung. Integrierte Lösungen mit Office Ricardo Hernández García. 1. Ausgabe, November 2013

Grundlagen Word Eigene Symbolleisten. Eigene Symbolleisten in Word erstellen

Das in Abb. 2 und Abb. 3 dargestellte Kombinationsfeld (Abb. 2 roter Kreis) wurde mit Hilfe des Kombinationsfeld-Assistenten

Microsoft PowerPoint 2013 Layouts

Anpassen BS-Explorer

Access 2003 Programmierung mit Visual Basic

Transkript:

Makro-Dialogfelder gestalten Wie es Euch gefällt Effektive VBA-Makros brauchen eine leistungsfähige Oberfläche zur Kommunikation mit dem Anwender. Kein Problem: Mit der Maus gestalten Sie das Dialogfeld. R ALF N EBELO Jede eigenständige Windows-Anwendung besitzt eine Oberfläche, die zumeist aus einem Anwendungsfenster mit Menüsystem, Symbolleisten und Dokumentbereich sowie diversen Dialogfeldern besteht. Ein VBA-Makro (Visual Basic für Anwendungen) kommuniziert mit dem Anwender dagegen nur über Dialogfelder, von denen es zwei Hauptarten gibt. In der letzten Ausgabe (ab S. 189) haben wir VBA-interne Dialogfelder behandelt. Ihre eng begrenzte Funktionalität umfaßt die Anzeige von Meldungstexten oder einer Dialogbox für die Eingabe von Kennwörtern, Namen oder sonstigen Daten. In diesem Beitrag geht es um Dialogfelder ohne Funktionsbeschränkungen. Weil sie sich völlig frei gestalten lassen, werden sie als UserForm- oder benutzerdefinierte Dialogfelder bezeichnet. Sie lassen sich exakt an die Anforderungen eines Makros anpassen. Wege zum Ziel UserForm-Dialogfelder entstehen in vier Schritten: Am Anfang steht die Gestaltung des Formular genannten Dialogfeldfensters, das Sie mit den notwendigen Steuerelementen (Texteingabe-, Listenfelder, Kontrollkästchen, Schaltflächen etc.) ausstatten. Anschließend legen Sie die Eigenschaftswerte des Formulars und der Steuerelemente fest, um ihnen bestimmte Qualitäten und Fähigkeiten zuzuweisen. So sorgt beispielsweise die Caption- Eigenschaft für die Beschriftung einer Schaltfläche, während Width und Height Breite und Höhe definieren. Erst im dritten Schritt, in dem es um die Ereignisroutinen geht, müssen Sie programmieren. Hier legt der Makroentwickler fest, wie Formular und Steuerelemente auf äußere Ereignisse, etwa Maus- oder Tastaturaktionen des Anwenders, reagieren sollen. Im vierten und letzten Schritt entsteht das VBA-Makro, mit dem Sie das fertige Dialogfeld starten. Als universelles Werkzeug für alle Arbeitsschritte benötigen Sie nur den Visual-Basic-Editor, den Sie aus jeder Office-Anwendung heraus mit Extras/Makro/Visual-Basic-Editor oder alternativ mit der Tastenkombination [Alt-F11] starten. UserForm-Dialogfelder sind in Dokument- oder Vorlagendateien gespeichert und lassen sich daher erst benutzen, nachdem Sie diese geöffnet haben. Sie können auch die beim Start von Word automatisch geladene Dokumentvorlage normal.dot verwenden dann sind die darin gespeicherten Makros und IM PROJEKTFENSTER des Visual-Basic-Editors legen Sie den Speicherort des Dialogfelds fest. Dialogfelder ebenfalls verfügbar. Das Projektfenster des Visual-Basic-Editors führt die Namen aller geöffneten Dokumente und Dokumentvorlagen auf. Mit dem Anklicken eines Dokuments oder einer Vorlage legen Sie den Speicherort für das neue Dialogfeld fest. In Word sollten Sie sich generell für normal.dot entscheiden. Das Formular zeichnen Nun zur Praxis: Als erstes legen Sie ein Dialogfeld für Word an, das Ihnen viele Auswahlaufgaben abnimmt. Als Beispiel soll die Menükarte für einen Mittagstisch dienen. Mit dem Befehl Einfügen/UserForm erzeugen Sie zunächst ein leeres Formular. Da es für unseren Zweck zu breit ist, verkleinern Sie das Feld um zirka ein Drittel. Unmittelbar neben dem Formular sehen Sie ein mit Werkzeugsammlung überschriebenes Fenster, das alle verfügbaren Steuerelemente zur Auswahl stellt. Um ein Steuerelement auf dem Dialogfeld zu verankern, klicken Sie es in der Werkzeugsammlung an und zeichnen ein Rechteck in der gewünschten Größe und Position auf das Formular. Nahezu jedes Steuerelement besitzt Anfasser, mit denen sich deren Größe auch noch nach dem Aufzeichnen verändern läßt. Beginnen Sie mit einem Steuerelement vom Typ Bezeichnungsfeld (der Typ wird sichtbar, wenn der Mauszeiger für eine kurze Zeit über dem Steuerelement verharrt), das den Benutzer später mit einem geeigneten Text zur Auswahl eines Listeneintrags auffordern soll. Zeichnen Sie das Bezeichnungsfeld direkt unterhalb des Fenstertitels, so daß es annähernd die gesamte Breite des Formulars abdeckt und hoch genug für die Darstellung einer einzelnen Textzeile ist. Direkt darunter zeichnen Sie ein genauso breites Listenfeld, das so weit nach 206 Oktober 1998 PC Magazin

DIE WERKZEUGSAMMLUNG enthält alle Steuerelemente, die Sie auf das Formular zeichnen können. unten reicht, daß nur noch ein schmaler Rand übrigbleibt. Auf diesem zeichnen Sie nebeneinander zwei Befehlsschaltflächen gleicher Breite. Mit einem Klick auf das Diskettensymbol in der Symbolleiste des Visual-Basic-Editors speichern Sie Ihre Arbeit. Eigenschaftswerte zuweisen NAMENSPRÄFIXE Präfix cbo chk cmd fra frm img lbl lst opt txt Dialogfeldkomponente Kombinationsfeld (ComboBox) Kontrollkästchen (CheckBox) Befehlsschaltfläche (CommandButton) Rahmen (Frame) Formular (Form) Anzeige (Image) Bezeichnungsfeld (Label) Listenfeld (ListBox) Optionsfeld (OptionButton) Textfeld (TextBox) Mit dem Eigenschaften-Fenster des Visual-Basic-Editors können Sie die Eigenschaftswerte des jeweils markierten Steuerelements oder Formulars betrachten und bei Bedarf verändern. Die wohl wichtigste Eigenschaft einer Dialogfeldkomponente ist ihr Name, weil er die Verbindung zwischen dem Dialogfeld und den Ereignisroutinen herstellt. Leider sind die von VBA vergebenen Standardnamen nicht besonders aussagekräftig. Ersetzen Sie sie daher durch eine Bezeichnung, die den Typ und die konkrete Funktion der Komponente beschreibt. Zur Typbezeichnung werden üblicherweise die in der Tabelle Namenspräfixe abgedruckten Präfixe verwendet. Ein passender Name für das Formular eines Auswahldialogfelds wäre demnach frmauswahl. Um ihn dem Formular zuzuweisen, wählen Sie es mit einem Klick in die Titelzeile aus und markieren die Name-Zeile im Eigenschaften-Fenster, wo Sie den Standardnamen UserForm1 überschreiben. Quittieren Sie die Änderung mit [Enter]. Klicken Sie anschließend in die Caption- Zeile, die den Text des Fenstertitels festlegt, und ändern Sie deren Einstellung in Mittagsmenü. Das Formular besitzt nun alle notwendigen Eigenschaften. Markieren Sie das Bezeichnungsfeld, und ändern Sie dessen Name-Eigenschaft in lblprompt (als Prompt bezeichnet man jede Art von Aufforderungstext). Die Caption-Eigenschaft, die hier den Inhalt des Bezeichnungsfelds repräsentiert, ändern Sie in Treffen Sie Ihre Wahl:. Beim Listenfeld brauchen Sie nur die Name-Eigenschaft auf lstauswahl zu setzen, den zur Auswahl stehenden Inhalt legen Sie an anderer Stelle fest. Nun bleiben noch die beiden Schaltflächen übrig. Markieren Sie die linke, und weisen Sie ihr den Namen cmdok zu. Als Schaltflächenbeschriftung (Caption-Eigenschaft) wählen Sie OK. Den Default-Wert setzen Sie auf True. Damit erheben Sie das Steuerelement zur Standardschaltfläche, die Sie via [Enter] automatisch wählen. Den Namen der rechten Schaltfläche (Abbrechen) legen Sie mit cmdabbrechen fest. Setzen Sie die Cancel-Eigenschaft auf True, und schon können Sie die Abbrechen-Schaltfläche künftig via [Esc] aufrufen. Nachdem Sie alle Änderungen gespeichert haben, starten Sie einen ersten Funktionstest mit [F5]. Bis jetzt ist das Dialogfeld allerdings kaum mehr als eine leere Hülle, wie Sie mit einigen Mausklicks unschwer feststellen können. Nur MIT DEM EIGENSCHAFTEN-FENSTER bestimmen Sie die Eigenschaftswerte des Formulars und seiner Steuerelemente. die von VBA beigesteuerte Schließen- Schaltfläche in der Titelzeile des Formulars funktioniert bereits und beendet die Dialogausführung umgehend. Die restlichen Funktionen bekommt das User- Form-Dialogfeld erst durch die Ereignisroutinen. Ereignisroutinen Während der Dialogausführung müssen Formular und Steuerelemente mit unterschiedlichen Aktionen des Anwenders rechnen: Er kann das Formular verschieben oder schließen, die Steuerelemente per Tabulatortaste aktivieren, sie anklicken, ihnen Tastatureingaben zuordnen und dergleichen mehr. Um auf solche Außenereignisse reagieren zu können, besitzt jede Dialogfeldkomponente einen mehr oder minder großen Satz an Ereignisroutinen. Dabei handelt es sich um Prozeduren, deren äußerer Rahmen genau wie bei einem VBA-Makro mit Sub beginnt und mit End-Sub endet. Allerdings wird eine Ereignisroutine im Unterschied zu einem Makro automatisch aufgerufen, und zwar immer dann, wenn im Hinblick auf eine Dialogfeldkomponente ein ganz bestimmtes Ereignis eintritt. Damit der Aufruf gelingt, setzt sich der Name einer Ereignisroutine nach festen Regeln zusammen: aus dem q PC Magazin Oktober 1998 207

DIE WICHTIGSTEN Eigenschaften des Formulars frmauswahl und seiner Steuerelemente Namen der Dialogfeldkomponente, einem Unterstrich ( _ ) sowie einer vorgegebenen Bezeichnung für das zu behandelnde Ereignis. Dabei stehen Click für einen einfachen Mausklick, DblClick für einen Doppelklick, Enter, um die Schaltfläche zu aktivieren, so daß sie auf die Enter-Taste reagiert, Exit für den Verlust, aktiv zu sein, KeyDown für das Drücken einer Taste und MouseMove für das Überfahren mit dem Mauszeiger. Die Ereignisroutine, die in unserem Auswahldialogfeld für das Anklicken der OK-Schaltfläche zuständig ist, trägt demnach den Namen cmdok_click, während bei einem Doppelklick auf das Listenfeld die Routine lstauswahl_ DblClick in Aktion tritt. Formulare können auf ein spezielles Ereignis reagieren, das mit dem Aktivieren bei Steuerelementen vergleichbar ist. Dabei handelt es sich um das Initialize- Ereignis, das immer unmittelbar nach dem Aufruf des Dialogfelds, aber noch bevor es auf dem Bildschirm sichtbar wird, ausgelöst wird. Dadurch erhält der Entwickler Gelegenheit, die Einstellungen und Inhalte der Steuerelemente je nach Bedarf festzulegen und benötigte Daten zu initialisieren. Bei der Nomenklatur besteht die Besonderheit, daß formularspezifische Ereignisroutinen nicht den individuellen Formularnamen, sondern die pauschale Bezeichnung UserForm enthalten. Die Initialize-Ereignisroutine unseres Auswahldialogs trägt daher nicht den Namen frmauswahl_initialize, sondern UserForm_Initialize. In einigen Fällen übergibt VBA Argumente an eine aufgerufene Ereignisrou- Ereignisroutinen schreiben tine, etwa den ANSI- Code einer gedrückten Taste oder die aktuellen Koordinaten des Mauszeigers. Sie erkennen die Übermittlung solcher Zusatzinformationen daran, daß dem Routinennamen eine in Klammern gesetzte Argumentenliste folgt. Im Unterschied zu einem Makro dürfen Sie die Argumentenliste einer Ereignisroutine nicht verändern. Um mit der Eingabe der Ereignisroutinen für unser Auswahldialogfeld zu beginnen, markieren Sie das frmauswahl- Formular im Projektfenster und wählen Ansicht/Code. Das Editorfenster, das nun im Arbeitsbereich des Visual-Basic- Editors zu sehen ist, ist mit zwei Listenfeldern ausgestattet: das linke zeigt die Namen aller Dialogfeldkomponenten, das rechte listet sämtliche Ereignisse auf, auf welche die jeweilige Dialogfeldkomponente reagieren kann. Mit diesen beiden Listenfeldern können Sie nun den Rumpf einer jeden Ereignisroutine von VBA anlegen lassen. Dazu wählen Sie im linken Listenfeld die Komponente, im rechten das gewünschte Ereignis. Erproben Sie das Verfahren, indem Sie eine Initialize-Routine für das Formular (alias UserForm) anlegen. Als Ergebnis erhalten Sie das Gerüst der Ereignisroutine, das aus den beiden Zeilen Private Sub UserForm_Initialize End Sub besteht. Alle nachfolgenden Anweisungszeilen, welche die Funktion der Routine bestimmen, müssen stets zwischen diesen beiden Zeilen eingefügt werden. Die Aufgabe der UserForm_Initialize-Routine soll darin bestehen, das Listenfeld mit einigen Einträgen zu füllen, die dem Anwender zur Auswahl angeboten werden. Für das Hinzufügen eines Eintrags ist die AddItem-Methode zuständig, die nicht zum Sprachfundus von VBA gehört, sondern die das Listenfeld zur Verfügung stellt. So wie jedes Dialogfeldobjekt über einen bestimmten Fundus an Eigenschaften und Ereignissen verfügt, besitzt es auch einen charakteristischen Satz von Methoden, die zu seiner eigenen Manipulation dienen. Der Aufruf von AddItem folgt daher den üblichen Regeln für alle objektspezifischen Methoden und Eigenschaften. Er setzt sich aus dem Namen des Objekts, einem Trennpunkt sowie dem Namen der Methode oder Eigenschaft zusammen im konkreten Fall muß es also lstauswahl.additem heißen. Als Argument benötigt die AddItem-Methode noch den Text des hinzuzufügenden Eintrags, so daß eine vollständige Aufrufzeile lstauswahl.additem _ Wiener Schnitzel mit Pommes lauten könnte. Der Unterstrich _ kennzeichnet einen drucktechnischen Zeilenumbruch. VBA erkennt das Fortsetzungszeichen. Schreiben Sie trotzdem die folgende Druckzeile in die obere Programmzeile mit hinein. Wollen Sie noch mehr Listenfeldeinträge hinzufügen, verwenden Sie weitere AddItem-Aufrufe, die alle mit dem gleichen Objektnamen lstauswahl beginnen. Um sich Schreibarbeit zu ersparen, können Sie alle Methoden- und Eigenschaftsaufrufe, die sich auf ein Objekt beziehen, in einem With-/End- With-Block zusammenfassen. Dabei wird der Objektname nur in der einlei- DAS CODE-FENSTER des Visual-Basic-Editors unterstützt Sie bei der Eingabe der Ereigsnisroutinen. tenden With-Zeile erwähnt, die eigentlichen Aufrufzeilen beschränken sich auf den Punkt und den jeweiligen Methoden- oder Eigenschaftsnamen (sowie die erforderlichen Argumente oder Wertzuweisungen). Das Ende des Blocks kennzeichnen Sie mit einer End-With- Zeile. Der folgende Quelltext verwandelt das Listenfeld unseres Auswahldialogfelds innerhalb der UserForm_Initialize-Routine in eine elektronische Speisekarte: 208 Oktober 1998 PC Magazin

With lstauswahl.additem _ Wiener Schnitzel mit Pommes.AddItem _ Bockwurst mit Kartoffelsalat.AddItem _ Curry-Hähnchen mit Kroketten.AddItem Kinderteller Napoli.AddItem Spaghetti Carbonara End With Das Dialogfeld verfügt noch über je eine Click-Routine für die beiden Schaltflächen cmdok und cmdcancel sowie eine DblClick-Routine für das Listenfeld lstauswahl. Um die Prozedurrümpfe der Routinen anzulegen, können Sie das Editorfenster verwenden. Die Quelltexte der in Listing 1 abgedruckten Ereignisroutinen lassen sich aber auch manuell eingeben. Der aktive Inhalt der cmdcancel_ Click-Routine besteht lediglich aus der Anweisung Unload Me, die das Dialogfeld nach dem Anklicken der Abbrechen-Schaltfläche aus dem Speicher entfernt. Das Schlüsselwort Me steht dabei (ähnlich wie UserForm) stellvertretend für den Namen des Formulars. Die cmdok_click-routine zeigt den gewählten Listenfeldeintrag, der in der Text-Eigenschaft des Listenfelds (lstauswahl.text) gespeichert ist, per MsgBox-Befehl an und beendet die Dialogfeldanzeige per Unload. Die lstauswahl_dblclick-routine schließlich ruft die cmdok_click-routine per Call auf. Starthilfe per VBA-Makro Nach einem erneuten Druck auf [F5] können Sie die Funktion des Dialogfelds ausgiebig testen. Tritt dabei ein Fehler auf, unterbricht VBA automatisch die Ausführung des Dialogs und markiert die Anweisungszeile, die den Fehler verursacht hat. Nach der Korrektur des (Tipp-)Fehlers können Sie den Test via [F5] fortsetzen. Nachdem auch der letzte Fehler behoben ist, speichern Sie Ihre Arbeit mit einem Klick auf das Diskettensymbol. Mit [F5] können Sie das UserForm- Dialogfeld allerdings nur innerhalb des Visual-Basic-Editors aktivieren, aus Word heraus klappt das nicht. Hier brauchen Sie ein VBA-Makro, das den Aufruf für Sie erledigt. Um das Makro zu schreiben, fügen Sie dem Dokument, in dem das Dialogfeld gespeichert ist, per Einfügen/Modul ein Basic-Modul hinzu. Sofern schon ein Basic-Modul vorhanden ist, aktivieren Sie dieses mit einem Doppelklick im Projektfenster. Setzen Sie die Schreibmarke an das Ende des Eingabefensters, und geben Sie folgenden Quelltext ein: Sub SpeisenWahl frmauswahl.show End Sub Die mit Sub beginnende sowie die End- Sub-Zeile bilden das Gerüst des VBA- Makros SpeisenWahl. Den aktiven Inhalt des Makros stellt eine Zeile dar, welche die Show-Methode des frmauswahl-formulars aufruft. Dabei wird das Dialogfeld in den Speicher geladen. Die Show-Methode des frmauswahl-formulars ruft das Makro auf und lädt das Dialogfeld damit in den Speicher. Um das Makro aus Word heraus zu starten, wechseln Sie zunächst per Task- Leiste in die Textverarbeitung. Anschließend wählen Sie Extras/Makro/Makros, markieren den Makronamen SpeisenWahl und klicken auf Ausführen. Der Startvorgang geht allerdings wesentlich schneller über die Bühne, wenn Sie dem Makro ein Tastenkürzel oder eine Symbolschaltfläche zuordnen. Die dazu notwendigen Arbeitsschritte sind in der Online-Hilfe von Word ausführlich beschrieben. VBA-Makro ruft UserForm-Dialog Das UserForm-Dialogfeld präsentiert sich jetzt zwar als perfektes Menüsystem für ein virtuelles Restaurant, für andere Auswahlaufgaben wie die Abfrage eines Namens oder die Selektion einer Schriftart ist es allerdings nicht zu gebrauchen. Damit Sie nicht für jede dieser Aufgaben ein eigenes UserForm-Dialogfeld konstruieren müssen, werden wir das bestehende so verändern, daß es allen Auswahlaufgaben gerecht wird. Die wichtigste Änderung besteht darin, das Listenfeld nicht innerhalb der Ereignisroutinen des Formulars zu füllen, sondern im Aufrufmakro. Weil die UserForm_Initialize-Routine damit überflüssig geworden ist, sollten Sie sie markieren und über [Entf] löschen. Entfernen Sie auch die MsgBox-Anweisung aus der cmdok_click-routine an ihre Stelle tritt die Zeile DlgCancel = False Fügen Sie darüber hinaus die Anweisung DlgCancel = True ein und zwar vor der Unload-Zeile der cmdabbrechen_click-routine. Damit sind alle Änderungen abgeschlossen. Speichern Sie das Dialogfeld (dessen vollständiger Quelltext in Listing 2 abgedruckt ist) mit einem Klick auf das Diskettensymbol. Mit dem Laden des zugehörigen Dokuments wird jedes UserForm-Dialogfeld zum VBA-Objekt, dessen Eigenschaften Sie jederzeit abfragen und ändern können. Das Startmakro kann also, bevor es das Dialogfeld per Show-Methode auf den Bildschirm bringt, die notwendigen Initialisierungsarbeiten erledigen. Dazu zählt im konkreten Fall nicht nur das Füllen des Listenfelds mit beliebigen Einträgen, sondern auch das Ändern der Fenstertitel- und Eingabeaufforderungstexte, die immer noch Mittagsmenü und Treffen Sie Ihre Wahl: lauten. Durch eine Wertzuweisung innerhalb des Makros können diese ehemals im Eigenschaften-Fenster festgelegten Texte für die Dauer der Dialogausführung überschrieben werden. Auch danach reißt der Draht zwischen Startmakro und Dialogfeld nicht ab. So lassen sich die Veränderungen, die der Anwender an den Steuerelementen vorgenommen hat (Texteingabe, Auswahl eines Listenfeldeintrags, Einschalten eines Kontrollkästchens etc.), durch DAS FERTIGE UserForm-Dialogfeld wird vielen Auswahlaufgaben gerecht. eine Abfrage der entsprechenden Steuerelement-Eigenschaften ermitteln. Allerdings läßt sich ohne zusätzliche Hilfsmittel nicht feststellen, mit welcher Schaltfläche der Dialog beendet wurde. Daß dazu eine Notwendigkeit besteht, dürfte gerade im Fall des ungleichen Gespanns OK und Abbrechen auf der Hand liegen. Es gibt viele Lösungen für dieses Problem. Eine davon verwendet eine globale Variable, die im Kopf des Basic-q PC Magazin Oktober 1998 209

Moduls des Aufrufmakros deklariert wird (siehe den VBA-Artikel Feuertaufe, PC Magazin 8/98, ab S. 189) und damit in allen anderen Basic-Modulen und Formularen bekannt ist. VBA weist dieser Variablen innerhalb der Click- Routinen einen Wert zu, der die gewählte Schaltfläche eindeutig identifiziert und sich nach der Dialogausführung abfragen läßt. Musik, zwo, drei... Das Beispielmakro in Listing 3 soll die Zusammenarbeit mit dem geänderten Auswahldialogfeld demonstrieren. Aus dem Oberkellner ist ein Quizmaster geworden: Das Dialogfeld stellt dem Anwender eine Frage aus dem Bereich der Volksmusik, die dieser durch die Auswahl eines der im Listenfeld aufgeführten Interpreten beantwortet. Zur Eingabe des Quelltextes sollten Sie wie zuvor mit Einfügen/Modul ein neues Basic- Modul anlegen. Das Listing beginnt mit der Deklaration der globalen DlgCancel-Variablen, mit der die Schaltfläche identifiziert werden soll, die den Dialog beendet hat. Am Anfang des RateMal-Makros steht die Deklaration lokaler Variablen, die im Gegensatz zu DlgCancel nur innerhalb des Makros bekannt sind. Die Feldvariable Interpret dient der Aufnahme der fünf Interpretennamen. Sie ist entbehrlich, da Sie diese im konkreten Fall auch direkt per AddItem- Methode in das Listenfeld übertragen könnten. Da Listenfelder in der Praxis aber häufig den Inhalt von Feldvariablen darstellen, haben wir uns hier für deren Einsatz entschieden. Um die spätere Übertragung der Feldelemente in das Listenfeld möglichst einfach zu gestalten, sollte die Feldvariable so deklariert sein, daß ihr erstes Element genau wie der erste Eintrag des Listenfelds die Indexnummer 0 trägt. Mit der With-Zeile des ersten With- /End-With-Blocks greift das Makro auf die Eigenschaften und Steuerelemente des Formulars frmauswahl zu. Zuerst weist es dessen Caption-Eigenschaft die Zeichenkette Musik-Quiz zu, um den Titeltext des Dialogfeldfensters entsprechend zu ändern. Anschließend verwandelt das Makro den Eingabeaufforderungstext (also die Caption-Eigenschaft des Bezeichnungsfelds lblprompt) von Treffen Sie Ihre Wahl: in Wer besang die schwarze Barbara?. Die For-Next-Schleife überträgt den Inhalt der Feldvariablen Interpret ins Listenfeld. Dazu greift sie über die Zählvariable I auf jedes einzelne Feldelement zu und hängt dessen Inhalt per Add- Item-Methode an das Listenfeld lstauswahl an. Intern speichert das Listenfeld die Einträge in seiner List-Auflistung, die fast wie eine Feldvariable aufgebaut ist. Auch hier können Sie auf jedes einzelne Listenelement über eine Indexnummer zugreifen, die zwischen 0 und der Anzahl der Listenelemente minus 1 liegt. Die Show-Methode des Formulars überträgt die Programmkontrolle an das Dialogfeld. Wenn der Anwender einen Interpretennamen ausgewählt und die Dialogausführung per OK beendet hat, bekommt die globale Variable DlgCancel innerhalb der cmdok_click-routine den logischen Wert False zugewiesen; nach einem Klick auf Abbrechen (dahinter steckt die Routine cmdabbrechen_click), beträgt der Wert von Dlg- Cancel dagegen True. In beiden Fällen wird das Dialogfeld per Unload aus dem Speicher entfernt, wodurch die Programmkontrolle an das aufrufende Makro zurückfällt. Nun wird die Dlg- Cancel-Variable ausgewertet. Dazu überprüft das Makro per If-Then-Abfrage, ob deren Wert False beträgt, die Dialogausführung also per OK beendet wurde. Wenn das der Fall ist, soll der gewählte Listenfeldeintrag abschließend mit Hilfe einer MsgBox-Anweisung angezeigt werden. Der erprobte Zugriff auf die Text-Eigenschaft des Listenfelds entfällt hier allerdings, da der Eigenschaftswert beim Schließen des Formulars verlorengeht. Über einen Umweg kommen Sie trotzdem an die gewünschte Information: Durch eine Abfrage der ListIndex- Eigenschaft ermitteln Sie die Indexnummer des gewählten Listenfeldelements und können dann direkt auf das fragliche Element der List-Auflistung zugreifen. Andere Steuerelemente Wie Sie ein Listenfeld per Makro mit Einträgen ausstatten und den gewählten Eintrag hinterher ermitteln können, wissen Sie jetzt. Es gibt aber noch weitere Steuerelemente, die sich sinnvoll auf einem UserForm-Dialogfeld einsetzen lassen. Die wichtigsten sind das Text-, das Optionsfeld und das Kontrollkästchen. Das Kombinationsfeld unterscheidet sich in der Handhabung kaum vom Listenfeld und bedarf daher keiner besonderen Vorstellung mehr. Die zuerst genannten Steuerelemente stellen wir Ihnen nun in einem Beispieldialog vor. Legen Sie ein neues Formular namens frmdateisenden an, und statten Sie es mit einem Textfeld, einem Rahmen mit drei Optionsfeldern darin, einem Kontrollkästchen und zwei Schaltflächen aus. Die Eigenschaften des Formulars und der Steuerelemente entnehmen Sie dem Bild unten. Die in Listing 4 abgedruckten Ereignisroutinen des Dialogfelds beschränken sich auf die schon bekannten Click-Routinen für die beiden Schaltflächen. DIE WICHTIGSTEN Eigenschaften des Formulars frmdateisenden und seiner Steuerelemente Das Makro DateiSenden in Listing 5 initialisiert das Dialogfeld, ruft es auf und fragt die Steuerelemente ab. Die With-Zeile leitet den Zugriff auf das Formular frmdateisenden ein. Anschließend wird die Text-Eigenschaft des Textfelds auf muster.txt eingestellt, so daß der Anwender beim Aufruf des Dialogfelds schon eine Vorgabe vorfindet. Die Zuweisung des logischen Werts True an die Value-Eigenschaft des Steuerelements optpgp aktiviert nicht nur dieses Optionsfeld, sie schaltet zugleich auch die beiden anderen Optionsfelder aus, da innerhalb eines Rahmens (fraoptionen) immer nur ein Optionsfeld aktiv sein kann. Auch das Kontrollkästchen chkprotokoll wird durch die Zuweisung von True an seine Value-Eigenschaft eingeschal- 210 Oktober 1998 PC Magazin

tet. Um es auszuschalten, müssen Sie ihm wieder den Wert False zuweisen. Nachdem das Makro das Dialogfeld per Show-Methode aufgerufen und festgestellt hat, daß es mit der OK-Schaltfläche (DlgCancel = False) beendet wurde, zeigt es die aktuellen Einstellungen der Steuerelemente mit diversen MsgBox-Anweisungen an. Um den Inhalt des Textfelds zu ermitteln, ist nur ein Zugriff auf dessen Text- Eigenschaft notwendig. Für die Ermittlung des aktiven Optionsfelds überprüfen Sie die Value-Eigenschaften aller drei Optionsfelder innerhalb einer If- Then-Else-Konstruktion. Ist eine der Eigenschaften True, haben Sie das aktive Optionsfeld gefunden, da die Value- Eigenschaften der übrigen Optionsfelder den Wert False aufweisen. Bei der Value-Eigenschaft des Kontrollkästchens ist nur zwischen den beiden logischen Zuständen True (eingeschaltet) und False (ausgeschaltet) zu unterscheiden. Statt einer Meldung fügen Sie in einem echten Programm die Auswertungsroutinen für die eingestellten Optionen ein. s TR Literatur [1] Microsoft Office 97 Visual Basic Programmer s Guide, Microsoft Press, ISBN 1-57231-340-4, 77,90 Mark [2] Microsoft Office 97 Visual Basic Language Reference, Microsoft Press, 5 Bände, ISBN 1-57231-339-0, 288,90 Mark Die Listings sowie zwei weitere Einstiegsartikel finden Sie auf der Heft-CD und im Internet unter www.pc-magazin.de/magazin/ extras.htm Klicken Sie in der Tabelle Online Extras unter Praxis das rote Download-Feld zu diesem Artikel an. 1 Listing 1 1: Private Sub UserForm_Initialize() 2: With lstauswahl 3:.AddItem "Wiener Schnitzel mit Pommes" 4:.AddItem "Bockwurst mit Kartoffelsalat".AddItem "Curry-HÑhnchen mit Kroketten" 6:.AddItem "Kinderteller Napoli" 7:.AddItem "Spaghetti Carbonara" 8:.ListIndex = 0 9: End With End Sub 11: 12: Private Sub lstauswahl_dblclick(byval Cancel As _ 13: MSForms.ReturnBoolean) 14: Call cmdok_click 1 End Sub 16: 17: Private Sub cmdok_click() 18: MsgBox lstauswahl.text 19: Unload Me 20: End Sub 21: 22: Private Sub cmdabbrechen_click() 23: Unload Me 24: End Sub 2 Die Ereignisroutinen des Dialogfelds frmauswahl in der ersten Fassung 2 Listing 2 1: Private Sub lstauswahl_dblclick(byval Cancel As MSForms.ReturnBoolean) 2: 3: Call cmdok_click 4: End Sub 6: Private Sub cmdok_click() 7: DlgCancel = False 8: Unload Me 9: End Sub 11: Private Sub cmdabbrechen_click() 12: DlgCancel = True 13: Unload Me 14: End Sub 1 Die Ereignisroutinen des Dialogfelds frmauswahl in der geänderten Fassung für den universellen Einsatz. 3 Listing 3 1: Dim DlgCancel As Boolean 2: 3: 4: 6: 7: 8: 9: 11: 12: Sub RateMal() Dim Interpret(0 To 4) As String Dim i As Integer Dim ListenfeldIndex As Integer Interpret(0) = "Ernst Mosch" Interpret(1) = "Michael Jackson" Interpret(2) = "Hansi Kraus" Interpret(3) = "Heino" Interpret(4) = "Peter Straffrei" 13: 14: With frmauswahl 1.Caption = "Musik-Quiz" 16:.lblPrompt.Caption = "Wer besang die schwarze Barbara?" 17: For i = 0 To 4 18:.lstAuswahl.AddItem Interpret(i) 19: Next 20:.Show 21: If DlgCancel = False Then 22: ListenfeldIndex =.lstauswahl.listindex 23: MsgBox.lstAuswahl.List(ListenfeldIndex) 24: End If 2 End With 26: End Sub 27: Dieses Makro demonstriert den Einsatz des frmauswahl-dialogfelds für universelle Auswahlaufgaben. 4 Listing 4 1: Private Sub cmdok_click() 2: DlgCancel = False 3: Unload Me 4: End Sub 6: Private Sub cmdabbrechen_click() 7: DlgCancel = True 8: Unload Me 9: End Sub Die Ereignisroutinen des Dialogfelds frmdateisenden. 5 Listing 5 1: 2: 3: 4: 6: 7: 8: 9: 11: 12: 13: 14: 1 16: 17: 18: 19: 20: 21: 22: 23: 24: 2 Sub DateiSenden() With frmdateisenden.txtdateiname.text = "muster.txt".optpgp.value = True.chkProtokoll.Value = True.Show If DlgCancel = False Then MsgBox "Dateiname: " &.txtdateiname.text 26: End Sub 27: If.optUnverschlÅsselt.Value = True Then MsgBox "Sicherheitsoption: " & _.optunverschlåsselt.caption ElseIf.optPGP.Value = True Then MsgBox "Sicherheitsoption: " &.optpgp.caption Else MsgBox "Sicherheitsoption: " &.opttopsecret.caption End If If.chkProtokoll.Value = True Then MsgBox "Protokollieren: Ja" Else MsgBox "Protokollieren: Nein" End If End If End With Das DateiSenden-Makro demonstriert den Zugriff auf die Steuerelemente des Dialogfelds frmdateisenden. PC Magazin Oktober 1998 211