- ベストアンサー
EXCEL VBAでのWord操作
ExcelのVBAにて、Wordファイルに挿入されているExcel表を更新したいのですが、 どのように記述すればよりかわかりません。 具体的には以下のとおりとなります。 「在庫.xls」 のセル A1 「照合表.doc」に挿入されているExcel表には「在庫.xls」のセルA1を参照するように記述が 入っています。 「在庫.xls」にコマンドボタン「更新」を作成し、実行すると「照合表.doc」の値が更新されるように マクロを組みたいのですが、どなたか知恵を貸してください。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 > 「照合表.doc」に挿入されているExcel表... といっても表の挿入の仕方は色々あって、それぞれに対処が異なりますが、 Excel ワークシートを挿入しているものとしてお応えします。 念の為、 挿入済のシートを改めて張り直すことが可能な場合は、 以下のリンク先を参考になさってみてください。 VBAに頼らずとも、(自動的に更新、というより) リアルタイムなリンクが構築される方法です。 http://www.juno-e.com/excel/waza/wazaxp19.htm 挿入済のシートを手動で更新する代りにVBAで対処する必要があるという場合は、 こんな感じになるかと思います。 たぶん、こういうことかな、というものを、とりあえず挙げてみます。 Sub Re8454752a() Dim wdApp As Object ' Word.Application Dim wdDoc As Object ' Word.Document Dim wdInLineShape As Object ' Word.InlineShape Dim sDocName As String ' ' ' 照合表.docのファイルパス(必要に応じてフォルダパスを含めて)指定 ' sDocName = "照合表.doc" sDocName = ThisWorkbook.Path & "\" & "照合表.doc" ' ' ↑ 運用に合わせた適切な指定をしないとエラーになります。 On Error Resume Next ' ' (開いている?かどうか判らない)Wordアプリケーションを取得(してみる) Set wdApp = GetObject(, "Word.Application") On Error GoTo 0 If wdApp Is Nothing Then ' ' = Wordが開いていない場合 = MsgBox "照合表.docをWordで開いてから実行し直してください。" Exit Sub End If On Error Resume Next ' ' (開いている?かどうか判らない)照合表.docを取得(してみる) Set wdDoc = wdApp.Documents(sDocName) On Error GoTo 0 If wdDoc Is Nothing Then ' ' = Wordは開いているが、照合表.docが開いていない場合 = MsgBox "照合表.docを開いてから実行し直してください。" Else ' ' = 照合表.docは開いているが、在庫.xlsの更新データが反映されていない(かも知れない)場合 = ' ' 照合表.doc内のすべてのインラインシェイプを総当たりで For Each wdInLineShape In wdDoc.InlineShapes ' ' 各インラインシェイプのOLEオブジェクトについて、Excelシートならば、順次編集状態に If wdInLineShape.OLEFormat.progID Like "Excel.Sheet*" Then wdInLineShape.OLEFormat.Activate Next MsgBox "在庫.xlsの最新データを、照合表.docに適用しました。" ' ' すみません。Excelシートの編集状態を解除するするスマートな方法が見つけられませんでした。 End If Set wdDoc = Nothing: Set wdApp = Nothing End Sub
お礼
ありがとうございます。 おかげで思っていたことができました! 大変助かりました!!