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か知る手立てが
わかればたすかります
No.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では出てこないはずです。
いつもありがとうございます
詳しく解説、ありましたが
無視しているわけではなく、理解できないでいます
そのうち追いつくようにがんばっています
ありがおうございました
No.2
- 回答日時:
> 実は、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によって挙動が違うようで、どれを使うかはよく判りません^^;
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBA 同じ名前のオブジェクトを...
-
パワーポイントのVBAでテキスト...
-
Excelで =EMBED("Acrobat Docu...
-
Object型からDouble型へのキャスト
-
VBAのWindowオブジェクトとWork...
-
3Dの背景とはどういう作り方を...
-
ビジュアルC++でボタンの有...
-
error C2712: オブジェクト ア...
-
ワイルドカード<?>と型パラメー...
-
エクリプス コンテンツアシスト...
-
C#でフォームのオブジェクト名...
-
LISTBOXの内容が更新されま...
-
オブジェクトを枠線に合わせる...
-
エクセルでオブジェクト内の文...
-
CException についてVC6とVC200...
-
Accessでオブジェクトの送信で...
-
Resetオブジェクトについて
-
JavaScriptからServletに渡した...
-
戻り値がクラスオブジェクト
-
VBSでのステートメントの末尾が...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
パワーポイントのVBAでテキスト...
-
Excelで =EMBED("Acrobat Docu...
-
VBA 同じ名前のオブジェクトを...
-
EXCEL VBAにて動的にCheckBOXを...
-
VBAのWindowオブジェクトとWork...
-
C#でフォームのオブジェクト名...
-
ワイルドカード<?>と型パラメー...
-
COMコンポーネントって何?
-
ビジュアルC++でボタンの有...
-
Object型からDouble型へのキャスト
-
error C2712: オブジェクト ア...
-
newは明示的にした方が良いのか?
-
オブジェクトレベルとメタレベル
-
0 == False はいいけど
-
ASP.net 教えてください!!(...
-
LISTBOXの内容が更新されま...
-
戻り値がクラスオブジェクト
-
時間帯判定をする。
-
Vbで通常使用するプリンターを...
-
ワードで画像をドロップすると...
おすすめ情報