Seite 1 von 1

Impress Textfelder ersetzen (Laufzeitfehler 423)

Verfasst: Do 23. Feb 2017, 18:58
von betaros
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

Re: Impress Textfelder ersetzen (Laufzeitfehler 423)

Verfasst: Sa 25. Feb 2017, 10:36
von F3K Total
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

Re: Impress Textfelder ersetzen (Laufzeitfehler 423)

Verfasst: Sa 25. Feb 2017, 12:58
von musikai
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

Re: Impress Textfelder ersetzen (Laufzeitfehler 423)

Verfasst: Mo 27. Feb 2017, 09:29
von betaros
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