• ベストアンサー

EXCEL VBAでのWord操作

ExcelのVBAにて、Wordファイルに挿入されているExcel表を更新したいのですが、 どのように記述すればよりかわかりません。 具体的には以下のとおりとなります。 「在庫.xls」 のセル A1 「照合表.doc」に挿入されているExcel表には「在庫.xls」のセルA1を参照するように記述が 入っています。 「在庫.xls」にコマンドボタン「更新」を作成し、実行すると「照合表.doc」の値が更新されるように マクロを組みたいのですが、どなたか知恵を貸してください。

質問者が選んだベストアンサー

  • ベストアンサー
  • cj_mover
  • ベストアンサー率76% (292/381)
回答No.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

mukapoon
質問者

お礼

ありがとうございます。 おかげで思っていたことができました! 大変助かりました!!

関連するQ&A

専門家に質問してみよう