Seite 1 von 1
[gelöst] Altes Problem Neues Problem
Verfasst: Mo, 29.09.2008 15:33
von Ibanez
Mmmhh da denkt man man hat ein Problem gelöst und schon tritt das nächste auf, nur in einem anderen Gewand
Ich habe unter anderem hier
viewtopic.php?f=18&t=18843 ein Problem gepostet. Dank Jürgens hilfe habe ich es gelöst bekommen.
Nun möchte ich meine Dialogfelder an bestimmte stellen in eine Tabelle einbinden. Also z.B. Name Person: XY (schreibe in $A$2), Alter Person: 16 (schreibe in $B$2). Wenn ich den Dialog das nächste mal öffne sollen dann die Werte im Dialog erscheinen.
Frage wie kann ich meinen Code dahingehend ändern.
Code: Alles auswählen
Sub Auslesen
oDoc = thisComponent
strUserfield_A2 = "Name"
On Error Resume Next
oTextFieldMasters = oDoc.TextFieldMasters
TxtUserfield_Name = "com.sun.star.text.FieldMaster.User." + StrUserfield_A2
String_Name = getCellRangeByName("$A$2")
End Sub
Code: Alles auswählen
Sub Schreiben
oDoc = thisComponent
strUserfield_A2 = "Name"
Ctl_A2 = myDialog.GetControl("TextField_Name")
String_Name = Ctl_A2.Model.Text
getCellRangeByName("$A$2") = String_Name
On Error Resume Next
oTextFieldMasters = oDoc.TextFieldMasters
TxtUserfield_Name="com.sun.star.text.FieldMaster.User." + StrUserfield_A2
oTextFieldMasters.getByName(TxtUserfield_Name).content = getCellRangeByName("$A$2")
oDoc.getTextFields().refresh()
myDialog.endexecute()
End Sub
Ich galube irgdnewo ist hier ein Denkfehler drin. Sehe ihn aber schon nicht mehr, wenns denn nur einer und nicht gar mehrere sind...
Ibanez
Re: Altes Problem Neues Problem
Verfasst: Do, 02.10.2008 18:53
von KDO
Hallo Ibanez
mit folgendem Code bekommst den Cellinhalt von Tabelle1.B2. Dieser Code muß im Dokument gespeichert sein.
Code: Alles auswählen
oDoc = ThisComponent
oCellRange = oDoc.Sheets(0).GetCellRangeByName("B2")
Print oCellRange.String
In der Variable 'oCellRange.String' steht der Text der Zelle. Diesen Kannst Du nun der Striungvariabelen deines Eingabefeldes zuweisen.
Code: Alles auswählen
oDoc = thisComponent
Ctl_B2 = myDialog.GetControl("TextField_Name")
Ctl_B2.Model.Text = oDoc.Sheets(0).GetCellRangeByName("B2").String
Den ersten Teil habe ich kurz getestet, das funktioniert. Der zweite Teil funktioniert so Theoretisch, da mußt Du eventuell noch etwas dran drehen!
Ich hoffe das hilft dir erstmal weiter
Klaus Osigus
Re: Altes Problem Neues Problem
Verfasst: Mo, 06.10.2008 09:32
von Ibanez
Also der erste Teil funktioniert. Danke für die Mühe und Hilfe.
Der Code sieht allerdings bei mir so aus, da ich ein Dialogfenster habe, das im Prinzip als Eingabemaske fungiert.
Code: Alles auswählen
Sub Auslesen
oDoc = thisComponent
strUserfield_B3 = "Name"
On Error Resume Next
oCellRange = oDoc.Sheets(0).GetCellRangeByName("B3")
oTextFieldMasters = oDoc.TextFieldMasters
TxtUserfield_Name = "com.sun.star.text.FieldMaster.User." + StrUserfield_B3
String_Name = oCellRange.String
End sub
Beim zweiten Teil bin ich so ein bischen am
verzweifeln. Um es genauer zu erläutern. Mein Code zum Schreiben ist dieser hier:
Code: Alles auswählen
Sub Schreiben
oDoc = thisComponent
strUserfield_B3 = "Name"
oCellRange = oDoc.Sheets(0).GetCellRangeByName("B3")
Ctl_B3 = myDialog.GetControl("TextField_Name")
Ctl_B3.Model.Text = oDoc.Sheets(0).GetCellRangeByName("B3").String
String_Name = Ctl_B3.Model.Text
strContent_Name = String_Name
On Error Resume Next
oTextFieldMasters = oDoc.TextFieldMasters
TxtUserfield_Name="com.sun.star.text.FieldMaster.User." + StrUserfield_B3
oTextFieldMasters.getByName(TxtUserfield_Name).content = StrContent_Name
oDoc.getTextFields().refresh()
myDialog.endexecute()
End Sub
Öffne ich die Dialogansicht, so erscheint im entsprechenenden Textfeld ("Name") mein erwünschter Name aus der Zelle B3. Ändere ich diesen und bestätige durch eine Schaltfläche ("Ok") schliest sich zwar das Dialogfenster, der Name ist aber unverändert. Jemand eine Idee wie ich den Text im Dialog nach dem Auslesen und Andern in die Zelle B3 übertragen kann?
Re: Altes Problem Neues Problem
Verfasst: Di, 07.10.2008 12:45
von KDO
Hallo,
Du denkst viel zu kompliziert.
Ich habe mir mal einen kleine Dialog gestrickt, der 2 Textfelder enthält, die Ihren Inhalt aus den Tabellenfelder B2 und C2 beziehen.
Das Makro habe ich im Dokument gespeichert. Hier der Quelltext:
Code: Alles auswählen
REM ***** BASIC *****
Dim DLG as Object, oTB1 as Object, oTB2 as Object 'Definition der Dialogvariablen (Gilt im ganzen Modul!)
Dim oDoc as Object 'Definition der Dokumentvariablen (Gilt im ganzen Modul!)
Sub Init_Dialog
oDoc = thisComponent
GlobalScope.BasicLibraries.LoadLibrary("Tools")
DLG = LoadDialog("Standard", "Test_Dialog", oDoc.DialogLibraries)
oTB1 = DLG.GetControl("TextField1")
oTB2 = DLG.GetControl("TextField2")
oTB1.Model.Text = oDoc.Sheets(0).GetCellRangeByName("B2").String 'Holt den Inhalt der Zelle B2 und schreibt den Text in TextField1
oTB2.Model.Text = oDoc.Sheets(0).GetCellRangeByName("C2").String 'Holt den Inhalt der Zelle C2 und schreibt den Text in TextField2
DLG.execute() ' Dialog anzeigen
End Sub
sub TB1_Change
oDoc.Sheets(0).GetCellRangeByName("B2").String = oTB1.Model.Text 'Schreibt den Textinhalt von TextField1 direkt in Celle B2
end sub
sub TB2_Change
oDoc.Sheets(0).GetCellRangeByName("C2").String = oTB2.Model.Text 'Schreibt den Textinhalt von TextField2 direkt in Celle C2
end sub
Die Sub "TB1_Change" verbindest Du mit der Aktion "Text modifiziert" von TextField1 und "TB2_Change" mit TextField2.
Die Änderung in dem jeweiligen Textfeld wird direkt in die Zelle geschrieben.
Ich hoffe das hilft dir weiter
Klaus Osigus
P.S. Wenn Du möchtest, kann ich dir auch das Beispieldokument als Anhang zusenden.
Re: [Gelöst] Altes Problem Neues Problem
Verfasst: Fr, 24.10.2008 10:46
von Ibanez
Danke KDO, der Code funktioniert. Problem
gelöst
Merci
Ibanez
