Hello. I have put together this code but it seems I missed something.
All help is appreciated greatly.
1 2 3 4 5 6 7 8 9
Sub ReplaceTextCurrentPage() Dim txtFIND As String Dim txtREPLACE As String txtFIND = ActiveDocument.FindShape("date") txtREPLACE = CStr(Date) ActivePage.TextReplace txtFIND, txtREPLACE, True, False End Sub
I tried this but still nothing works.
Sub ReplaceText() Dim txtFIND As String 'The word you want to find and replace Dim txtREPLACE As String 'The new word to replace the old Dim s As Shape ActivePage.AllLayers("Titleblock").Activate txtFIND = "0/0/2020" txtREPLACE = CStr(Date)
ActivePage.TextReplace txtFIND, txtREPLACE, True, FalseEnd Sub
I tried a very simple one:ActivePage.TextReplace "foo", "bar", True, FalseIt works on text when it is on a page layer, but not when it is on a master layer.
If that's a limitation of the Page.TextReplace method, then you might try something like this instead.
Sub test_replace_text() Dim sr As ShapeRange Dim s As Shape Set sr = ActivePage.FindShapes(, cdrTextShape) For Each s In sr s.Text.Story = Replace(s.Text.Story, "foo", "bar") Next s End Sub
hEY Eskimo. What does this new code you posted do exactly?
I wrote that pretty quick-and-dirty. It might be more elegant to not actually change each s.Text.Story, but instead to check, and only change it if the "replace" changed the text string.
I don't know what the price is to essentially say, "Hey, look at what the Story is, then change the Story to be... what the Story already is."
Here is one that is a little bit more elaborate:
Sub replace_date_placeholder_text() Dim sr As ShapeRange Dim s As Shape Dim strNewDate As String Dim strOrig As String Dim strReplaced As String Const strDatePlaceholder As String = "0/0/2020" strNewDate = Format(Now, "m/d/yyyy") Set sr = ActivePage.FindShapes(, cdrTextShape) For Each s In sr strOrig = s.Text.Story strReplaced = Replace(strOrig, strDatePlaceholder, strNewDate) If strOrig <> strReplaced Then s.Text.Story = strReplaced End If Next s End Sub