質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

PowerShell

Windows PowerShellはコマンドラインインターフェースであり、システム管理を含むWindowsタスク自動化のためのスクリプト言語です。

Q&A

解決済

1回答

2038閲覧

PowershellのComオブジェクトの特定のメソッドに引数を渡して実行したい

warabimochi

総合スコア14

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

PowerShell

Windows PowerShellはコマンドラインインターフェースであり、システム管理を含むWindowsタスク自動化のためのスクリプト言語です。

0グッド

0クリップ

投稿2020/09/20 05:10

元々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を上手く実行する方法がありますでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

VBAでコード検証中のところWord自体が強制終了していたためOfficeの修復をかけたところ

powershell

1#1 2$Doc.MailMerge.OpenDataSource($DP) 3#2 4$Doc.MailMerge.OpenDataSource($DP,$m,$m,$m,$m,$m,$m,$m,$m,$m,$m,$m,$sql,$m,$m,[object]1) 5#3 6$Doc.MailMerge.OpenDataSource($DP,$m,$m,$m,$m,$m,$m,$m,$m,$m,$m,$m,$sql)

#1で出ていたエラーが出なくなり、シートの選択表示がされたため,
#3が可能と期待通りの動きとなりました。
相変わらず#2がなぜ動かないのかが知りたいのですが、今は使用には問題ないようです。

投稿2020/09/25 04:53

warabimochi

総合スコア14

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問