문제

응용 프로그램 내에서 문자를 생성 해야하는 일부 메일 병합 코드에 문제가 있습니다. 나는이 코드가 현재 약간 거칠다는 것을 알고 있지만, 우리는 그것을 정리하기 전에 "작동하는 것"단계에 있습니다.

이제 이것이 작동하는 방식과 수동으로 수행 할 때 작동하는 방식은 문자의 템플릿 인 파일 (파일 아웃 변수 + ".template")이 있다는 것입니다. 해당 템플릿을 열고 병합 한 다음 파일 아웃 변수의 파일 이름으로 저장합니다.

그러나, 그것이하는 일은 템플릿 파일의 사본을 merge의 출력 대신 파일 아웃 파일 이름에 저장하는 것입니다.

나는 검색했고, 나는 벽돌 벽에 머리를 두드리는 것처럼 보인다.

DataFile은 병합 데이터를 포함하는 DataFile입니다.

동일한 파일을 사용하면 수동으로 수행하면 모두 작동합니다.

Public Function processFile(ByVal datafile As String, ByVal fileOut As String) As String
    Dim ans As String = String.Empty

    errorLog = "C:\Temp\Template_error.log"

    If (File.Exists(datafile)) Then

        Try

            ' Create an instance of Word  and make it invisible.'

            wrdApp = CreateObject("Word.Application")
            wrdApp.Visible = False

            ' Add a new document.'

            wrdDoc = wrdApp.Documents.Add(fileOut & ".template")
            wrdDoc.Select()

            Dim wrdSelection As Word.Selection
            Dim wrdMailMerge As Word.MailMerge


            wrdDoc.MailMerge.OpenDataSource(datafile)

            wrdSelection = wrdApp.Selection()
            wrdMailMerge = wrdDoc.MailMerge()
            With wrdMailMerge
                .Execute()
            End With

            wrdDoc.SaveAs(fileOut)

            wrdApp.Quit(False)

            ' Release References.'
            wrdSelection = Nothing
            wrdMailMerge = Nothing
            wrdDoc = Nothing
            wrdApp = Nothing


            ans = "Merged OK"

            Call writeToLogFile(errorLog, "This worked, written to  " & fileOut)

        Catch ex As Exception
            ans = "error : exception thrown " & ex.ToString
            Call writeToLogFile(errorLog, ans)
        End Try

    Else
        ans = "error ; unable to open Date File : " & datafile
        If (logErrors) Then
            Call writeToLogFile(errorLog, "The specified source csv file does not exist. Unable " & _
               "to process it. Filename provided: " & datafile)
        End If
    End If

    Return ans

End Function
도움이 되었습니까?

해결책

솔루션을 찾았습니다. 문서를 병합하면 병합 결과가 포함 된 새 문서를 만듭니다. 아래 코드 조각이 설명합니다.

wrdDoc = wrdApp.Documents.Add(TemplateFileName)
wrdDoc.Select()
Dim wrdSelection As Word.Selection
Dim wrdMailMerge As Word.MailMerge


wrdDoc.MailMerge.OpenDataSource(DataFileName)

wrdSelection = wrdApp.Selection()
wrdMailMerge = wrdDoc.MailMerge()
With wrdMailMerge
    .Execute()
End With

' This is the wrong thing to do. It just re-saves the template file you opened. '
'wrdDoc.SaveAs(OutputFileName) '

' The resulting merged document is actually stored '
' in the MailMerge object, so you have to save that '
wrdMailMerge.Application.ActiveDocument.SaveAs(OutputFileName)

wrdApp.Quit(False)

다른 팁

문제 가이 줄이라고 생각합니다.

wrdDoc.MailMerge.OpenDataSource(templateName)

그래서 기사단 이름 'c : my template.doc'과 같은 것입니까?

".template"문서에 링크 된 데이터 소스 (Excel 또는 CSV 파일, 액세스 테이블 등) 대신 Word 문서 자체의 파일 경로를 제공하는 것처럼 보입니다.

노력하다:

data = "C:\My Data.xls"
wrdDoc.MailMerge.OpenDataSource(data)

속임수 한 가지 방법은 매크로를 녹음하면서 언급 한 모든 단계를 수동으로 수행하는 것입니다. 완료되면 매크로를보다 유연하게 조정하십시오.

그게 내가 지난번에 내 자신의 매크로를 쓰면서 알아낼 수 없었던 일입니다. :)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top