C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[47733] Re:Re:Re:Re:MS 워드 매크로를 BCB 에서 Coding 하려 합니다.
안성훈 [] 1301 읽음    2007-01-11 18:08
ㅂ 님이 쓰신 글 :
: 안성훈 님이 쓰신 글 :
: : ㅂ 님이 쓰신 글 :
: : : 안성훈 님이 쓰신 글 :
: : : : With ActiveDocument.Bookmarks
: : : :         .Add Range:=Selection.Range, Name:="r1"
: : : :         .DefaultSorting = wdSortByName
: : : :         .ShowHidden = False
: : : :     End With
: : : :
: : : : 위에 매크로 소스를 bcb 에서 ole 개체로 해서 워드에 적용하려고 합니다.
: : : : 매크로 내용은 워드의 표 안에 있는 문자열을 선택해서
: : : : 책갈피 이름 r1 으로 추가하는 매크로 입니다.
: : : :
: : : : Q&A 를 써치해 보니 매크로 변환하는 비스한 것이 있던데 아래 소스처럼해보니
: : : : 에러가 나오는데 뭐가 잘못 됐는지 잘 모르겠네요..
: : : : 좀 도와 주십시요..
: : : :
: : : :   VTD_MONITOR->wordApp = Variant::CreateObject("Word.Application");
: : : :   VTD_MONITOR->wordDocuments = VTD_MONITOR->wordApp.OlePropertyGet("Documents");
: : : :   VTD_MONITOR->wordApp.Exec(VisTrue);
: : : :   VTD_MONITOR->wordDocument = VTD_MONITOR->wordDocuments.OleFunction("Open","D:\\VTD_MONITOR\\Test Report for PK3+ Function(Simple).doc");
: : : : //  VTD_MONITOR->wordDocument = VTD_MONITOR->wordDocuments.OleFunction("Add",Variant::NoParam(),Variant::NoParam(),wdNewBlankDocument,Variant::NoParam());
: : : : //  VTD_MONITOR->wordDocument = VTD_MONITOR->wordDocuments.OleFunction("Add"); // new doc open
: : : :   VTD_MONITOR->wordSelection = VTD_MONITOR->wordApp.OlePropertyGet("Selection");
: : : :   VTD_MONITOR->wordRange = VTD_MONITOR->wordSelection.OlePropertyGet("Range");
: : : :   VTD_MONITOR->wordSelection.OleFunction("MoveDown", wdLine, 202);
: : : :   VTD_MONITOR->wordSelection.OleFunction("MoveRight", wdCharacter, 2);
: : : :   VTD_MONITOR->wordDocuments.OlePropertyGet("Bookmarks").OleFunction("Add",VTD_MONITOR->wordRange,"r1",wdSortByName);  // 여기서 에러가 납니다.
: : : :
: : : : 메세지는
: : : : Project VTD_MONITOR.exe raised exception class EOleSysError with message '알 수 없는 이름입니다'.
: : : : Process stopped. Use Step or Run to continue.
: : :
: : :    wordBookmarks = wordDocument.OlePropertyGet("Bookmarks");
: : :    wordBookmarks.OleFunction("Add","r1",wordRange);
: : :    wordBookmarks.OlePropertySet("DefaultSorting",wdSortByName);
: : :    wordBookmarks.OlePropertySet("ShowHidden",FALSE);
: :
: :
: : 답변해 주신데로 하니까. 잘 됩니다. ^^
: :
: : 그런데,, 아래 것이 또 안되는데,, 쩝~
: :
: : /************************************************************************************************/
: : /*    Selection.PasteSpecial Link:=False, DataType:=20, Placement:=wdInLine, _  */
: : /*        DisplayAsIcon:=False                                                                             */
: : /***********************************************************************************************/
: :
: :  VTD_MONITOR->wordSelection.OleFunction("PasteSpecial",FALSE,20,wdInLine,FALSE); // 여기서 에러가 납니다.
: :
: : 뭐가 잘못 됐나요??
: :
: : 변환의 법칙이 대략 감이 오는데,, 이건 왜 안되는지.. 쩝
: :
: : 에러  메세지는
: :  Project VTD_MONITOR.exe raised exception class EOleSysError with message '예외가 발생 했습니다'.
: :  Process stopped. Use Step or Run to continue.
: : 입니다.
: :
: : 추가로 부탁드립니다.
: :
: :     Selection.EndKey Unit:=wdLine
: :     Selection.HomeKey Unit:=wdLine, Extend:=wdExtend
: :     Selection.Copy
: :     Selection.PasteAndFormat (wdPasteDefault) <- 여기 괄호 부분은 어떻게 변환하는 지요??
: :    
: : 부탁드립니다.
:
:    wordSelection.OleFunction("PasteSpecial",0,FALSE,wdInLine,FALSE,wdPasteText);
:
:    wordSelection.OleFunction("EndKey", wdLine);
:    wordSelection.OleFunction("HomeKey", wdLine, wdExtend);
:    wordSelection.OleFunction("Copy");
:    wordSelection.OleFunction("PasteAndFormat",wdPasteDefault);
:
: MS-Word의 Visual Basic Editor를 열면 매크로들이 보일 것입니다.
: 원하는 함수 위에 프롬프트를 가져다 놓고 F1 키를 누르면 해당하는 도움말이 나오는데 도움말에 나와 있는 순서대로 매개변수를 지정해주면 됩니다.
: 생략가능하여 생략하고자 하는 매개변수 자리에는 Variant::NoParam()을 지정해주면 됩니다.
:
: PropertyGet ,PropertySet ,Function,Procedure 등을 이용하는 방법도 있습니다.
:
: 또는, 매크로를 동적으로 외부에서 삽입하여 실행되도록 하는 방법이 있는데 워드에서 만든 매크로를 그대로 사용할 수 있는 장점이 있습니다.
: WideString strMacro="sub AddBookmark()\r\n 등 워드에서 만든 매크로 함수 내용을 그대로 여기에 넣음, 다만 줄바꿈은 잘 해주어야 함";
:   wordDocument = wordDocuments.OleFunction("Add",Variant::NoParam(),Variant::NoParam(),wdNewBlankDocument,Variant::NoParam());
:   wordModule = wordDocument.OlePropertyGet("VBProject").OlePropertyGet("VBComponents").OleFunction("Add",vbext_ct_StdModule);
:   wordModule.OlePropertySet("Name", "TestModule1");
:   wordModule.OlePropertyGet("CodeModule").OleFunction("AddFromString",strMacro); //.AddFromFile(file_name)
:   wordApp.OleFunction("Run","AddBookmark");

정말 감사합니다. 메소드 사용법은 말씀하신데로 사용하니 잘 됩니다.
그런데,, 아래의 경우와 같이 속성에 괄호가 있는 경우는 어떻게 하는 지요...
이래저래 해 보았는데,, 잘 안됩니다.

    ActiveDocument.Bookmarks("e").Delete
    With ActiveDocument.Bookmarks
        .DefaultSorting = wdSortByName
        .ShowHidden = False
    End With

아래 처럼 해 봤는데,, ^^ 안되네요..
  VTD_MONITOR->wordDocument.OlePropertyGet("Bookmarks","r").OleFunction("Delete");

부탁드립니다.

+ -

관련 글 리스트
47705 MS 워드 매크로를 BCB 에서 Coding 하려 합니다. 안성훈 1131 2007/01/10
47720         Re:Re:MS 워드 매크로를 BCB 에서 Coding 하려 합니다. 안성훈 1035 2007/01/11
47733                 Re:Re:Re:Re:MS 워드 매크로를 BCB 에서 Coding 하려 합니다. 안성훈 1301 2007/01/11
47734                     Re:Re:Re:Re:Re:MS 워드 매크로를 BCB 에서 Coding 하려 합니다. 1028 2007/01/11
47742                         Re:Re:Re:Re:Re:Re:MS 워드 매크로를 BCB 에서 Coding 하려 합니다. 안성훈 1519 2007/01/12
47708     Re:MS 워드 매크로를 BCB 에서 Coding 하려 합니다. 안성훈 1185 2007/01/10
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.