|
하안인 님이 쓰신 글 :
: 답변 감사합니다.
:
: 액셀로 내보낼때 매크로 기록을 해서 해 보았는데 액셀에서 셀의 속성 정하는것을 그때도
: 못해서 텍스트만 내보낸적이 있어서...
:
: 워드에서 글씨를 쓸때
:
: WordDocument1->Range(EmptyParam, EmptyParam)->InsertAfter(StringToOleStr("Name:" + Table->Fields->Fields[3]->AsString + '\n'));
:
:
: 위와 같이 예제에 서 본대로만 사용해 봐서..
:
: 좌표의 위치를 옮기는 것이 아니라 파일의 끝에다 값만 대입해 봐서요.
: addline의 어느 매소드인지요.
:
: WordDocument1 컴포넌트의 Sentences는 아닌것 같구요.
:
: 처음 해보려니 아는것이 없어서
: 염치 불구하고 도움을 청합니다.
:
: 제가 아는 것이 워드에 연결해서 이미지나 위의 함수를 써서 문자를 내보내는 수준이거든요.
:
: 보고서를 만드는 정도의 스킬을 하려면 표와 위치안에 삽입같은것을 할수 있으면
: 좋겠는데요.
:
: WordDocument->Tables->Add(EmptyParam,2,5,wdWord9TableBehavior,wdAutoFitFixed);
:
: 이렇게 했는데 에러가 나네요.
: 인자가 5개와 6개 두개의 함수가 있고 매크로로 보면 비베에 정의된것이 5개라서
: 위와 같이 했는데 ..
:
: 원형이
: (RangePtr Range,long NumRows,Long NumColumns,Tvariant* DefaultTableBehavior,TVariant* AutoFitBehavior,
: TablePtr *prop);
:
: (RangePtr Range,long NumRows,Long NumColumns,Tvariant* DefaultTableBehavior,TVariant* AutoFitBehavior,
: );
:
: TablePtr이 무엇인지 몰라서 두번째 인자값 비슷하게 했는데..
: RangePtr, TablePtr은 헬프에 없어서..
Word에서,
[도구]->[매크로]->[보안..] 메뉴를 선택하면 나타나는 창에서
1. '신뢰할 수 있는 원본' 탭의 'Visual Basic 프로젝트에 안전하게 액세스할 수 있음'을 선택해두면 외부에서 매크로를 편집할 수 있고
2. '보안 수준' 탭의 '낮음 '을 선택하면 외부에서 매크로를 실행할 수 있습니다.
아마도 외부에서 OLE를 사용하여 일일이 컨트롤하는 것보다는 매크로를 삽입하여 Word 내부에서 일거에 실행시키는 것이 빠를 것 같아 이 방법을 알려드리는 것입니다.
이렇게 하면 워드에서 기록한 매크로를 그대로 이용할 수 있는 장점도 있습니다.
매크로에 바이러스가 없다는 가정을 해야 합니다만 님이 직접 작성한 것이므로 별 상관 없겠지요.
Variant wordApp, wordDocuments, wordDocument,wordNewLine, wordLine, wordModule;
wordApp = Variant::CreateObject("Word.Application");
wordDocuments = wordApp.OlePropertyGet("Documents");
WideString strMacro="sub TestFunc\r\n"
"ActiveDocument.Tables.Add Range:=Selection.Range, NumRows:=2, NumColumns:= _\r\n"
"5, DefaultTableBehavior:=wdWord9TableBehavior, AutoFitBehavior:= _\r\n"
"wdAutoFitFixed\r\n"
"With Selection.Tables(1)\r\n"
"If .Style <> \"표 구분선\" Then\r\n"
".Style = \"표 구분선\"\r\n"
"End If\r\n"
".ApplyStyleHeadingRows = True\r\n"
".ApplyStyleLastRow = True\r\n"
".ApplyStyleFirstColumn = True\r\n"
".ApplyStyleLastColumn = True\r\n"
"End With\r\n"
"end sub\r\n"
;
// wordDocument = wordDocuments.OleFunction("Open","??");
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", "MyTestModule");
wordModule.OlePropertyGet("CodeModule").OleFunction("AddFromString",strMacro); //.AddFromFile(file_name)
wordApp.OleFunction("Run","TestFunc");
wordDocument.OleFunction("SaveAs","TestWordDoc2.doc",wdFormatDocument,false);
wordDocument.OleFunction("Close");
wordDocument = Unassigned;
wordDocuments=Unassigned;
wordApp=Unassigned;
|