[gelöst] Eingabefeld auslesen und ändern mit inputbox
Verfasst: Fr, 25.07.2008 10:31
Hallo All,
ich bin recht neu im makroschreiben unter open office. Nach langen fuddeln habe ich den unten stehenden Code geschrieben. Leider funktioniert er nicht so wie ich es möchte.
Problemstellung:
Ich habe ein writer Dokument mit Textelementen und verschiedenen Eingabefeldern (einfügen/feldbefehl/andere/funktion/eingabefeld). Die Eingabefelder möchte ich manuel verändern. Dazu habe ich mir gedacht, dass ich die Eingabefelder anlege und spezifisch benenne (einfügen/feldbefehl/andere/funktion/eingabefeld=hinweis). Das Makro soll gestartet werden wenn ich das erste Textfeld anklicke, was prinzipiell funktioniert.
Nun soll die Abfrage der Eingabefleder erfolgen. Dazu benutze ich die "Inputbox".

Beispiel:
Schritt 1 (erstmaliges öffnen des Dokuments): Klicke ich auf das erste im Text enthalten Eingabefeld, soll die oben angezeigte Inputbox erscheinen, wobei "name" die spezifische Bezeichnung des Eingabefelds darstellt und die Eingabe "hello" im Eingabefeld nach Eingabe erscheinen soll. Dannach folgen alle weiteren Abfragen, wie z.B. nach der Straße (sAdress) und Hausnummer (sNo.) usw. Alle Eingaben sollen im am Ende in den jeweiligen Eingabefeldern erscheinen. Dann kann ich das Dokument ausdrucken und gut.
Die nächsten Schritte: Da ich dieses Dokument manchmal ändern muss sollte beim nächsten öffnen, die Inputbox den Eintrag aus Schritt 1 beinhalten. Ich kann ihn also mit OK stehen lassen oder ändern.
Lösungsansatz
Mein Ansatz schaft es zwar eine Textpassage ("TextField1") zu erkennen und zu ersetzen, jedoch kein Eingabefeld. Den Befehl dazu habe ich nicht gefunden (???). Alles was ich probiere klappt irgdenwie nicht.
Fragen
Geht das überhaupt was ich mir vorstelle? Wenn ja wie, wenn nein, was kann ich dann alternativ machen?
Ziel
Derzeit gebe ich jedes Eingabefeld auch manuel ein, muss mich aber durch das gesamte Formular klicken, was enorm müsig ist.
Danke im vorraus
p.s. die Errorabfrage ist nur eine Spielerei, die ich gefunden habe, aber nicht unbedingt brauche.
ich bin recht neu im makroschreiben unter open office. Nach langen fuddeln habe ich den unten stehenden Code geschrieben. Leider funktioniert er nicht so wie ich es möchte.
Problemstellung:
Ich habe ein writer Dokument mit Textelementen und verschiedenen Eingabefeldern (einfügen/feldbefehl/andere/funktion/eingabefeld). Die Eingabefelder möchte ich manuel verändern. Dazu habe ich mir gedacht, dass ich die Eingabefelder anlege und spezifisch benenne (einfügen/feldbefehl/andere/funktion/eingabefeld=hinweis). Das Makro soll gestartet werden wenn ich das erste Textfeld anklicke, was prinzipiell funktioniert.
Nun soll die Abfrage der Eingabefleder erfolgen. Dazu benutze ich die "Inputbox".

Beispiel:
Schritt 1 (erstmaliges öffnen des Dokuments): Klicke ich auf das erste im Text enthalten Eingabefeld, soll die oben angezeigte Inputbox erscheinen, wobei "name" die spezifische Bezeichnung des Eingabefelds darstellt und die Eingabe "hello" im Eingabefeld nach Eingabe erscheinen soll. Dannach folgen alle weiteren Abfragen, wie z.B. nach der Straße (sAdress) und Hausnummer (sNo.) usw. Alle Eingaben sollen im am Ende in den jeweiligen Eingabefeldern erscheinen. Dann kann ich das Dokument ausdrucken und gut.
Die nächsten Schritte: Da ich dieses Dokument manchmal ändern muss sollte beim nächsten öffnen, die Inputbox den Eintrag aus Schritt 1 beinhalten. Ich kann ihn also mit OK stehen lassen oder ändern.
Lösungsansatz
Mein Ansatz schaft es zwar eine Textpassage ("TextField1") zu erkennen und zu ersetzen, jedoch kein Eingabefeld. Den Befehl dazu habe ich nicht gefunden (???). Alles was ich probiere klappt irgdenwie nicht.
Fragen
Geht das überhaupt was ich mir vorstelle? Wenn ja wie, wenn nein, was kann ich dann alternativ machen?
Ziel
Derzeit gebe ich jedes Eingabefeld auch manuel ein, muss mich aber durch das gesamte Formular klicken, was enorm müsig ist.
Danke im vorraus
p.s. die Errorabfrage ist nur eine Spielerei, die ich gefunden habe, aber nicht unbedingt brauche.
Code: Alles auswählen
REM ***** BASIC *****
Sub getInfo
Dim sName as String
Dim sAddress as String
Dim sNo as String
Dim vDescriptor, vFound
On Error GoTo Error_Handler
GetName:
sName = inputbox ("whats you name", "name")
If sName = "" Then
sVar = MsgBox("You must enter a name",1)
' If Cancel was hit, stop macro
If sVar = 2 Then
Exit Sub
Else
GoTo GetName
End If
End If
' Search for [TextField1]
vDescriptor = ThisComponent.createSearchDescriptor()
With vDescriptor
.SearchString = "[TextField1]"
.SearchWords = false
.SearchCaseSensitive = False
.ReplaceString = sName
End With
vFound = ThisComponent.replaceAll(vDescriptor)
If vFound <> 1 Then
MsgBox("Error: [TextField1] Not Found")
End If
GetAddress:
sAddress = inputbox ("whats your address", "address")
If sAddress = "" Then
sVar = MsgBox("You must enter an address",1)
' If Cancel was hit, stop macro
If sVar = 2 Then
Exit Sub
Else
GoTo GetAddress
End If
End If
' Search for [TextField2]
vDescriptor = ThisComponent.createSearchDescriptor()
With vDescriptor
.SearchString = "[TextField2]"
.SearchWords = false
.SearchCaseSensitive = False
.ReplaceString = sAddress
End With
vFound = ThisComponent.replaceAll(vDescriptor)
If vFound <> 1 Then
MsgBox("Error: [TextField2] Not Found")
End If
GetNo:
sNo = inputbox ("whats your telephone number", "number")
If sNo = "" Then
sVar = MsgBox("You must enter a telephone number",1)
' If Cancel was hit, stop macro
If sVar = 2 Then
Exit Sub
Else
GoTo GetNo
End If
End If
' Search for [TextField3]
vDescriptor = ThisComponent.createSearchDescriptor()
With vDescriptor
.SearchString = "[TextField3]"
.SearchWords = false
.SearchCaseSensitive = False
.ReplaceString = sNo
End With
vFound = ThisComponent.replaceAll(vDescriptor)
If vFound <> 1 Then
MsgBox("Error: [TextField3] Not Found")
End If
Exit Sub
Error_Handler:
MsgBox(Error)
End Sub