안녕하세요. 현재 아래와 같은 매크로를 만들려고 합니다만 처음이기도 하고 어디서 배울지도 잘 모르겠는 차에 이 곳을 알게되어 질문글 남겨봅니다.
현재 만드려는 스크립트는
A라는 텍스트가 있을 경우 A가 있는 마지막 페이지(여러개 있을 경우 마지막)를 찾아 그 위에 존재하는 모든 페이지 삭제
A가 존재하지 않을 경우 B를 찾아 위와 같은 작업을 처리
이후 C를 찾아 C가 있는 페이지 아래 페이지를 모두 삭제
이것을 하려합니다. 즉 문서를 위 아래로 잘라서 문서의 원하는 부분만 남기고 싶습니다.
API가 있다고 하여 사용해보려 하였으나 환경상 사용이 어려워
매크로 파일로 만들어서 문서 자체에 사용하는 것이 좋겠다 결론 내렸고
Chat gpt를 사용하고 인터넷의 여러 글들을 참조하여 매크로를 작성해 보았으나 정상적으로 작동되지 않고있습니다.
혹여 보시고 잘못된 부분이있다면 알려주시기 바랍니다.
가능하다면 정상작동하는 스크립트 예시를 주시면 제가 실험해보고 그것을 토대로 공부해보도록 하겠습니다.
감사합니다.
function OnScriptMacro_script5()
{
// 문서의 시작으로 이동
HAction.Run("MoveDocBegin");
// "(수정안 포함)" 찾기
HAction.GetDefault("Find", HParameterSet.HFindReplace.HSet);
HParameterSet.HFindReplace.FindString = "(수정안 포함)";
HParameterSet.HFindReplace.Direction = 1; // 아래 방향 검색
HAction.Execute("Find", HParameterSet.HFindReplace.HSet);
// 찾았으면 그 위쪽 삭제
if (HAction.Run("Find"))
{
HAction.Run("MovePageBegin");
HAction.Run("SelectCtrlFront");
HAction.Run("Delete");
}
else
{
// "(수정안 포함)"이 없으면 "별첨 2" 변형 버전 찾기
for (var i = 0; i <= 4; i++)
{
HAction.GetDefault("Find", HParameterSet.HFindReplace.HSet);
HParameterSet.HFindReplace.FindString = "별첨" + " ".repeat(i) + "2";
HParameterSet.HFindReplace.Direction = 1;
HAction.Execute("Find", HParameterSet.HFindReplace.HSet);
if (HAction.Run("Find"))
{
HAction.Run("MovePageBegin");
HAction.Run("SelectCtrlFront");
HAction.Run("Delete");
break;
}
}
}
// 문서 끝으로 이동
HAction.Run("MoveDocEnd");
// "부 칙" 찾기 (띄어쓰기 최대 10개 허용)
for (var i = 0; i <= 10; i++)
{
HAction.GetDefault("Find", HParameterSet.HFindReplace.HSet);
HParameterSet.HFindReplace.FindString = "부" + " ".repeat(i) + "칙";
HParameterSet.HFindReplace.Direction = 0; // 위쪽 방향 검색
HAction.Execute("Find", HParameterSet.HFindReplace.HSet);
if (HAction.Run("Find"))
{
HAction.Run("MovePageEnd");
HAction.Run("SelectCtrlBack");
HAction.Run("Delete");
break;
}
}
}
이것이 제가 원하는 코드인데 문법적으로 잘못된 부분이 있는건가요?
줄수 25에서 개체가 이속성 또는 메서드를 지원하지 않는다고 뜨네요
ps. 계속확인해보니
HAction.Run("SelectCtrlFront");
HAction.Run("Delete");
이건 동작하지 않고
HAction.Run("MoveSelTopLevelBegin"); // 문서 최상단으로 이동
HAction.Run("DeleteBack"); // 위쪽 삭제
이렇게 써야 정상적으로 기능하는데
HParameterSet.HFindReplace.FindString = "별첨" + " ".repeat(i) + "2";
HParameterSet.HFindReplace.FindString = "부" + " ".repeat(i) + "칙";
이렇게 텍스트를 찾는부분이 문제가있는 것같아요
어떻게 수정해야할까요