4

stackoverflowに関する以前の質問がありました:
「Excelマクロから(シート上のボタンをクリックして)MAIL MERGEを開始することは可能ですか)データを含むExcelシートがあり、それを新しい単語ドキュメントにエクスポートしたいです。」これは、2009年9月29日12:39にdendarii772によって回答されました。

コンピューターのスキルが限られているボランティアの生活を簡素化したかったので、私たちにもこのニーズがありました。

残念ながら、適切なパスで変更されたdendariiのコードは、.OpenDataSourceステートメントで実行時エラー4198で終了します。

CindyMeisterがMicrosoftOfficeforDeveloper'sFormに書き込み>..>Word 2010 VBAは、4198エラーが同期性の問題に起因する可能性があることを示唆しました。私はそれを成功させませんでした。

Andrew PoulsonがExcelに書き込みを行うと、寄稿者のSneczがVBAメールマージの.OpenDataSourceステートメントをWordマクロの記録と比較するように促されます。寄稿者はどう思いますか?私の.OpenDataSource行は標準のようです。私のExcelデータソースファイルには、ヘッダーの行とそれに続く2行のデータ要素があります。

Office2010があります。

4198を修正する方法や、一般的な診断手順を知っている人がいれば、提案をいただければ幸いです。私たちは慈善団体で働いている2人です。どんな助けでも歓迎します!

 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  
4

2 に答える 2

3

Wordオブジェクトライブラリへの参照セットはありますか?そうでない場合は、そのライブラリにある特定のアイテム(などwdOpenFormatAuto)を使用しているため、マクロは失敗します。

ライブラリへの参照を追加するには、Excel VBAエディターで[ツール]>[参照]をクリックし、[Microsoft Wordオブジェクトライブラリ]が見つかるまで下にスクロールし、左側のボックスをクリックして[チェック]をクリックし、[OK]をクリックします。それに関連付けられたバージョン番号があります...Office2010を実行しているので、おそらく14.0です。

その参照を追加すると、問題が解決するはずです。

すでにそのセットをお持ちの場合は、お知らせください。

于 2011-11-07T16:22:23.690 に答える
1

OpenDataSourceの呼び出しの直前に人為的な遅延を入れて、Openメソッドに追いつく機会を与えるのはどうですか?これはかなり醜いので、VBA構文に一致させるために少しクリーンアップする必要があるかもしれませんが、ここに行きます:

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

また、日付をテストして、続行する前に一定の時間(つまり、2秒)を経過させることもできます(これは、何よりもVB.Netコードです)。

Dim dtDate As Date = Date.Now

Do While Date.Now.Subtract(dtDate).TotalSeconds < 2
  DoEvents()
Loop
于 2011-11-05T19:51:55.927 に答える