dialogfelder programmieren und der einstieg in die vba
TRANSCRIPT
133
Der E
inst
ieg
indi
eVB
A-Pr
ogra
mm
ieru
ng
Kapitel 5
Dialogfelder programmieren und aufrufen
In diesem Kapitel:
Nachrichtendialoge programmieren (MsgBox) 134
Eingabedialoge erstellen 143
Integrierte Dialogfelder aufrufen 145
548.book Page 133 Wednesday, September 21, 2005 12:06 PM
Kapitel 5 Dialogfelder programmieren und aufrufen
134
In VBA gibt es verschiedene Arten von Fenstern, die programmiert oder aufgerufen werden können.Zum einen können einfache Nachrichtendialoge auf dem Bildschirm angezeigt werden, die denBenutzer der Applikation schlicht über etwas informieren, oder ihn auffordern, sich für eine Aktionzu entscheiden. Zum Beispiel, indem er entweder die Schaltfläche OK oder Abbrechen anklickt. Zumanderen gibt es Eingabedialoge, die eine einfache Eingabezeile zur Verfügung stellen, in die ein Werteingetragen werden kann. Dieser Wert wird in der Regel später in einer Variablen weiterverarbeitet.
Excel selbst verfügt über unzählige Dialogfelder wie zum Beispiel Öffnen, Speichern, Drucken usw.Diese Dialogfelder können per VBA aufgerufen und verwendet werden.
Schlussendlich gibt es noch die UserForms. Es handelt sich dabei um Dialogfelder, die Sie komplettselbst gestalten können. Das Thema ist jedoch relativ komplex und deshalb werden wir ihm ein eige-nes Kapitel widmen (siehe Kapitel 21).
Nachrichtendialoge programmieren (MsgBox)
Auf den bisherigen Buchseiten sind Sie bereits häufiger auf Nachrichtendialoge gestoßen. Sie werdenhier im Detail erfahren, wie diese erzeugt und gestaltet werden können.
Die Beispiele zum Thema Nachrichtendialoge befinden sich auf der CD-ROM zum Buch im Ord-ner \Buch\Kap05. Die Mappe nennt sich Bsp05_01.xls.
Das VBA-Schlüsselwort für ein Meldungsfeld lautet MsgBox. Das »Msg« im ersten Teil des Schlüssel-wortes ist die Abkürzung für das englische Wort Message. Ein Blick in ein Sprachwörterbuch verrät,dass das Wort als »Nachricht« oder »Meldung« übersetzt werden kann. Meldungsfelder werden inVBA gerne und häufig eingesetzt, denn sie sind einfach zu programmieren. In der Regel dienen Siedazu, eine Nachricht auf dem Bildschirm auszugeben. Die Nachricht wartet darauf, dass eine darinenthaltene Schaltfläche angeklickt wird.
Der einfachste Weg, ein Meldungsfeld zu programmieren, besteht darin, das Schlüsselwort MsgBoxgefolgt vom anzuzeigenden Text einzutippen. Der Text, der in dem Meldungsfeld ausgegeben wer-den soll, wird immer in Anführungs- und Schlusszeichen geschrieben. Eine einzelne Codezeilereicht aus, um das umzusetzen. Das nachfolgende Beispiel gibt das klassische »Hallo Welt« aus.
Solange ein Meldungsfeld auf dem Bildschirm angezeigt wird, kann weder in derExcel-Mappe noch im VBE gearbeitet werden. Es ist somit zwingend notwendig, das Meldungs-feld zu schließen.
Listing 5.1 Hallo Welt
Sub MeineErsteNachricht() MsgBox "Hallo Welt"End Sub
ACHTUNG
548.book Page 134 Wednesday, September 21, 2005 12:06 PM
Nachrichtendialoge programmieren (MsgBox)
135
Der E
inst
ieg
indi
eVB
A-Pr
ogra
mm
ieru
ng
Bild 5.1 Ein einfaches Meldungsfeld
Die Titelleiste verändernWie Sie dem Bild 5.1 entnehmen können, wird der Text »Hallo Welt«, im mittleren Teil des Fenstersangezeigt. Im oberen Teil des Meldungsfeldes, in der Titelleiste, ist der Text Microsoft Excel zu fin-den. Im unteren Teil befindet sich die Schaltfläche OK.
Den Titelleistentext können Sie verändern, indem Sie nach dem Schlüsselwort MsgBox das ArgumentTitle gefolgt vom gewünschten Text eingeben. Mehrere Argumente werden jeweils durch Kommasvoneinander getrennt.
Bild 5.2 Meldungsfeld mit veränderter Titelleiste
Nachrichtenzeilen im Code umbrechenDamit der Code im VBE übersichtlich bleibt, empfiehlt es sich, längere Anweisungen durch einenUnterstrich umzubrechen. Wenn Sie den Text innerhalb einer MsgBox-Anweisung umbrechen möch-ten, müssen Sie das Sonderzeichen & dem Unterstrich voranstellen. Dies verbindet die beiden Text-passagen miteinander. Zwischen dem & und dem _ wird ein Leerzeichen eingefügt. Beachten Siezudem, dass der Text am Ende der Zeile durch ein Anführungszeichen abgeschlossen werden muss.Die neue Zeile muss wiederum mit einem Anführungszeichen beginnen.
Wenn Sie das Sonderzeichen & innerhalb der Anführungszeichen verwenden, wird es als Text undnicht als Anweisung für den Code gewertet.
Listing 5.2 Die Titelleiste ändern
Sub TitelVeraendern() MsgBox "Beachten Sie die Titelzeile!", Title:="Meine 2. Nachricht"End Sub
Listing 5.3 Nachrichtenzeilen im Code umbrechen
Sub MeineLangeNachricht() MsgBox "Hallo Leser! Sie sind dabei, eine lange Nachricht " & _ "zu programmieren. Ich wünsche Ihnen dabei viel " & _ "Erfolg."End Sub
548.book Page 135 Wednesday, September 21, 2005 12:06 PM
Kapitel 5 Dialogfelder programmieren und aufrufen
136
In angezeigten Meldungsfeld wird der gesamte Text in einer Zeile angezeigt, also nicht umgebro-chen, wie im Code.
Bild 5.3 Die Ausgabe erfolgt in einer einzelnen Zeile
Beachten Sie, dass in einer MsgBox maximal 1.024 Zeichen ausgegeben werdenkönnen. Weitere Zeichen werden ohne Warnung einfach abgeschnitten.
Zeilenumbrüche verwendenDie Breite eines Meldungsfeldes umfasst maximal 128 Zeichen, danach wird der Text automatischumbrochen. Um den Code im VBE übersichtlich zu gestalten, wird er in der Regel spätestens beiBildschirmbreite umbrochen. Dadurch wird verhindert, dass ständig mit der Bildlaufleiste nachlinks und rechts gescrollt werden muss.
In Meldungsfeldern können keinerlei Textformatierungen vorgenommen werden.Es ist somit nicht möglich, beispielsweise ein Wort in einer anderen Farbe oder in einem anderenSchriftstil anzuzeigen. Sie haben lediglich die Möglichkeit, den Text unter Zuhilfenahme von Zei-lenvorschüben, Wagenrückläufen und Tabulatoren etwas übersichtlich zu gestalten. Dazu kön-nen Konstanten oder ASCII-Zeichen verwendet werden.
ASCII-Zeichencodes werden in VBA durch das Schlüsselwort Chr angeführt. Danach folgt im run-den Klammernpaar der Zeichencode. So genannte nichtdarstellbare Zeichen sind in der ASCII-Tabelle im Bereich von 0 bis 31 zu finden. In diesem Bereich sind unter anderem die Werte 9, 10 unddie 13 enthalten, die wir für unsere Gestaltung benötigen (siehe Tabelle 5.1).
Um einen Zeileumbruch durchzuführen, können Sie somit die Funktion Chr(10) verwenden. Umeinen größeren Abstand zwischen den Zeilen zu erzeugen, verwenden Sie die Funktion Chr(10)mehrmals nacheinander.
WICHTIG
HINWEIS
Tabelle 5.1 ASCII-Code und Konstanten für Tabulator und Umbrüche
ASCII Konstante Englisch Deutsch
Chr(9) vbTab Tabulator Tabulator
Chr(10) vbLf Line Feed Zeilenvorschub
Chr(13) vbCr Carriage Return Wagenrücklauf
548.book Page 136 Wednesday, September 21, 2005 12:06 PM
Nachrichtendialoge programmieren (MsgBox)
137
Der E
inst
ieg
indi
eVB
A-Pr
ogra
mm
ieru
ng
Bild 5.4 Ein Meldungsfeld mit Zeilenvorschüben
Tabulatoren benutzenWie Sie der Tabelle 5.1 entnehmen können, haben Sie die Möglichkeit, Tabulatorenzeichen in einemMeldungsfeld zu verwenden. Die Funktion dazu lautet Chr(9).
Bild 5.5 Ein Meldungsfeld mit Zeilenvorschüben und Tabulatoren
Listing 5.4 Die Funktion Chr(10) verwenden
Sub ZeilenvorschubInNachricht() MsgBox "Hallo Leser!" & Chr(10) & Chr(10) & _ "Sie sind dabei, eine lange Nachricht mit" & Chr(10) & _ "Zeilenvorschüben zu programmieren." & Chr(10) & Chr(10) & _ "Ich wünsche Ihnen dabei viel Erfolg."End Sub
Listing 5.5 Die Funktion Chr(9) verwenden
Sub TabulatorInNachricht() MsgBox "Hallo Leser!" & Chr(10) & Chr(10) & _ "Sie sind dabei, eine lange Nachricht" & Chr(10) & _ "mit Zeilenvorschüben und Tabulatoren " & Chr(10) & _ "zu programmieren." & Chr(10) & Chr(10) & _ "Viel Erfolg!" & Chr(10) & Chr(10) & _ Chr(9) & "Monika Weber" & Chr(10) & _ Chr(9) & "Schweiz" & Chr(10) & _ Chr(9) & "http://www.jumper.ch"End Sub
548.book Page 137 Wednesday, September 21, 2005 12:06 PM
Kapitel 5 Dialogfelder programmieren und aufrufen
138
Die darstellbaren Zeichen beginnen in der ASCII-Tabelle bei 32 und enden bei255. Natürlich können auch darstellbare Zeichen in ASCII codiert in einer Prozedur verwendetwerden, auch wenn dies wenig sinnvoll ist.
Die folgende Codezeile zeigt in einem Meldungsfeld die Zeichenkette »Monika« an:
Eine weitere Formatierungsmöglichkeit besteht darin, den Text mit vbMsgBoxRight in einem Mel-dungsfeld rechtsbündig auszugeben. Auch ein Lesen von rechts nach links über vbMsgBoxRtlReadingkann eingerichtet werden. Dies hat bei unserem Zeichensatz jedoch keine Auswirkung. In Sprach-räumen, wie zum Beispiel dem Arabischen, wo tatsächlich von rechts nach links gelesen wird, kanndiese Einstellung hilfreich sein.
Anführungszeichen im Text eingebenAnführungs- und Schlusszeichen sind im VBE reservierte Schlüsselwörter, die dazu gedacht sind,Text als solchen zu hinterlegen. Wenn Sie innerhalb eines Meldungsfeldes einen Text in Anführungs-und Schlusszeichen ausgeben möchten, muss dieser zusätzlich zwischen Anführungs- und Schluss-zeichen geschrieben werden. Es werden also zwei " verwendet.
Bild 5.6 Anführungszeichen in einem Meldungsfeld ausgeben
Welche Parameter sind wichtig?Einer MsgBox-Anweisung können Sie mehrere Argumente übergeben. Welche Argumente zur Verfü-gung stehen, können Sie der QuickInfo entnehmen, die sich öffnet, nachdem Sie eine öffnenderunde Klammer nach MsgBox eingegeben haben (siehe Bild 5.7).
TIPP
MsgBox Chr(77) & Chr(111) & Chr(110) & Chr(105) & Chr(107) & Chr(97)
Tabelle 5.2 Konstanten für Formatierungen
Konstante Wert Beschreibung
vbMsgBoxRight 524288 Rechtsbündiger Text
vbMsgBoxRtlReading 1048576 Von rechts nach links lesen
Listing 5.6 Anführungszeichen richtig anwenden
Sub Anfuehrungszeichen() MsgBox "Ein Wort durch ""Anführungszeichen"" umgeben."End Sub
548.book Page 138 Wednesday, September 21, 2005 12:06 PM
Nachrichtendialoge programmieren (MsgBox)
139
Der E
inst
ieg
indi
eVB
A-Pr
ogra
mm
ieru
ng
Bild 5.7 Parameter für Schaltflächen
Die drei wichtigsten Argumente für Meldungsfelder können Sie der Tabelle 5.3 entnehmen.
Schaltflächen einfügenIn einem Meldungsfeld wird standardmäßig die Schaltfläche OK angezeigt. Sobald die Schaltflächeangeklickt wird, wird das Meldungsfeld wieder geschlossen. Bei Bedarf können Sie auch andere oderweitere Schaltflächen einblenden.
Mit der Kombination Ja und Nein können Sie zum Beispiel erreichen, dass der Benutzer dazu aufge-fordert wird, eine Entscheidung zu treffen.
Im folgenden Beispiel werden wir einerseits einen Text im Meldungsfeld anzeigen. Zum anderenverändern wir die Titelleiste. Beide Texte bereiten wir jeweils in einer Variablen auf (strMsg undstrTitel), um den Code etwas übersichtlicher zu gestalten.
Die Variable strAntwort ist erforderlich, um abzufragen, ob die Schaltfläche Ja oder Nein angeklicktwurde. Beachten Sie, dass die Variable mit dem Datentyp Integer deklariert wurde. Der Grund liegtdarin, dass die Schaltfläche Ja im Hintergrund den Rückgabewert 6 hat, die Schaltfläche Nein denRückgabewert 7.
Die VB-Konstante vbYesNo dient dazu, die Schaltflächen Ja und Nein anzuzeigen. Sie trägt den Wert4. Somit könnten Sie anstelle der VB-Konstanten auch den Wert 4 im Code verwenden.
Der folgende Code veranlasst, dass in einer MsgBox die Schaltflächen Ja und Nein angezeigt werden.Das Anklicken einer der beiden Schaltflächen öffnet ein weiteres Meldungsfeld, über das angezeigtwird, welche der beiden Schaltflächen angeklickt wurde.
Tabelle 5.3 Wichtige Parameter für eine MsgBox
Argumente Bedeutung
Prompt Erforderlich. Der Text, der im Meldungsfeld angezeigt wird.
Buttons Optional. Konstanten oder Werte für Schaltflächen.
Title Optional. Die Titelleiste des Meldungsfeldes.
strAntwort = MsgBox(strMsg, 4, strTitle)
548.book Page 139 Wednesday, September 21, 2005 12:06 PM
Kapitel 5 Dialogfelder programmieren und aufrufen
140
Bild 5.8 Ein Meldungsfeld mit zwei Schaltflächen und deren Rückgabewerte
Die verfügbaren Argumente für Schaltflächen und deren Werte können Sie der Tabelle 5.4 entneh-men.
Die Tabelle 5.5 führt die möglichen Rückgabewerte von MsgBox auf.
Listing 5.7 Zwei Schaltflächen programmieren
Sub MeineSchaltflaechen() Dim strMsg As String, strTitel As String Dim strAntwort As Integer strMsg = "Mein Nachrichtentext" strTitel = "Mein Titel" strAntwort = MsgBox(strMsg, vbYesNo, strTitel) If strAntwort = vbYes Then MsgBox "Ja = Wert " & strAntwort Else MsgBox "Nein = Wert " & strAntwort End IfEnd Sub
Tabelle 5.4 Verfügbare Schaltflächen
Konstante Wert Schaltfläche(n)
vbOKOnly 0 OK (Standardeinstellung)
vbOKCancel 1 OK und Abbrechen
vbAbortRetryIgnore 2 Abbrechen, Wiederholen und Ignorieren
vbYesNoCancel 3 Ja, Nein und Abbrechen
vbYesNo 4 Ja und Nein
vbRetryCancel 5 Wiederholen und Abbrechen
Tabelle 5.5 Rückgabewerte der Schaltflächen
Konstante Wert Schaltfläche
vbOK 1 OK
vbCancel 2 Abbrechen
vbAbort 3 Abbrechen
vbRetry 4 Wiederholen
548.book Page 140 Wednesday, September 21, 2005 12:06 PM
Nachrichtendialoge programmieren (MsgBox)
141
Der E
inst
ieg
indi
eVB
A-Pr
ogra
mm
ieru
ng
Wenn ein Meldungsfeld mit mehreren Schaltflächen angezeigt wird, erhält standardmäßig die ersteSchaltfläche den Default. Dies bedeutet, dass diese vorselektiert ist, sodass lediglich die (¢)-Tastegedrückt werden muss, um sie zu bestätigen.
Die Anordnung der Schaltflächen ist durch VBA fest vorbestimmt. Wenn Sie die Konstante vbYesNoverwenden, wird immer an erster Stelle die Schaltfläche Ja und an zweiter Stelle die SchaltflächeNein angezeigt. Die erste Schaltfläche, also Ja, erhält somit den Default.
Die Schaltflächen können nicht ausgetauscht werden, um beispielsweise an erster Stelle Nein stehenzu haben. Wenn das Meldungsfeld auf dem Bildschirm erscheint und die (¢)-Taste gedrückt wird,wird automatisch Ja ausgeführt. Je nachdem, was dadurch ausgelöst wird, kann dies gefährlich sein.
Sie haben, unter Verwendung der Konstanten vbDefaultButton2, die Möglichkeit, den Default aufdie Schaltfläche Nein, also auf die zweite Schaltfläche zu legen. Falls drei Schaltflächen vorhandensind, und Sie den Default auf die Dritte legen möchten, lautet die Konstante vbDefaultButton3.
Wie Sie dem nachfolgenden Codebeispiel entnehmen können, besteht die Mög-lichkeit, mehrere Konstanten durch ein Pluszeichen (+) miteinander zu verbinden.
Wenn Sie an Stelle von Konstanten mit deren Werten arbeiten, müssen diese addiert werden. DieKonstante vbYesNo hat den Wert 4 und die Konstante vbDefautButton2 den Wert 256. Addieren Siediese beiden Werte, erhalten Sie den Wert 260. Die Codezeile würde, wenn Sie mit Werten arbei-ten, wie folgt aussehen:
Die Schaltfläche mit dem Default wird hervorgehoben dargestellt. Gemäß Bild 5.9 ist es die Schalt-fläche Nein.
Bild 5.9 Der Default ist auf Nein gesetzt
vbIgnore 5 Ignorieren
vbYes 6 Ja
vbNo 7 Nein
Tabelle 5.5 Rückgabewerte der Schaltflächen (Fortsetzung)
Konstante Wert Schaltfläche
HINWEIS
MsgBox "Hallo Welt", Buttons:=260
Listing 5.8 Zweite Schaltfläche als Default
Sub DefaultFestlegen() MsgBox "Hallo Welt", Buttons:=vbYesNo + vbDefaultButton2End Sub
548.book Page 141 Wednesday, September 21, 2005 12:06 PM
Kapitel 5 Dialogfelder programmieren und aufrufen
142
Symbole einblendenNeben Titel, Text und Schaltflächen können in Meldungsfeldern zusätzlich Symbole angezeigt wer-den. Diese sind dazu gedacht, den Inhalt der Meldung durch eine Grafik zu unterstreichen.
Wenn Sie beispielsweise eine Frage stellen, dann verwenden Sie die Konstante vbQuestion, um einFragezeichen-Symbol einzublenden. Es kann jeweils nur ein Symbol in einem Meldungsfeld ange-zeigt werden. Die vier zur Verfügung stehenden Symbole können Sie der Tabelle 5.7 entnehmen.
Bild 5.10 Meldungsfeld mit Fragezeichen-Symbol
Tabelle 5.6 Konstanten und Werte für Default-Schaltflächen
Konstante Wert Beschreibung
vbDefaultButton1 0 Die erste Schaltfläche ist die Standardschaltfläche.
vbDefaultButton2 256 Die zweite Schaltfläche ist die Standardschaltfläche.
vbDefaultButton3 512 Die dritte Schaltfläche ist die Standardschaltfläche.
vbDefaultButton4 768 Die vierte Schaltfläche ist die Standardschaltfläche.
Listing 5.9 Fragezeichen-Symbol
Sub SymbolAnzeigen() MsgBox "Möchten Sie weiterfahren?", vbQuestionEnd Sub
Tabelle 5.7 Verfügbare Symbole
Konstante Wert Symbol
vbCritical 16
vbQuestion 32
vbExclamation 48
vbInformation 64
548.book Page 142 Wednesday, September 21, 2005 12:06 PM
Eingabedialoge erstellen
143
Der E
inst
ieg
indi
eVB
A-Pr
ogra
mm
ieru
ng
Eingabedialoge erstellenEingabefenster werden verwendet, wenn der Benutzer zu einer Eingabe aufgefordert werden soll.Das Fenster unterscheidet sich von einem Meldungsfeld darin, dass eine Eingabezeile zur Verfügungsteht.
Die Beispiele zum Thema Eingabedialoge befinden sich auf der CD-ROM zum Buch im Ordner\Buch\Kap05. Die Mappe nennt sich Bsp05_02.xls.
Eine InputBox programmierenIm folgenden Code wird der Benutzer aufgefordert, seinen Namen einzugeben. Als Default-Wertwurde ein Name hinterlegt. Beim Aufruf der Prozedur wird dieser bereits in der Eingabezeile ange-zeigt. Wenn Sie den Default-Wert weglassen, erscheint eine leere Eingabezeile. Die Eingabe wird derVariablen strVorschlag übergeben. Am Ende der Prozedur wird der Inhalt der Variablen in einemMeldungsfeld angezeigt.
Bild 5.11 Ein Eingabefenster und die Rückgabe
Eine InputBox enthält standardmäßig die Schaltflächen OK und Abbrechen. Das Problem bei obigemBeispiel besteht darin, dass ein leeres Meldungsfeld angezeigt wird, wenn die Schaltfläche Abbrechenangeklickt wird.
Die Schaltfläche Abbrechen kann nicht, wie in einer MsgBox, über einen Wert oder eine VB-Konstanteabgefragt werden. Um diese zu programmieren, verwenden Sie eine Select...Case- oderIf...Then...Else-Entscheidung. In unserem nächsten Beispiel verwenden wir Letzteres.
Listing 5.10 Eingabeaufforderung erstellen
Sub EinEingabedialog() Dim strMeldung As String, strTitel As String Dim strVorschlag As String, strAntwort As String strMeldung = "Geben Sie etwas ein." strTitel = "Mein Eingabedialog" strVorschlag = "Hallo Leser" strAntwort = InputBox(strMeldung, strTitel, strVorschlag) MsgBox strAntwortEnd Sub
548.book Page 143 Wednesday, September 21, 2005 12:06 PM
Kapitel 5 Dialogfelder programmieren und aufrufen
144
In der Entscheidung wird geprüft, ob eine Eingabe erfolgt ist oder nicht. Sowohl eine fehlende Ein-gabe als auch ein Klick auf die Schaltfläche Abbrechen gibt einen leeren Wert ("") zurück. Die Proze-dur wird in diesem Fall über Exit Sub verlassen. Wenn eine Eingabe erfolgt, wird ein Meldungsfeldangezeigt, das den Inhalt der Variablen zurückgibt. Näheres zum Thema Entscheidungen erfahrenSie im Kapitel 6.
Eine Application.InputBox erstellenNeben der einfachen InputBox-Anweisung kann eine Application.InputBox-Anweisung verwendetwerden. Letztere unterscheidet sich von der gewöhnlichen InputBox einerseits leicht im Erschei-nungsbild und andererseits im erweiterten Funktionsumfang.
Bei der Verwendung einer Application.InputBox-Anweisung haben Sie unter anderem die Möglich-keit, Formeln und Zellbezüge einzugeben. Um diese zu verwenden, muss ein Type mit angegebenwerden. Die zur Verfügung stehenden Typen können Sie der Tabelle 5.8 entnehmen.
Greifen wir wieder unser Beispiel von vorhin auf. Diesmal ist es allerdings so aufgebaut, dass nur einnumerischer Wert ins Eingabefeld eingetragen werden kann. Wenn Sie einen alphanumerischen
Listing 5.11 Die Schaltflächen des Eingabefensters programmieren
Sub KorrektesAbbrechen() Dim strMeldung As String, strTitel As String Dim strVorschlag As String, strAntwort As String strMeldung = "Geben Sie etwas ein." strTitel = "Mein Eingabedialog" strVorschlag = "Hallo Leser" strAntwort = InputBox(strMeldung, strTitel, strVorschlag) If strAntwort = "" Then Exit Sub Else MsgBox strAntwort End IfEnd Sub
Tabelle 5.8 Typen für InputBox
Wert Bedeutung
0 Formel
1 Zahl
2 Text (Zeichenfolge)
4 Logischer Wert (True oder False)
8 Zellbezug bzw. ein Range-Objekt
16 Fehlerwert, wie z.B. #NA
64 Wertematrix
548.book Page 144 Wednesday, September 21, 2005 12:06 PM
Integrierte Dialogfelder aufrufen
145
Der E
inst
ieg
indi
eVB
A-Pr
ogra
mm
ieru
ng
Wert eingeben, wird vom System eine Fehlermeldung ausgegeben. Der Typ, der eine Zahl erzwingt,hat den Wert 1 (Type:=1).
Bild 5.12 Das Eingabefenster sowie die Meldung bei korrekter oder falscher (nicht numerischer) Eingabe
Vielleicht ist Ihnen aufgefallen, dass wir im vorigen Beispiel in derIf...Then...Else-Entscheidung keinen Leerstring, sondern False abgefragt haben.
Der Grund liegt darin, dass sich die Abbrechen-Schaltfläche der Application.InputBox anders ver-hält als die der einfachen InputBox. Beim Anklicken der Schaltfläche wird ihr der Wert False undkein Leerstring zurückgegeben. Dementsprechend musste die Entscheidung angepasst werden.
Integrierte Dialogfelder aufrufenEine andere Art von Fenster, die in Excel verwendet werden kann, sind die integrierten Dialogfelder.Diese Fenster können nicht verändert, sondern lediglich angezeigt werden. Ein Beispiel ist das Dia-logfeld Öffnen, das Ihnen nach dem Aufruf des Menübefehls Datei/Öffnen angezeigt wird. Um diesesDialogfeld aus einer Prozedur heraus anzeigen zu lassen, verwenden Sie die Eigenschaft Dialogsgefolgt von der gewünschten Konstante. Es gibt eine Vielzahl solcher Konstanten. Welche dies sind,wird deutlich, sobald Sie die öffnende runde Klammer eingeben und sich die IntelliSense-Liste öff-net.
Listing 5.12 Eine numerische Eingabe erzwingen
Sub NumerischeEingabe() Dim strMeldung As String, strTitel As String Dim strVorschlag As String, strAntwort As String strMeldung = "Geben Sie etwas ein." strTitel = "Mein Eingabedialog" strVorschlag = 123 strAntwort = Application.InputBox(strMeldung, strTitel, _ strVorschlag, Type:=1) If strAntwort = False Then Exit Sub Else MsgBox strAntwort End IfEnd Sub
WICHTIG
548.book Page 145 Wednesday, September 21, 2005 12:06 PM
Kapitel 5 Dialogfelder programmieren und aufrufen
146
Bild 5.13 Die IntelliSense-Liste zu den Konstanten der integrierten Dialogfelder
Die Beispiele zum Thema Integrierte Dialogfelder befinden sich auf der CD-ROM zum Buch imOrdner \Buch\Kap05. Die Mappe nennt sich Bsp05_03.xls.
Das Dialogfeld Öffnen anzeigenIn unserem Beispiel verwenden wir die Konstante xlDialogOpen, die für das Dialogfeld Öffnen steht.Unter Zusatz der Methode Show wird das Dialogfeld auf dem Bildschirm angezeigt.
Auf Wunsch können Sie ein oder mehrere Argumente übergeben. Im folgenden Beispiel wird festge-legt, dass in den Pfad C:\ gewechselt werden soll. Es sollen zudem nur Excel-Dateien (*.xls) ange-zeigt werden, die mit einem »e« beginnen.
Eine Übersicht aller verfügbaren Dialogfelder können Sie der Visual Basic-Hilfe entnehmen. Um dieListe der Dialogfelder einsehen zu können, klicken Sie in der Menüleiste auf das Fragezeichen (?)und wählen den Menübefehl Microsoft Visual Basic-Hilfe aus. Geben Sie in die Eingabezeile denBetreff »integrierte Dialogfeldargumente« ein und bestätigen Sie mit der (¢)-Taste. Aus der Liste,die sich nun öffnet, wählen Sie den Eintrag Listen der integrierten Dialogfeldargumente aus. DieÜbersicht wird nun angezeigt.
Wenn Sie mit einer älteren Version arbeiten, drücken Sie im VBE die Taste (F1) undgeben den Begriff »integrierte Dialogfeldargumente« ein.
Listing 5.13 Das Dialogfeld Öffnen anzeigen
Sub DialogOeffnen() Application.Dialogs(xlDialogOpen).ShowEnd Sub
Listing 5.14 Nur bestimmte Dateien vorblenden
Sub DialogOeffnenMitPfad() Application.Dialogs(xlDialogOpen).Show "C:\e*.xls"End Sub
HINWEIS
548.book Page 146 Wednesday, September 21, 2005 12:06 PM
Integrierte Dialogfelder aufrufen
147
Der E
inst
ieg
indi
eVB
A-Pr
ogra
mm
ieru
ng
Das Dialogfeld Speichern unter öffnenDas Dialogfeld Speichern unter verhält sich im Grunde genommen genauso wie das Dialogfeld Öff-nen. Hier gehen wir jedoch noch etwas weiter. Den Dateinamen, unter dem die Arbeitsmappegespeichert werden soll, übergeben wir als erstes Argument. Als zweites Argument legen wir fest,dass die Datei als Textdatei (*.txt) gespeichert werden soll. Es wird dazu die Konstante xlTextWindowsverwendet.
Der Ordner Eigene Dateien ist standardmäßig im Pfad C:\Dokumente und Einstel-lungen\<Benutzername>\Eigene Dateien zu finden. Passen Sie den Pfad gegebenenfalls auf IhreBedürfnisse an.
Wunschgemäß wird das Dialogfeld mit den vordefinierten Werten geöffnet.
Bild 5.14 Das Dialogfeld Speichern unter wird geöffnet. Es werden nur Unterordner und Textdateien angezeigt.
Als nicht ganz einfach erweist es sich, den gewünschten Dateityp festzulegen. Zur Unterstützungbenutzen Sie am besten den Objektkatalog:
1. Drücken Sie im VBE die (F2)-Taste um den Objektkatalog zu öffnen.
2. Geben Sie ins zweite Eingabefeld den Begriff xlFileFormat ein.
3. Bestätigen Sie die Eingabe mit der (¢)-Taste.
Der Objektkatalog listet nun alle verfügbaren Dateiformate auf. Leider fehlt zu den einzelnen Kon-stanten eine genaue Beschreibung, so dass man oft etwas raten muss.
Listing 5.15 Das Dialogfeld Speichern unter
Sub DialogSpeichernUnter() Application.Dialogs(xlDialogSaveAs).Show _ "C:\Eigene Dateien\MeineTextdatei", xlTextWindowsEnd Sub
HINWEIS
548.book Page 147 Wednesday, September 21, 2005 12:06 PM
Kapitel 5 Dialogfelder programmieren und aufrufen
148
Bild 5.15 Dateiformate im Objektkatalog suchen
548.book Page 148 Wednesday, September 21, 2005 12:06 PM