🙏 Helfen Sie jetzt mit, unser LibreOffice Forum zu erhalten! 🙏
Mit Ihrer Spende sichern Sie den Fortbestand, den Ausbau und die laufenden Kosten dieses Forums. 🌱

🍀 Jeder Beitrag zählt – vielen Dank für Ihre Unterstützung!🍀

❤️ DANKE >> << DANKE ❤️

>> Dank Ihrer Unterstützung -> Keine Werbung für alle registrierten LibreOffice-Forum User! <<
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗

Impress Textfelder ersetzen (Laufzeitfehler 423)

Alles zur Programmierung im LibreOffice.
Antworten
betaros
Beiträge: 2
Registriert: Do 23. Feb 2017, 18:52

Impress Textfelder ersetzen (Laufzeitfehler 423)

Beitrag von betaros » Do 23. Feb 2017, 18:58

Hallo,

ich versuche eines meiner Powerpoint Makros für Impress umzuschreiben, jedoch weiß ich hier nicht weiter und hoffe, dass mir hier jemand helfen kann.

Ich möchte alle Textfelder in meiner Präsentation nach einem bestimmten Text durchsuchen und dann den Text ersetzen. Bisher bin ich soweit gekommen:

Code: Alles auswählen

Function ImpressExecuteReplace(strText As String, strReplace As String)
    Dim oTextFieldCon As Object
    Dim oTextFields As Object
    
    oTextFieldCon = thisComponent.getTextFields
    oTextFields = oTextFieldCon.createEnumeration()
    
    Do while oTextFields.hasMoreElements()
        oTextField = oTextFields.nextElement()
        oTextField.setText(strReplace)
    loop
    
End Function
Wenn ich das Makro jedoch ausführe bekomme ich den Laufzeitfehler 423. Wie kann ich die Texte in den Textfeldern ersetzen?

Gruß
betaros

F3K Total
* LO-Experte *
Beiträge: 2501
Registriert: So 10. Apr 2011, 10:10

Re: Impress Textfelder ersetzen (Laufzeitfehler 423)

Beitrag von F3K Total » Sa 25. Feb 2017, 10:36

Hallo Betaros,
gerade war ich im Begriff, so ein Makro zu schreiben, da habe ich es mit normalem Menü Bearbeiten -> Suchen & Ersetzen probiert, funktioniert einwandfrei, ein Makro lohnt sich aus meiner Sicht nicht. Der obengenannte Dialog bietet sogar weitere Optionen und läßt sich bezüglich Gross- und Kleinschreibung einstellen.
Gruß R
Windows 11: AOO, LO Linux Mint: AOO, LO

musikai
Beiträge: 263
Registriert: Do 14. Mai 2015, 17:53

Re: Impress Textfelder ersetzen (Laufzeitfehler 423)

Beitrag von musikai » Sa 25. Feb 2017, 12:58

betaros hat geschrieben:Hallo,
Wenn ich das Makro jedoch ausführe bekomme ich den Laufzeitfehler 423. Wie kann ich die Texte in den Textfeldern ersetzen?

Gruß
betaros
Ich glaube, der Fehler liegt an einer kaputten LO-Installation.

Dein Code liefert mir einen anderen Fehler. Und zwar
"BASIC-Laufzeitfehler.
Eigenschaft oder Methode nicht gefunden: getTextFields."

Also kannst Du in Impress nicht auf diese Weise auf Textfelder zugreifen.

Dein Code ist ja momentan ja auch noch nicht auf Suchen ausgelegt.

Ich würde F3K Total's Vorschlag befolgen:
F3K Total hat geschrieben:Hallo Betaros,
gerade war ich im Begriff, so ein Makro zu schreiben, da habe ich es mit normalem Menü Bearbeiten -> Suchen & Ersetzen probiert, funktioniert einwandfrei, ein Makro lohnt sich aus meiner Sicht nicht. Der obengenannte Dialog bietet sogar weitere Optionen und läßt sich bezüglich Gross- und Kleinschreibung einstellen.
Gruß R
Win7 Pro, Sibelius 7.1.3, Lubuntu 15.10, LibO 4.4.7, OO 4.1.3
Free Project: LibreOffice Songbook Architect (LOSA)
http://struckkai.blogspot.de/2015/04/li ... itect.html

betaros
Beiträge: 2
Registriert: Do 23. Feb 2017, 18:52

Re: Impress Textfelder ersetzen (Laufzeitfehler 423)

Beitrag von betaros » Mo 27. Feb 2017, 09:29

Hi,

danke für die Antworten :)

Ich habe es nach einiger Zeit nun doch hinbekommen. Es geht darum von SVN Daten zu laden und die Eigenschaften dann automatisch zu ersetzen. Daher reicht mir Finden und Ersetzen leider nicht aus. ;)

Meine derzeitige Lösung:

Code: Alles auswählen

Function ImpressReplaceText()
     
    Dim strWhatReplace As String, strReplaceText As String
     
     ' write find text
    strWhatReplace = "SVNRevision"
     ' write change text
    strReplaceText = strWhatReplace + ": " + allSVNProps(0).strValue
    Call ImpressExecuteReplace(strWhatReplace, strReplaceText)
    
     ' write find text
    strWhatReplace = "SVNUrl"
     ' write change text
    strReplaceText = strWhatReplace + ": " + allSVNProps(1).strValue
    Call ImpressExecuteReplace(strWhatReplace, strReplaceText)
    
     ' write find text
    strWhatReplace = "SVNPath"
     ' write change text
    strReplaceText = strWhatReplace + ": " + allSVNProps(2).strValue
    Call ImpressExecuteReplace(strWhatReplace, strReplaceText)
    
     ' write find text
    strWhatReplace = "SVNChecksum"
     ' write change text
    strReplaceText = strWhatReplace + ": " + allSVNProps(4).strValue
    Call ImpressExecuteReplace(strWhatReplace, strReplaceText)
     
     ' write find text
    strWhatReplace = "SVNLastChangeDate"
     ' write change text
    strReplaceText = strWhatReplace + ": " + allSVNProps(5).strValue
    Call ImpressExecuteReplace(strWhatReplace, strReplaceText)
    
    ' write find text
    strWhatReplace = "SVNStatus"
     ' write change text
    strReplaceText = strWhatReplace + ": " + allSVNProps(8).strValue
    Call ImpressExecuteReplace(strWhatReplace, strReplaceText)
     
     ' write find text
    strWhatReplace = "SVNLastCheckedAuthor"
     ' write change text
    strReplaceText = strWhatReplace + ": " + allSVNProps(9).strValue
    Call ImpressExecuteReplace(strWhatReplace, strReplaceText)
    
End Function

Function ImpressExecuteReplace(strText As String, strReplace As String)

    Dim oSld As Object
    Dim oShp As Object
    Dim oTxtRng As String
    Dim oTmpRng As String
    Dim slideCounter As Integer
    Dim i As Integer
    Dim j As Integer
    Dim ThisField As Object
    
	slideCounter = ThisComponent.getMasterPages.getCount() - 1
        
     ' go during each slides
    For i=0 To slideCounter
    	oSld = ThisComponent.getDrawPages.getByIndex(i)
         ' go during each shapes and textRanges
        For j=0 To oSld.getCount() - 1
        	oShp = oSld.getByIndex(j)
             ' replace in TextFrame
            If oShp.ShapeType = "com.sun.star.drawing.TextShape" Then
                If InStr(oShp.getString(), strText) <> 0 Then
                    oShp.setString(strReplace)
                End If
            End If
        Next j
    Next i

End Function
Das ist wahrscheinlich nicht der schönste Code, aber es funktioniert :lol:

betaros


An alle, die das LibreOffice-Forum gern nutzen und unterstützen wollen:


Bitte helfen Sie uns mit 7 Euro pro Monat.
Durch Ihren Beitrag tragen Sie dazu bei, unsere laufenden Kosten für die kommenden Monate zu decken.
Unkompliziert per Kreditkarte oder PayPal.
Als ein kleines Dankeschön werden Sie im LO-Forum als SUPPORTER gekennzeichnet.



Antworten