Übersetzung eines VBA-Makros nach OO-Basic

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: Übersetzung eines VBA-Makros nach OO-Basic

Re: Übersetzung eines VBA-Makros nach OO-Basic

von turtle47 » Do, 17.04.2008 01:18

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. 8)

Jürgen

Re: Übersetzung eines VBA-Makros nach OO-Basic

von turtle47 » So, 13.04.2008 11:26

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
Tab.jpg (15.62 KiB) 2098 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:
Textfelder_1.odt
(7.21 KiB) 48-mal heruntergeladen
Schöne Grüsse.

Jürgen

Re: Übersetzung eines VBA-Makros nach OO-Basic

von turtle47 » Sa, 12.04.2008 05:49

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. :mrgreen:
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

von turtle47 » Fr, 11.04.2008 22:14

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. :lol:

Re: Übersetzung eines VBA-Makros nach OO-Basic

von turtle47 » Fr, 11.04.2008 18:40

Hallo Raimond,

in dem von mir erstellten Ursprungscode steht ja die Zeile:

Code: Alles auswählen

sUrl = convertToURL("C:\Textfelder.odt")
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

von komma4 » Fr, 11.04.2008 11:41

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

von komma4 » Mi, 09.04.2008 23:34

lasse Dir sURL vor der fehlerwerfenen Anweisung anzeigen und kontrolliere den Inhalt:

Code: Alles auswählen

msgbox sURL
Die Fehlermeldung besagt, dass die Aufbereitung falsch ist....

Re: Übersetzung eines VBA-Makros nach OO-Basic

von turtle47 » Di, 01.04.2008 22:30

Nabend Reimond,

da die Optionsfelder in einem Gruppierungsrahmen sein müssen verhalten diese sich ein wenig widerspenstig. :twisted:

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.
Formularfelder_auslesen_2.odt
(10.61 KiB) 135-mal heruntergeladen
Viel Erfolg und schöne Grüsse.

Jürgen

Re: Übersetzung eines VBA-Makros nach OO-Basic

von turtle47 » Di, 01.04.2008 06:05

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

von turtle47 » So, 30.03.2008 22:55

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
Dateianhänge
Formularfelder_auslesen.odt
(9.91 KiB) 80-mal heruntergeladen

Re: Übersetzung eines VBA-Makros nach OO-Basic

von turtle47 » So, 30.03.2008 20:52

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

von turtle47 » So, 30.03.2008 16:03

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

von komma4 » So, 30.03.2008 14:59

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

von turtle47 » So, 30.03.2008 14:50

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

von turtle47 » So, 30.03.2008 13:56

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

Nach oben