2012-02-17 2 views
1

VBA 코드를 한 단어 문서에서 다른 단어 문서로 복사하려면 다음 코드를 사용합니다 (C# 사용). 그것은 모듈을 위해 작동하지만 나는 userforms와 함께 작동시키지 못합니다.Word 문서 복사 다른 사용자 형식

VBComponent sourceVBC = GetSourceDocVB(); 
VBComponent targetVBC = document.VBProject.VBComponents.Add(sourceVBC.Type); 
string codes = sourceVBC.CodeModule.get_Lines(1, sourceVBC.CodeModule.CountOfLines); 
targetVBC.CodeModule.AddFromString(codes); 
targetVBC.Name = sourceVBC.Name; 

예, userform은 대상 문서로 복사되지만 해당 필드는 복사되지 않습니다. 레이블 및 텍스트 상자가 포함 된 경우와 같습니다. 해당 필드는 복사되지 않습니다. 내가 여기서 뭔가를 놓치고 있니?

답변

2

예, 뭔가 빠졌습니다. 양식은 코드 파일에만 정의되어 있지는 않지만 이진 파일도 필요합니다. 원본 파일이 생성되는 방식에 대해서는 아무 것도 말하지 않습니다. 일반적으로 VBA에서는 VBComponent 객체의 "Export"문을 사용합니다. 물론 수동으로 Word에서 VBA 편집기로 이동하여 프로젝트 구성 요소를 마우스 오른쪽 단추로 클릭하고 "내보내기"를 선택하여 수행 할 수 있습니다. 내보내기 폴더를 살펴보면 양식이 "Form1.frm"(코드 포함)과 "Form1.frx"(이진 형식 데이터가 포함 된 레이블 및 기타 항목) 파일로 저장된다는 것을 알 수 있습니다. . 다른 프로젝트에서는 파일 가져 오기 기능을 사용하여 양식을 가져 오는 경우 이진 정의를 처리 할 수 ​​있습니다. 당신이

ActiveDocument.VBProject.VBComponents.Import strFilename 
를 사용합니다

For Each vbC In ActiveDocument.VBProject.VBComponents 
    Select Case vbC.Type 

    Case vbext_ct_StdModule 
     strVbcExt = ".bas" 
    Case vbext_ct_ClassModule 
     strVbcExt = ".cls" 
    Case vbext_ct_MSForm 
     strVbcExt = ".frm" 
    Case Else 
    End Select 

    strvbCName = vbC.Name 
    strFilename = strPath & "\" & strvbCName & strVbcExt 
    vbC.Export strFilename 
(omitted the rest) 

그리고 가져올 수 : VBA에서

, 당신은 프로젝트에서 내보내려면이 같은 것을 사용할 수있다