IT-Academy Logo
Sign Up Login Help
Home - Programmieren - Eingabedialoge in Open Office Basic



Eingabedialoge in Open Office Basic

Mit dem standarisierten Eingabedialog steht dem Open Office Basic Programmierer ein sehr einfaches Tool zur Verfügung um vom Benutzer Daten abzufragen.


Autor: Patrick Faes (dreamer)
Datum: 22-07-2007, 22:38:42
Referenzen: OpenOffice.org
OOoMacros.org
Schwierigkeit: Anfänger
Ansichten: 9663x
Rating: 8 (1x bewertet)

Hinweis:

Für den hier dargestellte Inhalt ist nicht der Betreiber der Plattform, sondern der jeweilige Autor verantwortlich.
Falls Sie Missbrauch vermuten, bitten wir Sie, uns unter missbrauch@it-academy.cc zu kontaktieren.

[Druckansicht] [Als E-Mail senden] [Kommentar verfassen]



Mit dem standarisierten Eingabedialog steht dem Open Office Basic Programmierer ein sehr einfaches Tool zur Verfügung um vom Benutzer Daten abzufragen. In einer sehr simpelen Form sieht dieser Dialog so aus:



Darstellung kann variieren je nach Betriebssystem, bzw. grafischer Oberfläche

Beim Beispiel fallen drei Merkmale auf die Sie frei bestimmen können:
  1. Die gestellte Frage, bzw. eine Beschreibung welche Eingaben vom Benutzer gefordert werden.
  2. Ein Dialogtitel (oben im blauen Balken).
  3. Eine Antwortvorgabe
Die letzten beiden sind sogar optional, sie sind nicht zwingend notwendig.

Schon mit nur einer kurzen Zeile Code wird ein derartiger Eingabedialog erstellt.

InputBox("Wie lautet Ihr Name?")

Dieser Code würde ein Eingabefenster erstellen, mit den Text "Wie lautet Ihr Name?", jedoch ohne Fenstertitel und ohne Antwortvorgabe. Bei diesem Beispiel wird der Rückgabewert jedoch nicht gespeichert. Dafür brauchen wir eine zusätzliche Variable.

antwort = InputBox("Wie lautet Ihr Name?")

Hier wird die Funktion InputBox den Text im Eingabefenster zurückgeben, welcher dann gespeichert wird in der Variable antwort. Beachten Sie dass Sie runde Klammern um die Parameter setzen müssen, ansonsten gibt InputBox den Wert nicht zurück. Zudem müssen Textparameter zwischen doppelten Anführungszeichen stehen. Variablen müssen nicht explizit deklariert werden (ist aber zu bevorzugen).

Als zweiter Parameter können Sie einen Dialogtitel angeben der oben im Fensterrand angezeigt wird. Dieser Parameter ist optional. Wird er nicht explizit angegeben, so wird der Titel "soffice" sein (nach StarOffice, der kommerziellen Version von Open Office). Es ist zu bevorzugen einen aussagekräftigen Titel zu verwenden. In diesem Beispiel, wo der Benutzer aufgefordert wird seinen Namen einzugeben, könnte dies z.B. "Namensabfrage" sein.

Ein Codebeispiel:

antwort = InputBox("Wie lautet Ihr Name?", "Namensabfrage")

Ein dritter Parameter erlaubt eine Antwortvorgabe anzuzeigen. Dies kann eine Standardantwort, ein Antwortbeispiel oder -Muster sein. Beachten Sie, dass wenn der Benutzer den Dialog sich nicht mal ansieht und auf die ENTER-Taste drückt, diese Antwortvorgabe als Antwort zurückgegeben wird. Es ist deshalb ratsam zu überprüfen ob dies der Fall ist.

antwort = InputBox("Wie alt sind Sie?", "Altersabfrage", "140 Jahre")

If antwort = "140 Jahre" Then
	'der Benutzer hat eindeutig nicht ehrlich geantwortet
	'wohl kaum einer wird 140 Jahre alt sein
EndIf


Numerische Eingaben

Mit einer InputBox können Sie leider nur Texte eingeben. Die Eingabe lässt sich aber auch in einer Zahl umwandeln. Wenn der Wert einer Variablen vom Typ String (Text) einem vom Typ Integer (Ganzzahl) zugewiesen wird, so findet eine implizite Konvertierung statt.

'definiere ein Stringvariable
Dim antwort As String

'definiere ein Integervariable
Dim zahl As Integer

'frage etwas
antwort = InputBox("Wieviele Tore haben Sie geschossen?")

'konvertiere die Daten
zahl = antwort

Leider schlägt eine implizite Konvertierung manchmal fehl. Deshalb bietet Open Office Basic auch noch einige Funktionen zur expliziten Konvertierung. Leider sind diese auch nicht immer ganz Fehlerfrei.

zahl = CInt(antwort)

Beachten Sie dass Integer nur Ganzzahlwerte haben können. Wenn Sie eine Dezimalzahl (also mit Nachkommastellen) speichern möchten in einer Integervariable, wird diese automatisch gerundet.

Für Dezimalzahlen gibt es noch die Variablentypen Single, Long und Double. Eine Variable vom Typ Single hat einen kleineren Wertebereich als jeweils Long und Double (letzter hat die Größte Genauigkeit).

Diese können Sie auch sowohl implizit als auch explizit konvertieren.

'Single
Dim zahl As Single
zahl = antwort

Dim zahl As Single
zahl = CSng(antwort)

'-------------------

Dim zahl As Long
zahl = antwort

Dim zahl As Long
zahl = CLng(antwort)

'-------------------

'Double
Dim zahl As Double
zahl = antwort

Dim zahl As Double
zahl = CDbl(antwort)

Wenn Sie versuchen würden, den Benutzer eine Zahl zu erfragen, kann Ihr Programm nur sinnvoll weitergeführt werden indem der Benutzer auch eine gültige Zahl eingibt. Deshalb muss dies zuerst noch überprüft werden. Normalerweise würde ich dafür die Funktion isNumeric() verwenden. Diese erwartet als Parameter eine Variable wovon überprüft werden soll ob es sich dabei um eine Zahl handelt. Leider können wir dies für diesen Zweck nicht wirklich verwenden. Ein Integervariable die einen Stringwert zugewiesen bekommt die sich nicht (implizit oder explizit) umwandeln lässt (also keine gültige Zahl ergeben kann, was bei Text der Fall ist), kriegt den Wert 0. In Fällen wo dies als Antwort ausgeschlossen werden kann, können wir auf diesen Wert prüfen ob eine gültige Zahl eingegeben wurde.

Folgendes Beispiel demonstriert dies:

Dim antwort As String
Dim zahl As Integer

antwort = InputBox("Wie alt sind Sie?")
zahl = antwort

While zahl = 0
	MsgBox("Ungültige Antwort")
	antwort = InputBox("Wie alt sind Sie?")
	zahl = antwort
Wend

Das Programm überprüft nach der ersten Eingabe ob eine gültige Zahl eingegeben wurde (alles andere als 0). Wenn dies nicht der Fall ist, wird es solange die Frage erneut stellen (nach darauf hingewiesen zu haben dass die Antwort ungültig ist) bis der Benutzer eine gültige Zahl eingibt.


Mehrere Eingaben gleichzeitig

InputBox erlaubt an sich nicht mehrere Eingaben gleichzeitig zu machen. Mit einem kleinen Trick ist es dennoch (wenn auch nur begrenzt) möglich.

Sie können den Benutzer fragen, mehrere Antworten jeweils mit Komma getrennt einzugeben und die einzelne Antworten dann später wieder voneinander scheiden. Dafür verwenden Sie die Funktion Split(), die ein Stringvariable an ein bestimmtes Zeichen aufspalten. Zudem können Sie dann die Funktion Trim() verwenden um überflüssige Leerstellen zu löschen (dadurch ist der Benutzer nicht zu sehr an exacte Formate gebunden.

antwort = InputBox("Welche Haustieren haben Sie?")

haustiere() = Split(antwort, ",")

Die einzelnen Haustiere werden dann in einem Array haustiere gespeichert. Mit einer For-Schleife können Sie dann alle einzelnen Eingabe durchlaufen und diese mit der Funktion Trim() bearbeiten, sprich überflüssige Leerstellen abschneiden.

For i = 0 To UBound(haustiere())
	haustiere(i) = Trim(haustiere(i))
Next i


dreamer
Expert
Beitrag vom:
05-08-2007, 08:01:11

Open Office soll mehr als nur Makros bieten. Mit der Makrospache kann man auf jede nur erdenkliche Funktion von Open Office zugreifen, seien es nun einfache Texten oder sogar MySQL-Datenbanken. Die Entwickler sehen Open Office als Plattform zur Entwicklung von Software. Übrigens unterstützt Open Office auch Python, Javascript und Java.

-----------------------------------------------------


paedubucher
Professonial
Beitrag vom:
04-08-2007, 16:06:51

Schöner Artikel

Obwohl ich Basic hasse und von Makros in Dokumenten manchmal etwas angenervt bin, finde ich deinen Artikel sehr gelungen.

Die Erklärungen sind gut, der Aufbau ist sinnvoll gewählt und die Formatierung gefällt mir auch sehr gut.

Vielleicht werde ich mich noch einmal überwinden und irgend ein Makro in ein Dokument aufbauen. Dieses mal aber bestimmt nicht mit VBA in Microsoft Office, sondern mit OOo :-)

8 Punkte

-----------------------------------------------------


[back to top]



Userdaten
User nicht eingeloggt

Gesamtranking
Werbung
Datenbankstand
Autoren:04508
Artikel:00815
Glossar:04116
News:13565
Userbeiträge:16552
Queueeinträge:06245
News Umfrage
Ihre Anforderungen an ein Online-Zeiterfassungs-Produkt?
Mobile Nutzung möglich (Ipone, Android)
Externe API Schnittstelle/Plugins dritter
Zeiterfassung meiner Mitarbeiter
Exportieren in CSV/XLS
Siehe Kommentar



[Results] | [Archiv] Votes: 1150
Comments: 0