dialogfelder programmieren und der einstieg in die vba

16
133 Der Einstieg in die VBA- Programmierung Kapitel 5 Dialogfelder programmieren und aufrufen In diesem Kapitel: Nachrichtendialoge programmieren (MsgBox) 134 Eingabedialoge erstellen 143 Integrierte Dialogfelder aufrufen 145

Upload: others

Post on 16-Oct-2021

6 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Dialogfelder programmieren und Der Einstieg in die VBA

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

Page 2: Dialogfelder programmieren und Der Einstieg in die VBA

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

Page 3: Dialogfelder programmieren und Der Einstieg in die VBA

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

Page 4: Dialogfelder programmieren und Der Einstieg in die VBA

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

Page 5: Dialogfelder programmieren und Der Einstieg in die VBA

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

Page 6: Dialogfelder programmieren und Der Einstieg in die VBA

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

Page 7: Dialogfelder programmieren und Der Einstieg in die VBA

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

Page 8: Dialogfelder programmieren und Der Einstieg in die VBA

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

Page 9: Dialogfelder programmieren und Der Einstieg in die VBA

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

Page 10: Dialogfelder programmieren und Der Einstieg in die VBA

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

Page 11: Dialogfelder programmieren und Der Einstieg in die VBA

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

Page 12: Dialogfelder programmieren und Der Einstieg in die VBA

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

Page 13: Dialogfelder programmieren und Der Einstieg in die VBA

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

Page 14: Dialogfelder programmieren und Der Einstieg in die VBA

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

Page 15: Dialogfelder programmieren und Der Einstieg in die VBA

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

Page 16: Dialogfelder programmieren und Der Einstieg in die VBA

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