• ベストアンサー

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

  • maaaa
  • お礼率91% (330/362)

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答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では出てこないはずです。

maaaa
質問者

お礼

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

その他の回答 (2)

  • Dxak
  • ベストアンサー率34% (510/1465)
回答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によって挙動が違うようで、どれを使うかはよく判りません^^;

maaaa
質問者

お礼

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

  • taka0028
  • ベストアンサー率33% (19/57)
回答No.1

名称が知りたいってことでいいですか? ブック名が知りたいのであれば ActiveWorkbook.Name で現在アクティブなブックが分かります

maaaa
質問者

お礼

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

関連するQ&A

  • ACCESSのVBで、エクセルファイルの最終行を取得

    題名の通り ファイルの最終行を知りたいのです ざっと エクセルファイルをオープンするは下記のように すると思いますが その後、最終行を取得するのに、どうするのか 教えてください ーーーーーーーーー------------ Set Xls = GetObject("エクセルのファイル") Xls.Application.Windows(1).Visible = True Xls.Application.worksheets("Sheet1").Activate

  • Worksheets("Sheet1").ActivateのActivateの反対語は

    ACCESSのVBAからの操作です ----------------------------------------------- 略 Set Xls = GetObject(myFile2) Xls.Application.Windows(1).Visible = True Xls.Application.worksheets("Sheet1").Activate<--- ------------------------------------------------ 上記でActivate、の反対にしたいとき、何ですか 最後のポイント↓を入れると ("Sheet1").<--- 選択値が出てくる場合がありますが(この場合ではない) この場合選択値がでないので、 よろしくお願いします

  • エクセルの「ウィンドウ→表示しない」について

    エクセルを開いていて メニューバーのウィンドウ→表示しなし とするとSheet全体が見えなくなります また ウィンドウ→再表示、とすると 見えるようになります さて、 これをACCESSのVBで操作すると どの命令になるのでしょうか 参考までに ACCESSからエクセルを参照するときは ---------------------------------------- Set Xls = GetObject(myFile2) Xls.Application.Windows(1).Visible = True Xls.Application.worksheets("Sheet1").Activate ---------------------------------------- こんな風にしますが 終わり方がまずいために 質問にあるように、表示されなくなります 余計なことを書きましたが 質問点は画面を表示するVBAコードは?、です

  • 「ほかのデータソースへのリンクが含まれています。」→VBで操作

    Excelを開いた時に、下記の画面が出ます -------------------------------------------------- このブックには、ほかのデータソースへのリンクが含まれています。 ・リンクを更新すると、Excelは更新のデータを取り込もうとします。 ・リンクを更新しないと、以前の情報が利用されます。 □更新する、□更新しない、□ヘルプ -------------------------------------------------- このファイルをACCESSのVBで操作、つまり Set Xls = GetObject(myFile) Xls.Application.windows(1).Visible = True Xls.Application.Worksheets("Sheet1").Activate と(Open)して、該当Cellを読もう、としています。 この時、上記のメッセージが出るのですが □更新しない、にVBで答えるには、どうするんですか? よろしくお願いします。

  • AccessVBAから、Excelシート内の列の書式設定がしたい!!

    とうとう朝になってしまいました。 もう丸2日間も悩んでいます。 どなたか解決方法をご存知の方、よろしくお願いいたします。 AccessVBA内のモジュールからExcelファイルを開いて、そこへデータを出力するという処理は動きます。 そこで、出力する前に、Excelのセルの書式設定を列毎にしようとしていますが、どうしても上手くいきません。 下記のような感じでは、使えないのでしょうか? Set xls = GetObject("c:AAA\TEST.xls") xls.Application.Windows(1).Visible = True xls.Application.worksheets("sheet1").Activate xls.Application.worksheets("sheet1").RANGE("A:A").Selection.NumberFormatLocal = "\#,##0;\-#,##0" なにか良い方法がありましたら教えてください!! よろしくお願い致します。

  • ACCESSのVBAにてExcelのシートをコピーしたい

    入庫.xlsに現在、"原紙"というシートがあります。 入庫.xlsには、"原紙"と入庫のあった日のシートがあるようにしたいのです。 今日、入庫があれば、入庫.xlsには "原紙"と"20"のシートが存在するようにしたいのです。 AccessのVBAにて1文でシートのコピーってできないでしょうか? Dim oApp As Object Dim StWk1 As String Dim SHizk As String Dim Hizk As Integer Hizk = DatePart("d", Me![入庫日付]) SHizk = CStr(Hizk) StWk1 = "c:入庫.xls" Set Xls = GetObject(StWk1) Xls.Application.Windows(1).Visible = True Xls.Application.worksheets("原紙").Copy After:=Xls.Application.worksheets(SHizk) Xls.Application.worksheets(SHizk).Activate 上記のように作成してみたのですが、実行すると、 Xls.Application.worksheets("原紙").Copy After:=Xls.Application.worksheets(SHizk) のところで、エラーになります。 実行エラー'9': インデックスが有効範囲にありません。 のメッセージが表示されます。 教えてください。

  • VBでエクセルのセルのバックカラーをつけるには?

    お世話になります 表題のように、VBを実行して、エケセルのあるセルに 色(赤)をつけたいのですが どうしたらいいか、アプローチを教えてください ちなみに下記のようなVBは実行して からくりが理解でしました ------------------------------------------ Function Excel_SelectSel_Export1() Dim Xls As Object Set Xls = GetObject("c:\vba\実践VBA.xls") Xls.Application.Windows(1).Visible = True 'ワークシートをアクティブにする Xls.Application.worksheets("sheet1").Activate 'エクスポート先セルをRow(行)とColumn(列)の形式で指定する Xls.Application.Goto "r3c2" 'セルに値をエクスポートする Xls.Application.activecell.Value = "★彡☆彡" Xls.Application.Goto "r4c2" Xls.Application.activecell.Value = "☆彡★彡" Xls.Application.Quit 'Excelを閉じる Set Xls = Nothing Debug.Print "Completed!!" End Function

  • VBAで既に開いている別アプリケーションのオブジェクトを得る

     VBAで別のアプリケーションにアクセスするには、CreateObject関数を使ってアプリケーションのオブジェクトを作るようにすると思います。例えば、ワード文書にアクセスするなら次の構文になると思います。   Set appWord = CreateObject("Word.Application")   appWord.Visible = True  しかしこれだと新しいワード文書を作ったり、既存のワードファイルを開いて扱うことしかできません。GetObject関数を用いても同様のようです。既に別ウィンドウで開いているワード文書があって、そこへアクセスするにはどうしたらよいのでしょうか。  また、同じアプリで複数のファイルを開いている場合には、どうやって目的のファイルへのオブジェクトを得るのでしょうか。(ファイル名などを参照して判断?)

  • AccessからExcelのVBAを動かしたい

    2002です。 Excel_A.xlsからExcel_B.xlsのFromAccessプロシージャを実行する場合、 Application.Run "'" & ActiveWorkbook.Path & "\Excel_B.xls'!FromAccess" でいけたのですが、、、 Access_A.mdbから次のようにやると Application.Run "'" & CurrentProject.Path & "\Excel_B.xls'!FromAccess" エラーになります。 それで、次のようにやってみたら動いたのですが、FromAccessが一気に終了して しまい、デバッグできません。 Dim myExcel As Object Set myExcel = CreateObject("Excel.Application") Set myExcel = GetObject(CurrentProject.Path & "\Excel_B.xls", "Excel.Sheet") myExcel.Application.Visible = True myExcel.Application.UserControl = True myExcel.windows(1).Visible = True myExcel.Application.Run "FromAccess" デバッグしながら、AccessからExcelのプロシージャを実行するにはどうしたらいいのでしょうか?

  • ACCESSからexcelを操作

    accessのVBからEXCELのデータ編集を行う際、 最後エクセルを開放しているつもりなのですが、できていないようです。 ※タスクマネージャーにエクセルのタスクが残っており、 該当のファイルを開くと白くなっている。閉じて再度開くと正常動作する。 いくつかの帳票がありますが、 現象が起こるものと起こらないものがあります。 試しに Xls_app.ScreenUpdating = Trueにしてみるとタスクには残っているが 問題なく開けます。 Xls_app.ScreenUpdating = Falseだとタスクにも残るし、ファイルを開くと白くなっているような感じです。 しかし発生原因がわからず、再発するような気もするので根本原因を 突き止めたいです。 Excel起動時 ---------------- Set Xls_app = CreateObject("Excel.Application") Set Xls_book = Xls_app.Workbooks.Open(STR_out_file) Set Xls_sheet = Xls_book.Worksheets(STR_sheet1) Set Xls_sheet2 = Xls_book.Worksheets(STR_sheet2) 'DEBUG Xls_app.Visible = False Xls_app.ScreenUpdating = False Xls_app.UserControl = True ' Xls_app.Visible = True ' Xls_app.ScreenUpdating = True Private Sub Excel終了()----------------------- Xls_book.Close (True) Xls_app.Quit Set Xls_sheet = Nothing Set Xls_sheet2 = Nothing Set Xls_book = Nothing Set Xls_app = Nothing End Sub

専門家に質問してみよう