bhjung님께서 답변을 달아주셨는데요, 조금만 첨언드리면
찾기 또는 찾아바꾸기를 실행할 때,
캐럿이 어디 위치하고 있는지(찾은 단어 앞에 있는지 뒤에 있는지)를 파악해 두시면
이후 로직을 짜기 훨씬 수월해지는 것 같습니다.
나아가 “찾아바꾸기” API에 의존하기보다,
“찾기” 이후 원하시는 작업을 직접 실행하는 방식으로 코드를 짜보시면
보다 유연하고 직관적으로 처리하실 수 있게 될 것입니다.
예를 들어 "아래 방향"으로 "찾아바꾸기"를 한 번 실행하시면
첫 번째로 찾은 단어를 "바꾸지 않은 상태"로 "단어 끝"에 캐럿이 위치합니다.
(이 때문에 API로 “찾아바꾸기” 실행시에는 첫 번째로 찾은 단어의 바꾸기를 건너뛰게 되네요…)
게다가 "위 방향"으로 찾으시면 단어의 "시작"에 캐럿이 위치합니다.
이런 API스펙들 때문에 찾기방향을 바꾸면서 액션을 실행하면 코드가 상당히 복잡해지게 됩니다ㅜ
지극히 주관적이지만,
제 경우 보고서나 정관 같은 문서에서 찾아바꾸기 비슷한 작업을 코드로 처리할 때는
거의 대부분 아래 세 가지 방법 중 하나로 코딩을 했습니다.
일괄 문자열교체 작업인 경우에는 무조건 AllDoc 옵션으로 문서 내 일괄 찾아바꾸기 실행
찾기 이후 일련의 복잡한 과정을 실행하는 경우에는 Find 이후의 액션들을 함수로 만들어 처리
찾는 번호가 바뀐다거나 정규식이 필요한 경우는 Find 대신 GetText를 이용해서 처리