【お題】王手、そして

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か知る手立てが
わかればたすかります

A 回答 (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では出てこないはずです。
    • good
    • 0
この回答へのお礼

いつもありがとうございます
詳しく解説、ありましたが
無視しているわけではなく、理解できないでいます
そのうち追いつくようにがんばっています
ありがおうございました

お礼日時:2007/02/27 13:00

> 実は、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によって挙動が違うようで、どれを使うかはよく判りません^^;
    • good
    • 0
この回答へのお礼

回答、解説、ありがとうございました

お礼日時:2007/02/27 13:01

名称が知りたいってことでいいですか?



ブック名が知りたいのであれば
ActiveWorkbook.Name
で現在アクティブなブックが分かります
    • good
    • 0
この回答へのお礼

お答えありがとうございました
たすかりました
感謝です

お礼日時:2007/02/27 13:02

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報