[Solved] Forward find and replace after backwards search
[Solved] Forward find and replace after backwards search
I have a macro to find and replace some text which uses find and replace backwards. I would like that the next find and replace use would automatically work with the default again (that is, searching forward).
Last edited by Hagar Delest on Fri Nov 29, 2019 10:57 pm, edited 2 times in total.
Reason: tagged solved
Reason: tagged solved
OpenOffice 3.4.1 on Windowx XP
Re: Restore forward find and replace after backwards search
Repeat your macro so it runs twice when you use it, where the second time it is set to search for anything in forwards mode. This resets the Find and Replace to forwards and it is sticky. This is mine.
Showing that a problem has been solved helps others searching so, if your problem is now solved, please view your first post in this thread and click the Edit button (top right in the post) and add [Solved] in front of the subject.
Code: Select all
Sub FindReplaceRegExp (sFind,sReplace,sScope)
REM sFind: regular expression
REM sReplace: if empty, function selects all occurrences of sFind
REM sScope: set to "all" for entire document, or "selection" to restrict the scope.
REM function searches backwards (necessary to correctly catch quotes)
dim document as object
dim dispatcher as object
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dim args1(18) as new com.sun.star.beans.PropertyValue
args1(0).Name = "SearchItem.StyleFamily"
args1(0).Value = 2
args1(1).Name = "SearchItem.CellType"
args1(1).Value = 0
args1(2).Name = "SearchItem.RowDirection"
args1(2).Value = true
args1(3).Name = "SearchItem.AllTables"
args1(3).Value = false
args1(4).Name = "SearchItem.Backward"
args1(4).Value = true
args1(5).Name = "SearchItem.Pattern"
args1(5).Value = false
args1(6).Name = "SearchItem.Content"
args1(6).Value = false
args1(7).Name = "SearchItem.AsianOptions"
args1(7).Value = false
args1(8).Name = "SearchItem.AlgorithmType"
args1(8).Value = 1
args1(9).Name = "SearchItem.SearchFlags"
If sScope = "all" Then
args1(9).Value = 65536 ' parse entire doc
Else
args1(9).Value = 71680 ' parse selection only
End If
args1(10).Name = "SearchItem.SearchString"
args1(10).Value = sFind
args1(11).Name = "SearchItem.ReplaceString"
args1(11).Value = sReplace
args1(12).Name = "SearchItem.Locale"
args1(12).Value = 255
args1(13).Name = "SearchItem.ChangedChars"
args1(13).Value = 2
args1(14).Name = "SearchItem.DeletedChars"
args1(14).Value = 2
args1(15).Name = "SearchItem.InsertedChars"
args1(15).Value = 2
args1(16).Name = "SearchItem.TransliterateFlags"
args1(16).Value = 1280
args1(17).Name = "SearchItem.Command"
If sReplace = "" Then
args1(17).Value = 1 ' find all
Else
args1(17).Value = 3 ' replace all
End If
args1(18).Name = "Quiet"
args1(18).Value = true
dispatcher.executeDispatch(document, ".uno:ExecuteSearch", "", 0, args1())
End Sub
Sub FindReplaceReset (sFind,sReplace,sScope)
'jh This sub FindReplaceReset is used merely to untick the Regular Expression and Backwards search boxes.
REM sFind: is not a regular expression
REM sReplace: if empty, function selects all occurrences of sFind
REM sScope: set to "all" for entire document, or "selection" to restrict the scope.
REM function searches forwards to untick the box
dim document as object
dim dispatcher as object
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dim args1(18) as new com.sun.star.beans.PropertyValue
args1(0).Name = "SearchItem.StyleFamily"
args1(0).Value = 2
args1(1).Name = "SearchItem.CellType"
args1(1).Value = 0
args1(2).Name = "SearchItem.RowDirection"
args1(2).Value = true
args1(3).Name = "SearchItem.AllTables"
args1(3).Value = false
args1(4).Name = "SearchItem.Backward"
args1(4).Value = false ' set to false to search forwards so as to untick the box
args1(5).Name = "SearchItem.Pattern"
args1(5).Value = false
args1(6).Name = "SearchItem.Content"
args1(6).Value = false
args1(7).Name = "SearchItem.AsianOptions"
args1(7).Value = false
args1(8).Name = "SearchItem.AlgorithmType"
args1(8).Value = 0 ' set to 0 to untick regular expressions
args1(9).Name = "SearchItem.SearchFlags"
If sScope = "all" Then
args1(9).Value = 65536 ' parse entire doc
Else
args1(9).Value = 71680 ' parse selection only
End If
args1(10).Name = "SearchItem.SearchString"
args1(10).Value = sFind
args1(11).Name = "SearchItem.ReplaceString"
args1(11).Value = sReplace
args1(12).Name = "SearchItem.Locale"
args1(12).Value = 255
args1(13).Name = "SearchItem.ChangedChars"
args1(13).Value = 2
args1(14).Name = "SearchItem.DeletedChars"
args1(14).Value = 2
args1(15).Name = "SearchItem.InsertedChars"
args1(15).Value = 2
args1(16).Name = "SearchItem.TransliterateFlags"
args1(16).Value = 1280
args1(17).Name = "SearchItem.Command"
If sReplace = "" Then
args1(17).Value = 1 ' find all
Else
args1(17).Value = 3 ' replace all
End If
args1(18).Name = "Quiet"
args1(18).Value = true
dispatcher.executeDispatch(document, ".uno:ExecuteSearch", "", 0, args1())
End Sub
LO 6.4.4.2, Windows 10 Home 64 bit
See the Writer Guide, the Writer FAQ, the Writer Tutorials and Writer for students.
Remember: Always save your Writer files as .odt files. - see here for the many reasons why.
See the Writer Guide, the Writer FAQ, the Writer Tutorials and Writer for students.
Remember: Always save your Writer files as .odt files. - see here for the many reasons why.
Re: Restore forward find and replace after backwards search
Thanks, John_Ha. Much appreciated!
OpenOffice 3.4.1 on Windowx XP