Seite 1 von 1
Re: Übersetzung eines VBA-Makros nach OO-Basic
Verfasst: So, 30.03.2008 13:56
von turtle47
Hi Reimond,
hier ein Beispiel zum auslesen von Formularfeldern:
Code: Alles auswählen
Sub Formularfelder_Auslesen
oDoc = thisComponent
oController = oDoc.getCurrentController()
oform=odoc.drawpage.forms.getbyindex(0)
CtrlTextBox = oForm.getByName("TextBox") 'Achtung: Namen anpassen
oKView = oController.getControl(CtrlTextBox)
MyText = oKView.Model.Text
msgbox mytext
CtrlCheckBox = oForm.getByName("CheckBox")
oKView = oController.getControl(CtrlCheckBox)
Myctrl= oKView.model.State
msgbox Myctrl
End Sub
Hilft das weiter?
Jürgen
Re: Übersetzung eines VBA-Makros nach OO-Basic
Verfasst: So, 30.03.2008 14:50
von turtle47
Hallo Reimond,
wenn die Textfelder "TextBox1" bis TextBox5" heissen dann kann man das wie folgt machen:
Code: Alles auswählen
.....
for i = 1 to 5
CtrlTextBox = oForm.getByName("TextBox" & i)
oKView = oController.getControl(CtrlTextBox)
MyText = oKView.Model.Text
msgbox mytext
next i
.....
Jürgen
Re: Übersetzung eines VBA-Makros nach OO-Basic
Verfasst: So, 30.03.2008 14:59
von komma4
Reimond,
wenn Du StarBasic besser begreifen willst, dann siehe Dir die Beispiele in
Andrews Makro-Dokument an, oder die von
http://www.dannenhoefer.de
Re: Übersetzung eines VBA-Makros nach OO-Basic
Verfasst: So, 30.03.2008 16:03
von turtle47
Hallo Reimond,
kommst Du damit weiter:
Code: Alles auswählen
Sub Name_2_Dateiname
dim dummy()
oDoc = thisComponent
oController = oDoc.getCurrentController()
oform=odoc.drawpage.forms.getbyindex(0)
CtrlTextBox = oForm.getByName("TextBox1")
oKView = oController.getControl(CtrlTextBox)
sName = oKView.Model.Text
CtrlTextBox = oForm.getByName("TextBox2")
oKView = oController.getControl(CtrlTextBox)
sVorname = oKView.Model.Text
CtrlTextBox = oForm.getByName("TextBox3")
oKView = oController.getControl(CtrlTextBox)
sGebDat = oKView.Model.Text
sLaufwerk = "C:/"
Filename = sName & ", " & sVorname & " (" & sGebDat & ")"
neuerpfad = sLaufwerk + Filename + ".ods"
dateiurl=converttourl(neuerpfad)
odoc.storetourl(dateiurl,dummy())
End Sub
?
Jürgen
Re: Übersetzung eines VBA-Makros nach OO-Basic
Verfasst: So, 30.03.2008 20:52
von turtle47
Hallo Reimond,
es gibt bestimmt eine elegantere Lösung aber versuche es mal damit:
Code: Alles auswählen
Sub Formularfelder_Auslesen2
Dim Arg()
Dim oDoc As Object
oDoc = thisComponent
oController = oDoc.getCurrentController()
sUrl = convertToURL("C:\Textfelder.odt")
vDoc=StarDesktop.loadComponentFromURL (sURL, "_blank", 63, Arg())
z = 2 '2 = 3 Textfelder weil index bei 0 anfängt
for i = 0 to 2
oform=odoc.drawpage.forms.getbyindex (0)
CtrlTextBox = oForm.getbyindex (z)
NameTextBox = CtrlTextBox.name
oKView = oController.getControl(CtrlTextBox)
MyText = oKView.Model.Text
otext=vdoc.text
ocursor=otext.createtextcursor()
otext.insertString(ocursor,NameTextBox & ":" & CHR(9) & MyText & CHR(13) ,false)
z = z -1
next i
End Sub
Die Datei Textfelder.odt muss in dem Verzeichnis vorhanden sein sonst kommt eine Fehlermeldung.
Die Anzahl der Textfelder ist ensprechend anzupassen.
Viel Erfolg.
Re: Übersetzung eines VBA-Makros nach OO-Basic
Verfasst: So, 30.03.2008 22:55
von turtle47
Hallo Raimond,
vergiss den obigen Code. Der funktioniert so nicht wenn Checkboxen im Dokument sind.
Ich hänge hier mal eine funktionierende Beispieldatei an.
Denk daran:
turtle47 hat geschrieben:Die Datei Textfelder.odt muss in dem Verzeichnis C:\ vorhanden sein
bzw. den Namen oder Ort entsprechend im Code anpassen
Mit den Tabs "CHR(9) musst Du ausprobieren. Sonst mit Leerzeichen im Namenfeld korrigieren.
Viel Erfolg.
Jürgen
Re: Übersetzung eines VBA-Makros nach OO-Basic
Verfasst: Di, 01.04.2008 06:05
von turtle47
Hallo Raimond,
ich habe das Makro so abgeändert, dass man nicht mehr die Anzahl der Objekte angeben muss.
Optionsfelder gehe jetzt auch.
Achtung: Wenn Schaltflächen im Dokument vorhanden sind gibt es einen Error.
Code: Alles auswählen
Sub Formularfelder_Auslesen2
Dim Arg()
Dim oDoc As Object
oDoc = thisComponent
oController = oDoc.getCurrentController()
sUrl = convertToURL("C:\Textfelder.odt")
vDoc=StarDesktop.loadComponentFromURL (sURL, "_blank", 63, Arg())
oform = odoc.drawpage.forms.getbyindex (0)
ccount = oForm.count
for i = 0 to ccount -1
CtrlTextBox = oForm.getbyindex (i)
CtlId = CtrlTextBox.ClassId
NameTextBox = CtrlTextBox.name
oKView = oController.getControl(CtrlTextBox)
if CtlId = 9 then 'Textfeld
Myctrl= oKView.model.Text
MyText = Myctrl
elseif CtlId = 5 then 'Checkbox
Myctrl= oKView.model.State
MyText = Myctrl
elseif CtlId = 3 then 'Optionsbutton
Myctrl= oKView.model.State
MyText = Myctrl
end if
otext = vdoc.text
ocursor=otext.createtextcursor()
ocursor.gotoend (false)
otext.insertString(ocursor,NameTextBox & " " & CHR(9) & MyText & CHR(13) ,false)
next i
End Sub
Jürgen
Re: Übersetzung eines VBA-Makros nach OO-Basic
Verfasst: Di, 01.04.2008 22:30
von turtle47
Nabend Reimond,
da die Optionsfelder in einem Gruppierungsrahmen sein müssen verhalten diese sich ein wenig widerspenstig.
Wenn Du die Optionsfelder dort bearbeiten willst, so musst Du im Entwurfsmodus einen Rechtsklick in die Gruppe machen
und Gruppe betreten auswählen. Danach kannst Du die Optionsfelder doppelt anklicken und in den Eigenschaften Einstellungen vornehmen. Ich habe dort zum Beispiel im Feld "Zusatzinformationen" (Tag) Text eingetragen, der
nachher im Dokument "Textfelder" angezeigt wird.
Die Auflistung der Gruppierungsrahmen und der Schaltfläche wird im Makro übersprungen.
Zur Veranschaulichung habe ich nochmals eine Beispieldatei mit ausführlicher Kommetierung beigefügt.
Viel Erfolg und schöne Grüsse.
Jürgen
Re: Übersetzung eines VBA-Makros nach OO-Basic
Verfasst: Mi, 09.04.2008 23:34
von komma4
lasse Dir
sURL vor der fehlerwerfenen Anweisung anzeigen und kontrolliere den Inhalt:
Die Fehlermeldung besagt, dass die Aufbereitung falsch ist....
Re: Übersetzung eines VBA-Makros nach OO-Basic
Verfasst: Fr, 11.04.2008 11:41
von komma4
Reimond hat geschrieben:DateiXYZ ist die Datei die ich durch das Makro erstelle.
...dann gibt es die Datei (noch) nicht?
Die Meldung sagt:
Die Datei (deren Namen Du angibst) kann nicht geladen werden.
Warum?
-weil der Name falsch geschrieben ist
-weil Dir Rechte zum Lesen der Datei fehlen
-weil der Pfade (Netzwerklaufwerk) nicht vorhanden ist
Welche Konsequenzen Du ziehen kannst? Beseitige den Fehler!
Re: Übersetzung eines VBA-Makros nach OO-Basic
Verfasst: Fr, 11.04.2008 18:40
von turtle47
Hallo Raimond,
in dem von mir erstellten Ursprungscode steht ja die Zeile:
Damit das Makro funktioniert muss die Datei "Textfelder.odt " unter "C:\" liegen sonst kommt besagte Fehlermeldung.
Dazu hatte ich bereits ja auch schon mal geschrieben:
turtle47 hat geschrieben:Die Datei Textfelder.odt muss in dem Verzeichnis vorhanden sein sonst kommt eine Fehlermeldung.
Es sei denn, Du hast die Pfadangabe im Makro verändert, dann muss die Datei natürlich an der angebenen Stelle vorhanden sein.
Reimond hat geschrieben:in der Zeile
vDoc=StarDesktop.loadComponentFromURL (sURL, "_blank", 63, Arg())
kommt es zur Fehlermeldung: BASIC Laufzeitfehler, URL seems to be an unsupported one....
Der Fehler kommt also beim
Laden der Datei!
Das Ganze hat also nichts damit zu tun wie die erstellte Datei nachher abgespeichert wird!
Hilft Dir das weiter?
Schöne Grüsse.
Jürgen
Re: Übersetzung eines VBA-Makros nach OO-Basic
Verfasst: Fr, 11.04.2008 22:14
von turtle47
Hallo Raimond,
Reimond hat geschrieben:
danke, hab das jetzt wieder im Griff.
Was war denn nun die Fehlerursache?
*
Suchst Du vielleicht sowas hier:
Code: Alles auswählen
sub Textfelder
oDoc = thiscomponent
oTxtFelder = oDoc.getTextFields().createEnumeration()
do while oTxtFelder.hasmoreElements()
oFeld = oTxtFelder.nextElement
if oFeld.supportsService("com.sun.star.text.TextField.SetExpression") then
msgbox oFeld.content 'Wert auslesen
'oFeld.content = "Thomas" Wert Schreiben
end if
loop
oDoc.getTextFields().refresh()
End Sub
?
Schöne Grüsse.
Jürgen
Edit:
* Wir hier im Forum sind immer daran interessiert, was letztendlich zur Lösung beigetragen hat.

Re: Übersetzung eines VBA-Makros nach OO-Basic
Verfasst: Sa, 12.04.2008 05:49
von turtle47
Guten Morgen Raimond,
füge den neuen angepassten Code doch einfach an den "alten" Code unten an:
Code: Alles auswählen
next i ' alter Code
' Ende alter Code
'Start Bereich Felder auslesen
oTxtFelder = oDoc.getTextFields().createEnumeration()
do while oTxtFelder.hasmoreElements()
oFeld = oTxtFelder.nextElement
if oFeld.supportsService("com.sun.star.text.TextField.SetExpression") then
myFieldName = oFeld.VariableName 'Name des Feldes
myFieldContent= oFeld.content 'Wert des Feldes
'oFeld.content = "Mein Wert" 'braucht man nur wenn man neuen Inhat einfügt
end if
'oDoc.getTextFields().refresh()'braucht man nur wenn man neuen Inhat eingefügt hat
otext = vdoc.text
ocursor=otext.createtextcursor() 'Cursor im Dokument setzen
ocursor.gotoend (false) 'Cursor ans Ende des Dokumentes setzen
otext.insertString(ocursor,myFieldName & " " & CHR(9) & myFieldContent & CHR(13) ,false)'Text in das Dokument einfügen
Loop
End Sub
Fertig ist die Laube.
Reimond hat geschrieben:Eignet sich für eine dezentrale Dankenbank.
Was soll den das für eine Datenbank werden?
Turtle 47 hat geschrieben:Mit den Tabs "CHR(9) musst Du ausprobieren. Sonst mit Leerzeichen im Namenfeld korrigieren.
Dazu ein kleiner Tip am Rande was die Tabs betrifft.
Füge in Deinem
Zieldokument mal drei Zeilen Text ein. Dann markiere den ganzen Text und setze oben im Lineal einen linksbündigen Tab (z.B. 5 cm.). Dann lösche den ganzen Text so das der Cursor ganz am Anfang des Dokumentes steht.
Anschließend speichere das Zieldokument.
Schönen Tag noch.
Jürgen
Re: Übersetzung eines VBA-Makros nach OO-Basic
Verfasst: So, 13.04.2008 11:26
von turtle47
Hallo Reimond,
Reimond hat geschrieben:Den Teil mit dem Tab habe ich mal ausprobiert. Ergebnis: die Erste Zeil war 5cm eingerückt.
War das die Idee ?
Nein, es sollte normalerweise dann so aussehen:

- Tab.jpg (15.62 KiB) 2082 mal betrachtet
Ziel war, dass Du das hier nicht mehr brauchst:
Turtle47 hat geschrieben:Sonst mit Leerzeichen im Namenfeld korrigieren.
Die Zeile im Code sollte so aussehen:
Code: Alles auswählen
otext.insertString(ocursor,NameElement & CHR(9) & MyText & CHR(13) ,false)'Text in das Dokument einfügen
Zum Testen hier mal meine Zieldatei:
Schöne Grüsse.
Jürgen
Re: Übersetzung eines VBA-Makros nach OO-Basic
Verfasst: Do, 17.04.2008 01:18
von turtle47
Reimond hat geschrieben:Dein bisheriges Makro ließt die Inhalte von "Listenfeldern" nicht aus.
kann ja auch nicht, weil der supportsService ein anderer ist.
Code: Alles auswählen
.....
if oFeld.supportsService("com.sun.star.text.TextField.SetExpression") then
myFieldName = oFeld.VariableName 'Name des Feldes
myFieldContent= oFeld.content 'Wert auslesen
elseif oFeld.supportsService("com.sun.star.text.TextField.DropDown") then
myFieldContent = oFeld.SelectedItem 'Selektion auslesen
myFieldName= oFeld.name 'Name des Feldes
end if
....
Beschäftige Dich wie von mir schon einmal empfohlen mit "xray". Damit bekommt man das ganz einfach raus.
Jürgen