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
betaros