- ベストアンサー
2つのエクセルファイルのオブジェクトどちらがActiveか知る方法
ACCESSのVBAにおいてです Set Xls = GetObject("File1.xls") Set Xls2 = GetObject("File2.xls") Xls.Application.Windows(1).Visible = True Xls2.Application.Windows(1).Visible = True Xls.Application.worksheets("Sheet1").Activate こんな風にして行って、 File1.xls File2.xls のCellを参照しています この場合どちらのSheet1、がActive、なのか知るのに どんな命令語を使うのですか よろしくおねがいします 実は、Xls、Xls2、のオブジェクト名では File1.xls、File2.xls、の区分ができなくて困っています しかし、今の質問はどちらがActiveか知る手立てが わかればたすかります
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 >File1.xls、File2.xls、の区分ができなくて困っています それは、自分で、取り出したオブジェクトではありえないです。すでに立ち上がっているオブジェクトが分からないなら、話は理解できますが、それは、できないとは言わないけれど、きちんとした技術がないとできないです。 単に、GetObject で、Workbooks オブジェクトを取っているから、Activate が必要なのであって、Excel.Application から取る場合は、本来、Activate は必要ないと違いますか? 前回の回答では、せっかく、サンプル・コードまで書いてあげたのですが、私の書いた内容は理解されなかったのか無視してしまったようで、とても残念だったなって思います。Activate で、そのオブジェクトを取得するわけではありません。また、自然に、Activate されるわけではありません。 それは、オブジェクトの親がどうこうよりも、今回は、論理として、考え方が逆になっています。 簡単に言えば、「右を選んだら、それは、右だ」ということです。オブジェクトの本体の中で選んだものが、それが、今の自分の選択肢です。Excel VBAのオブジェクトは、それぞれの癖はありますが、どんなオブジェクトでも、その親のオブジェクトから確保してある限りは、どちらであるか迷うことはないのです。 'Sample Sub SetObjects() Dim sh1_A As Worksheet 'シートオブジェクト Dim sh1_B As Worksheet ' '' Set sh1_A = Workbooks("MyBook1.xls").Worksheets("Sheet1") Set sh1_B = Workbooks("MyBook2.xls").Worksheets("Sheet1") MsgBox sh1_A.Range("A1").Value & " : " & sh1_B.Range("A1").Value Set sh1_A = Nothing: Set sh1_B = Nothing End Sub このサンプルの場合、どちらが、Activate などということはまったく関係がないのです。オートメーション・オブジェクトでも、それは、オブジェクトの中に棲み分けができています。 GetObject で、ブック自体を取得すると、前回の例ではっきりしたのは、Activate が必要なのでしょう。それは私も認めるけれど、基本的には、Excel.Application を親として、Workbooks オブジェクトの指定で切り替えるのであって、Activate で切り替えるわけではありません。今までのコーディングからしても、Process IDを取るようなテクニックを必要とするような内容は、通常のVBAでは出てこないはずです。
その他の回答 (2)
- Dxak
- ベストアンサー率34% (510/1465)
> 実は、Xls、Xls2、のオブジェクト名では > File1.xls、File2.xls、の区分ができなくて困っています > しかし、今の質問はどちらがActiveか知る手立てが > わかればたすかります えっと、アクティブがどちらか調べてどうしたいのでしょうか? > Set Xls = GetObject("File1.xls") > Set Xls2 = GetObject("File2.xls") で、取得したものは、Excel.ApplicationオブジェクトではなくExcel.Workbookオブジェクトになってます 親である、Excel.Applicationオブジェクトであるアクティブのブックを調べなくても、Xlsは、File1.xls、Xls2は、File2.xlsを操作するためにExcel.Workbookオブジェクトの取得してあります 親であるExcel.Applicationオブジェクトが、同一のものを使用しているか別のもを使用しているかは、Application.Hwndを調べて確認するしかないでしょうね^^; この辺のオブジェクト取得状況は、Windows側の設定によって変っていたりするので一概に同じもの、別のもの、既に起動していたもの、新たに起動させたものと、同じマクロでも、PCによって挙動が違うようで、どれを使うかはよく判りません^^;
お礼
回答、解説、ありがとうございました
- taka0028
- ベストアンサー率33% (19/57)
名称が知りたいってことでいいですか? ブック名が知りたいのであれば ActiveWorkbook.Name で現在アクティブなブックが分かります
お礼
お答えありがとうございました たすかりました 感謝です
お礼
いつもありがとうございます 詳しく解説、ありましたが 無視しているわけではなく、理解できないでいます そのうち追いつくようにがんばっています ありがおうございました