ここから本文です

別のExcelではないアプリから生成したExcel Workbookを参照したいです。 あるシ...

sta********さん

2019/7/1712:21:25

別のExcelではないアプリから生成したExcel Workbookを参照したいです。

あるシステムでログの一覧をExcelとして生成することができます。

ただ、まだ未保存のWorkbookなのでタイトルバーには例えば「book1 - Excel」と表示されています。

そこで、「Set wb = Workbooks("book1 - Excel")」としてもエラーになります。

WindowsAPIを使って該当のウィンドウのハンドルは取得することはできました。

未保存のWorkbookはWorkbookオブジェクトに指定することはできないんでしょうか?

あるはハンドル番号からWorkbookオブジェクトに指定する方法はありますでしょうか?

よろしくご教授の程お願い申し上げます。

閲覧数:
54
回答数:
3

違反報告

ベストアンサーに選ばれた回答

khh********さん

2019/7/2015:22:37

既存の外部のウィンドウアプリをオブジェクトとして取得するには、GetObject 関数を使います。
GetObject 関数の第1引数はファイルパスですが、未保存なので省略してカンマだけを記述します。第2引数は ProgID (CLSIDに関連付けられた識別子) を文字列として指定します。ターゲットとするアプリが Excel の場合、"Excel.Application" となります。
GetObject 関数が実行された時、Excel ウィンドウが見つからなかった場合はエラーになります。
GetObject 関数 - Microsoft Docs
https://docs.microsoft.com/ja-jp/office/vba/language/reference/user...
https://docs.microsoft.com/ja-jp/previous-versions/windows/scriptin...

目的のウィンドウタイトルを取得したい場合には、WindowsAPI の利用も良い方法と思います。動作確認済みサンプルを載せておきます。

' ------------- Excel VBA ----------------
Option Explicit

Sub Sample()

'既存の Excel オブジェクトを取得
Dim Excel As Object
Set Excel = GetObject(, "Excel.Application")

'WorkBook オブジェクトを取得
Dim WB As Object
Set WB = Excel.Workbooks("Book1")
MsgBox WB.Name

'WorkSheet オブジェクトを取得
Dim Sheet As Object
Set Sheet = WB.Worksheets("Sheet1")
MsgBox Sheet.Name

'A1セルの内容を表示します。
MsgBox Sheet.Range("A1").Value

Set Sheet = Nothing
Set WB = Nothing
Set Excel = Nothing

End Sub
' ----------------ここまで----------------------

' ------------- WSH VBScript ----------------
Option Explicit

Call Sample

Sub Sample()

'既存の Excel オブジェクトを取得
Dim Excel
Set Excel = GetObject(, "Excel.Application")

'WorkBook オブジェクトを取得
Dim WB
Set WB = Excel.Workbooks("Book1")
MsgBox WB.Name

'WorkSheet オブジェクトを取得
Dim Sheet
Set Sheet = WB.Worksheets("Sheet1")
MsgBox Sheet.Name

'A1セルの内容を表示します。
MsgBox Sheet.Range("A1").Value

Set Sheet = Nothing
Set WB = Nothing
Set Excel = Nothing

End Sub
' ----------------ここまで----------------------

  • 質問者

    sta********さん

    2019/7/2108:46:00

    ご回答ありがとうございます。

    google先生への質問の仕方が悪く、GetObjectは気がつきませんでした。そうですよね、オブジェクトを拾えばいいんですもんね。目から鱗です。

    月曜日に会社で試してみて結果報告させていただきます。

    なんとかなりそうです。ありがとうございます。

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

この回答は投票によってベストアンサーに選ばれました!

ベストアンサー以外の回答

1〜2件/2件中

並び替え:回答日時の
新しい順
|古い順

プロフィール画像

カテゴリマスター

tok********さん

2019/7/2210:43:23

アクティブにした後に、
Set wb = ActiveWorkbook
でいいのでは。

プロフィール画像

カテゴリマスター

tra********さん

2019/7/2114:21:51

>「Set wb = Workbooks("book1 - Excel")」としてもエラーになります。
Set wb = Workbooks("book1")
と書けば、オブジェクトにできませんか?

あわせて知りたい

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる