元々VBAで作成していたものをPowershellのCom呼び出しを利用して同等のものを作成しています。
いくつかの書き換えはできているのですが、できない部分が次の部分になります。
VBA
1Sub 移行しにくい箇所() 2’ここに実際は前処理 3 ActiveDocument.MailMerge.OpenDataSource Name:=適当なファイル名 _ 4 , SQLStatement:="SELECT * FROM `Sheet1$`"_ 5 , SubType:=wdMergeSubTypeAccess 6’ここに実際は後処理 7End Sub
先ず準備したコードが下で
PowerShell
1$Word = New-Object -Com Word.Application 2$Word.Visible = $true 3$Doc = $Word.Documents.Open( "C:\Users\適当なファイル名.docm" ) 4$m =[type]::Missing 5$DP = "C:\Users\適当なファイル名.xlsx" 6$sql ="SELECT * FROM ``Sheet1$``"
エラーが出たのはこの OpenDataSource の部分で
PowerShell
1$Doc.MailMerge.OpenDataSource($DP,$null,$null,$null,$null,$null,$null,$null,$null,$null,$null,$null,$sql,$null,$null,1) 2$Doc.MailMerge.OpenDataSource($DP,$null,$null,$null,$null,$null,$null,$null,$null,$null,$null,$null,$sql,$null,$null,[object]1) 3#↑のどちらかを動かすと↓のエラーが出て 4"OpenDataSource" の設定中に例外が発生しました: 型 "int" の "1" 値を型 "Object" に変換できません。 5発生場所 行:1 文字:1 6+ $Doc.MailMerge.OpenDataSource($DP,$null,$null,$null,$null,$null,$null ... 7+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 8 + CategoryInfo : NotSpecified: (:) [], MethodException 9 + FullyQualifiedErrorId : RuntimeException 10
PowerShell
1$Doc.MailMerge.OpenDataSource($DP,$null,$null,$null,$null,$null,$null,$null,$null,$null,$null,$null,$sql) 2"OpenDataSource" の設定中に例外が発生しました: 型 "string" の "SELECT * FROM `Sheet1$`" 値を型 "Object" に変換できません。 3発生場所 行:1 文字:1 4+ $Doc.MailMerge.OpenDataSource($DP,$null,$null,$null,$null,$null,$null ... 5+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 6 + CategoryInfo : NotSpecified: (:) [], MethodException 7 + FullyQualifiedErrorId : RuntimeException
Powershell
1$Doc.MailMerge.OpenDataSource($DP) 2サーバーによって例外が返されました。 (HRESULT からの例外:0x80010105 (RPC_E_SERVERFAULT)) 3発生場所 行:1 文字:1 4+ $Doc.MailMerge.OpenDataSource($DP) 5+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 6 + CategoryInfo : OperationStopped: (:) [], COMException 7 + FullyQualifiedErrorId : System.Runtime.InteropServices.COMException
というエラーがそれぞれ出まして、メソッドを上手く実行できなくなりました。
状況的には
https://stackoverflow.com/questions/28123065/call-mailmerge-opendatasource-set-connection
のサイトと同じような状況です。
ただこのサイトでは質問者が「Connection」の引数に渡していますが、自分のこのコードはこのサイトの回答者と同じように「SQLStatement」の部分に引数を渡しているのですが、失敗しています。
次の2つのサイトも調べているのですが、よくわかりません。
https://docs.microsoft.com/ja-jp/office/vba/api/word.mailmerge.opendatasource
https://docs.microsoft.com/en-us/dotnet/api/microsoft.office.interop.word.mailmerge.opendatasource?view=word-pia
ちなみに$nullの部分は$mに置き換えているサイトも一応あるみたいです。
このOpenDataSourceを上手く実行する方法がありますでしょうか?
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。