von Proma » Mo, 04.05.2020 22:00
Hallo Stephan,
erstmal vielen herzlichen Dank für Deine Unterstützung, Dein Verständnis und Deine Geduld mit mir!
Stephan hat geschrieben: Mo, 04.05.2020 08:44
es ist nur ungewöhnlich eine Textmarke mehrfach zu nutzen
Ja, da hast Du natürlich vollkommen recht, normal ist das nicht!

Aber in diesem speziellen Fall sollen Daten (Zahlen) aus Kalk in den Writer
übernommen (das klappt auch schon) und in die Textmarken geschrieben werden und dann soll dem Anwender die Möglichkeit geboten werden, die Zahlen zu prüfen und bei Bedarf auch (per Makro, z.B. mittels InputBox) zu ändern.
Deine Links, insbesondere der zur Uni-Due, und Dein Makro-Kochbuch sind für mich einfach Gold wert! Sie waren mir eine große Hilfe beim Erstellen eines kleinen Demo-Programms, mit dem ich den Code zum Befüllen, Auslesen und Zurücksetzen der Textmarken-Inhalte testen kann. Der Knackpunkt bei der ganzen Sache ist, dass das Ändern von Textmarkeninhalten nur mit "expandierten" Textmarken funktioniert. Eine expandierte TM erhält man, indem man mindestens EIN beliebiges Zeichen markiert und an dieser Stelle über Einfügen/Textmarken... eine neue TM erstellt.
Deinen Cursor-basierten Code, den ich ursprünglich verwenden wollte, habe ich dann doch nicht genommen, weil ich es einfach nicht hinbekommen habe. Das erste Problem mit der Fehlermeldung bin ich mit Deinem Vorschlag (Msgbox ThisComponent.dbg_properties) angegangen, da ist der Fehler noch einmal aufgetreten; weil ich aber verpasst hatte, die MsgBox zu fotografieren, hab' ich es nach einmal versucht und - dann hat das AEG-Prinzip (auf einmal geht's) gegriffen. In der Folge sind aber dann noch weitere unerklärliche Dinge passiert und ich hab' dann einfach den Mut verloren und zur anderen Variante gegriffen. Ich hoffe, Du nimmst es mir nicht übel. Gibt es eigentlich funktional einen Unterschied zwischen Deiner Lösung und meiner (s. nachstehenden Code)? Kann man sagen, dass die eine oder die andere Lösung besser ist und wenn ja warum?
Momentan bin ich etwas knapp in der Zeit, aber wenn ich wieder ein bisschen mehr Luft habe, dann stelle ich noch ein Beispiel mit Dokument hier ein. Vorläufig sage ich Dir erstmal ein ganz großes dickes Dankeschön für Deine Mühen, die Du Dir mit mir gemacht hast und für die tolle Unterstützung, de ich hier erfahren durfte!
Vielen herzlichen Dank und liebe Grüße
vom Martin
Code: Alles auswählen
Sub pMain
'Demonstriert das Befüllen, Auslesen und Leeren von Textmarken
dim strTxt as string
'Befüllen
MsgBox "Die Textmarken werden befüllt."
Call pSchreibeInTM("tmGrund", "Fahrtkosten")
Call pSchreibeInTM("tmSumme", 2345.67)
'Auslesen
MsgBox "Der Inhalt der Textmarken wird gelesen."
Call pLeseAusTM("tmGrund", strTxt)
MsgBox "Inhalt von TM Grund:" & chr(13) & chr(10) & strTxt
Call pLeseAusTM("tmSumme", strTxt)
MsgBox "Inhalt von TM Summe:" & chr(13) & chr(10) & strTxt
'Leeren
MsgBox "Die Inhalte der Textmarken werden gelöscht."
Call pSchreibeInTM("tmGrund", "")
Call pSchreibeInTM("tmSumme", "")
MsgBox "Hoffentlich hat alles geklappt..."
End Sub
'=====< Einträge in TM schreiben >==============================
Private Sub pSchreibeInTM(ByVal strBmk As String, ByVal varTxt As Variant)
Dim strTxt As String
'Zahl und Text unterscheiden
If IsNumeric(varTxt) Then 'Wenn eine Zahl geschrieben werden soll
strTxt = Format(Csng(varTxt), "#,##0.00") ' Formatiere die Zahl und wandle sie in Text um
Else 'Sonst
strTxt = Cstr(varTxt) ' Wandle den Inhalt der Variant-Variablen in Text um
End If 'Ende Wenn
'Den Text der Textmarke zuweisen
With ThisComponent.getBookmarks().getByName(strBmk) 'Bezugsobjekt: Textmarke
.getAnchor.setString(strTxt) ' Schreibe den Text in die Textmarke
End With 'Ende Bezugsobjekt (Textmarke)
End Sub
'=====< Einträge aus TM lesen >=================================
Private Sub pLeseAusTM(byval strBmk as string, ByRef strTxt)
With ThisComponent.getBookmarks().getByName(strBmk) 'Bezugsobjekt: Die betreffende Textmarke
strTxt = .getAnchor.getString ' Hole den Inhalt der Textmarke
End With 'Ende Bezugsobjekt (Die betreffende Textmarke)
End Sub
Ergänzt am 05.05.2020, 21:36 Uhr:
Demo-Programm Textmarken2.odt angefügt
- Dateianhänge
-
- Textmarken2.odt
- Kleines Demo-Programm
- (17.03 KiB) 230-mal heruntergeladen
Hallo Stephan,
erstmal vielen herzlichen Dank für Deine Unterstützung, Dein Verständnis und Deine Geduld mit mir!
[quote=Stephan post_id=290397 time=1588574657 user_id=814]
es ist nur ungewöhnlich eine Textmarke mehrfach zu nutzen
[/quote]
Ja, da hast Du natürlich vollkommen recht, normal ist das nicht! :lol: Aber in diesem speziellen Fall sollen Daten (Zahlen) aus Kalk in den Writer
übernommen (das klappt auch schon) und in die Textmarken geschrieben werden und dann soll dem Anwender die Möglichkeit geboten werden, die Zahlen zu prüfen und bei Bedarf auch (per Makro, z.B. mittels InputBox) zu ändern.
Deine Links, insbesondere der zur Uni-Due, und Dein Makro-Kochbuch sind für mich einfach Gold wert! Sie waren mir eine große Hilfe beim Erstellen eines kleinen Demo-Programms, mit dem ich den Code zum Befüllen, Auslesen und Zurücksetzen der Textmarken-Inhalte testen kann. Der Knackpunkt bei der ganzen Sache ist, dass das Ändern von Textmarkeninhalten nur mit "expandierten" Textmarken funktioniert. Eine expandierte TM erhält man, indem man mindestens EIN beliebiges Zeichen markiert und an dieser Stelle über Einfügen/Textmarken... eine neue TM erstellt.
Deinen Cursor-basierten Code, den ich ursprünglich verwenden wollte, habe ich dann doch nicht genommen, weil ich es einfach nicht hinbekommen habe. Das erste Problem mit der Fehlermeldung bin ich mit Deinem Vorschlag (Msgbox ThisComponent.dbg_properties) angegangen, da ist der Fehler noch einmal aufgetreten; weil ich aber verpasst hatte, die MsgBox zu fotografieren, hab' ich es nach einmal versucht und - dann hat das AEG-Prinzip (auf einmal geht's) gegriffen. In der Folge sind aber dann noch weitere unerklärliche Dinge passiert und ich hab' dann einfach den Mut verloren und zur anderen Variante gegriffen. Ich hoffe, Du nimmst es mir nicht übel. Gibt es eigentlich funktional einen Unterschied zwischen Deiner Lösung und meiner (s. nachstehenden Code)? Kann man sagen, dass die eine oder die andere Lösung besser ist und wenn ja warum?
Momentan bin ich etwas knapp in der Zeit, aber wenn ich wieder ein bisschen mehr Luft habe, dann stelle ich noch ein Beispiel mit Dokument hier ein. Vorläufig sage ich Dir erstmal ein ganz großes dickes Dankeschön für Deine Mühen, die Du Dir mit mir gemacht hast und für die tolle Unterstützung, de ich hier erfahren durfte!
Vielen herzlichen Dank und liebe Grüße
vom Martin
[code]
Sub pMain
'Demonstriert das Befüllen, Auslesen und Leeren von Textmarken
dim strTxt as string
'Befüllen
MsgBox "Die Textmarken werden befüllt."
Call pSchreibeInTM("tmGrund", "Fahrtkosten")
Call pSchreibeInTM("tmSumme", 2345.67)
'Auslesen
MsgBox "Der Inhalt der Textmarken wird gelesen."
Call pLeseAusTM("tmGrund", strTxt)
MsgBox "Inhalt von TM Grund:" & chr(13) & chr(10) & strTxt
Call pLeseAusTM("tmSumme", strTxt)
MsgBox "Inhalt von TM Summe:" & chr(13) & chr(10) & strTxt
'Leeren
MsgBox "Die Inhalte der Textmarken werden gelöscht."
Call pSchreibeInTM("tmGrund", "")
Call pSchreibeInTM("tmSumme", "")
MsgBox "Hoffentlich hat alles geklappt..."
End Sub
'=====< Einträge in TM schreiben >==============================
Private Sub pSchreibeInTM(ByVal strBmk As String, ByVal varTxt As Variant)
Dim strTxt As String
'Zahl und Text unterscheiden
If IsNumeric(varTxt) Then 'Wenn eine Zahl geschrieben werden soll
strTxt = Format(Csng(varTxt), "#,##0.00") ' Formatiere die Zahl und wandle sie in Text um
Else 'Sonst
strTxt = Cstr(varTxt) ' Wandle den Inhalt der Variant-Variablen in Text um
End If 'Ende Wenn
'Den Text der Textmarke zuweisen
With ThisComponent.getBookmarks().getByName(strBmk) 'Bezugsobjekt: Textmarke
.getAnchor.setString(strTxt) ' Schreibe den Text in die Textmarke
End With 'Ende Bezugsobjekt (Textmarke)
End Sub
'=====< Einträge aus TM lesen >=================================
Private Sub pLeseAusTM(byval strBmk as string, ByRef strTxt)
With ThisComponent.getBookmarks().getByName(strBmk) 'Bezugsobjekt: Die betreffende Textmarke
strTxt = .getAnchor.getString ' Hole den Inhalt der Textmarke
End With 'Ende Bezugsobjekt (Die betreffende Textmarke)
End Sub
[/code]
Ergänzt am 05.05.2020, 21:36 Uhr:
Demo-Programm Textmarken2.odt angefügt