2011-11-05 2 views
4

거기에 이전 질문에 대한 stackoverflow :
"Excel에서 매크로를 시작할 수 있습니까 (시트에 단추를 클릭하여) 데이터를 Excel 시트를 가지고 있고 내보낼. 새로운 단어 박사에게. " dendarii 772에 의해Excel 편지 병합 런타임 오류 4198

제한된 컴퓨터 기술을 가진 자원 봉사자의 생활을 단순화하고 싶었 기 때문에 우리는 또한이 필요했다.

적절한 경로로 수정 된 dendarii의 코드는 .OpenDataSource 문에서 런타임 오류 4198과 함께 종료됩니다.

신디 마이스터 (Cindy Meister)가 개발자 양식 용 문서 작성>> Word 2010 VBA는 동시성 문제로 인해 4198 오류가 발생할 수 있다고 제안했습니다. 나는 성공하지 못하게했다.

Mr Excel에서 작성한 Andrew Poulson은 Snecz가 VBA 편지 병합 .OpenDataSource 문과 Word 매크로 기록을 비교하도록 권장합니다. 공헌자는 무엇을 생각합니까? 내 .OpenDataSource 라인이 표준으로 보인다. 내 Excel 데이터 원본 파일에는 두 줄의 데이터 요소가 오는 머리글 행이 있습니다.

우리는 내가 4198을 해결하는 방법에 대한 어떤 제안에 매우 감사하게 될 것이며, 사람이 일반적으로 진단 절차를 알고있는 경우

Office 2010을 가지고있다. 우리는 자선 단체 인 을 위해 일하는 두 명입니다. 도움을 환영합니다!

Sub RunMerge() 
   
  Dim wd As Object 
    Dim wdocSource As Object 
      
    Dim strWorkbookName As String 
   
    On Error Resume Next  
  Set wd = GetObject(, "Word.Application")  
  If wd Is Nothing Then  
  Set wd = CreateObject("Word.Application")  
  End If  
  On Error GoTo 0  
      
    Set wdocSource = wd.Documents.Open("C:\Users\george\Desktop\VBA Project\Mergeletter.docx")   
      
  strWorkbookName = ThisWorkbook.Path & "\" & ThisWorkbook.Name   
   
  wdocSource.MailMerge.MainDocumentType = wdFormLetters   
      
  wdocSource.MailMerge.OpenDataSource _  
    Name:=strWorkbookName, _  
    AddToRecentFiles:=False, _  
    Revert:=False, _  
    Format:=wdOpenFormatAuto, _    
    Connection:="Data Source=" & strWorkbookName & ";Mode=Read", _ 
    SQLStatement:="SELECT * FROM `Sheet1$`"   

    With wdocSource.MailMerge 

    .Destination=wdSendToNewDocument 

    .SuppressBlankLines = True 
    With .DataSource 
    .FirstRecord = wdDefaultFirstRecord 
    .LastRecord = wdDefaultLastRecord 
    End With 
    .Execute Pause:=False 
    End With 
      
  wd.Visible = True 
  wdocSource.Close SaveChanges:=False   
      
    Set wdocSource = Nothing 
    Set wd = Nothing   

    End Sub 
+0

'Sheet1'이라는 워크 시트가 있습니까? – JimmyPena

+0

예! 모두 고쳐 졌어. –

답변

3

Word 개체 라이브러리에 대한 참조가 있습니까? 그렇지 않으면 해당 라이브러리에있는 특정 항목 (예 : wdOpenFormatAuto)을 사용 중이기 때문에 매크로가 실패합니다.

라이브러리에 대한 참조를 추가하려면 Excel> VBA 편집기에서 도구> 참조를 클릭하고 "Micrsoft Word Object Library"가 나타날 때까지 아래로 스크롤 한 다음 '확인'을 클릭하고 '확인'을 클릭하십시오. '. Office 2010을 실행하고 있기 때문에 버전 번호가 ... 아마 14.0입니다.

해당 참조를 추가하면 문제가 해결됩니다.

이미 해당 세트가있는 경우 저희에게 알려주십시오.

+0

436 호가 감사합니다. 퍼팅 wdOpenFormatAuto : = 0 작품도 미스터 Excel의 앤드루 Poulsom 말한다. 같은 이유로. –

1

방법에서 OpenDataSource에 대한 호출이 열기 방법을 따라 잡을 수있는 기회를 제공하기 직전에 인공 지연을 퍼팅에 대해? 이것은 아주 못생긴 및 VBA 구문에 맞게 조금 정리해야 할 수도 있습니다, 그러나 여기 간다 : 당신은 또한 날짜를 테스트하고 시간 패스 (즉, 이초)의 주어진 양을 할 수

For nI As Integer = 0 To 2500 
    DoEvents() 
Next 

에 수행하기 전에 (이것보다 VB.Net 코드가 더 많습니다) :

Dim dtDate As Date = Date.Now 

Do While Date.Now.Subtract(dtDate).TotalSeconds < 2 
    DoEvents() 
Loop 
+0

다른 유효한 답변이 2 개 있으므로 지금 당장이를 남겨 둘 것입니다. –