2

Access から文書を開こうとしています。差し込み印刷を実行し、VBA を使用して差し込み印刷からの文書出力を保存しようとしています。

これが私の現在の試みです:

Dim templateName as String, tempRoot as String
tempRoot = "C:\report\"
templateName = tempRoot & "template.doc"

Dim objDoc As Word.Document
Dim objWord As New Word.Application
Set objDoc = objWord.Documents.Open(templateName)

objWord.Visible = True   

exportData "AnnualData", tempRoot & "annualData.txt" 'Outputs query to txt file for merge

objDoc.MailMerge.OpenDataSource NAME:= _
    tempRoot & "annualData.txt", ConfirmConversions:=False, ReadOnly _
    :=False, LinkToSource:=True, AddToRecentFiles:=False, PasswordDocument:= _
    "", PasswordTemplate:="", WritePasswordDocument:="", _
    WritePasswordTemplate:="", Revert:=False, Format:=wdOpenFormatAuto, _
    Connection:="", SQLStatement:="", SQLStatement1:="", SubType:= _
    wdMergeSubTypeOther

objDoc.MailMerge.Execute
objDoc.Close False      'Ideally after closing, the new document becomes the active document?

ActiveDocument.SaveAs tempRoot & "testReport.doc"    'And then save?

Set objWord = Nothing
Set objDoc = Nothing

マージされたドキュメントを取得しましたが、保存できません。ドキュメントが開いていないとコマンドを実行できないというエラーが表示されます。

誰かが提案を提供できる場合は、それをいただければ幸いです。

4

2 に答える 2

1

ActiveDocument を objWord.ActiveDocument に変更しました。望ましい結果に終わりました。

ありがとうレム。

于 2010-07-30T15:00:31.327 に答える
0

私はこれを通り抜けました。これが私がしていることであり、それはうまく機能します。oDocumentは、ユーザーが開いているダイアログボックスから選択するマージフォームです。Excelファイルは、以前にエクスポートしてユーザーの一時フォルダーに保存したクエリです。この手法をAccessクエリと一時テーブルで試しましたが、Excelを使用する方がはるかに問題がないことがわかりました。

Sleepコマンドは、インポートされたシステムdll関数(Public Declare Sub Sleep Lib "kernel32"(ByVal dwMS As Long))からのものであり、Wordにマージを実行する時間を与えます。実際、必要なのはそれだけかもしれません。これはOffice2007を使用しています。

If Not oDocument Is Nothing Then
                  ' get merge source file
               Set oFSO = New FileSystemObject
               Set oFolder = oFSO.GetSpecialFolder(TemporaryFolder)
               strTempFile = oFolder.Path & "\PTDMergeSource.xls"

                  ' run merge
               With oDocument.MailMerge
                   .MainDocumentType = wdFormLetters
                   .Destination = wdSendToNewDocument
                   .OpenDataSource strTempFile, WdOpenFormat.wdOpenFormatDocument, False, False, False, False, , , , , , , "SELECT * FROM `tblMerge$`", , False, WdMergeSubType.wdMergeSubTypeAccess
                   .Execute True
               End With
               Sleep 2
               oDocument.Close False
           Else
             MsgBox "Action was cancelled, or there was an error opening that document. Please try again, then try opening that document in Word. It may be someone else has locked that document (they are editing it). If the problem persists, email the document to the support contractor."
           End If
于 2010-07-30T14:49:42.770 に答える