こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

EXCEL VBAを利用して別ウィンドウでブックを起動する

エクセルファイル(A.xls)内のセル($A$1)をダブルクリックすることで、エクセルファイル(B.xls)のワークシート(1)を開くVBAを作成しています。


ここまでは出来たのですが、1つ問題があります。
上記VBAでは、A.xls と B.xls が1つのエクセルファイルとして開かれてしまいます。(表現が誤っていれば申し訳ないです)
どういうことかと言いますと、A.xlsもしくは、B.xlsのどちらかを閉じると両方閉じてしまいます。また、A.xlsとB.xlsを画面上に並べて比較することができず、画面下のタブを切り替えてそれぞれのファイルを見なければなりません。


例えば、スタート→プログラム→MicroSoftOffice→EXCELを2回行えば、エクセルファイルが別ウィンドウでそれぞれ独立して立ち上がります。要は、A.xlsのセル($A$1)をダブルクリックした時にB.xlsはこのような状態で立ち上がってきて欲しいのです。


以下、作成途中のVBAコードの一部です。A.xlsのセル($A$1)をダブルクリックすると、独立したエクセルを開くことはできました。
Dim OP As Double
  OP = Shell("EXCEL.EXE", vbMaximizedFocus)
しかし、B.xlsのワークシート(1)はA.xlsと1つのファイルとして開かれてしまいます。
(例:A.xlsのセル($A$1)をダブルクリックすると、B.xlsと新規EXCELファイルの全部で3つの状態になります。)

目標は、A.xlsのセル($A$1)をダブルクリックすれば、B.xlsのワークシート(1)が開く。
A.xlsのセル($B$2)をダブルクリックすれば、B.xlsのワークシート(2)が開くです。
長くなりましたが、どうかご助言よろしくお願い致します。


【作成途中VBAコード】
Private Sub Worksheet_BeforeDoubleClick(ByVal target As Range, Cancel As Boolean)

Dim OP As Double
  
Dim Bfile As String
Bfile = target.Address

Select Case Bfile

Case "$A$1"
OP = Shell("EXCEL.EXE", vbMaximizedFocus)
Workbooks.Open ("C:\B.xls")
Worksheets("ワークシート(1)").Activate
Case Else
End Select
End Sub

投稿日時 - 2009-12-06 12:42:15

QNo.5502114

困ってます

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

>A.xlsもしくは、B.xlsのどちらかを閉じると両方閉じてしまいます。

どんなコードで閉じているのでしょうか?
通常は個別に閉じることが出来ます。

>A.xlsとB.xlsを画面上に並べて比較することができず

[ウィンドウ]-[整列] で並べて表示する事ができますよ。
コードは記録マクロでも取得できます。


---------------------------------------------------------------
CreateObject()を使えば、いくつでも別プロセスでエクセルを起動する事が出来ます。

VBからエクセルを操作する
http://hanatyan.sakura.ne.jp/vbhlp/excel1.htm
--------------------------------------------------------------

>目標は、A.xlsのセル($A$1)をダブルクリックすれば、B.xlsのワークシート(1)が開く。

A/Bのブックにコードを記入してくださいね。
下記を元に、希望のシートが開くようにコードを追加してみて下さい。


Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim c As Workbook
If Target.Address = "$A$1" Then
If Workbooks.Count >= 1 Then
For Each c In Workbooks
If c.Name = "B.xls" Then
MsgBox "ブックは開いています。"
End
End If
Next
End If
End If
Workbooks.Open "B.xls"
Windows.Arrange ArrangeStyle:=xlTiled
End Sub

投稿日時 - 2009-12-06 15:25:26

補足

業務で使用できたらと思い質問させていただきました。
もう少し実現したいことを詳細に書きたいと思います。


A.xlsのセル($A$1)は、1号棟1階と入力されています。
A.xlsのセル($B$2)は、2号棟2階と入力されています。


B.xlsのワークシート(1)には、1号棟1階の地図が貼っています。
B.xlsのワークシート(2)には、2号棟2階の地図が貼っています。


A.xlsを開いている状態で、1号棟1階の地図が見たくなったとします。A.xlsのセル($A$1)をダブルクリックするとB.xlsのワークシート(1)が独立した別ウィンドウで開きます。お互いのファイルが独立しているので並べて両方見ることができます。
次に、この2つのエクセルファイルが開いている状態で、再びA.xlsのセル($B$2)をダブルクリックすると、今開いているB.xlsのワークシート(2)がアクティブになるということを実現したいのです。


A.xlsのセルをダブルクリックした時のアクションに2つの意味を持たしたいのです。1つは、B.xlsが開いてなければB.xlsを開いて目的のワークシートをアクティブにする。もう1つは、B.xlsが開いていれば、その中の目的のワークシートをアクティブにする。です。


ややこしいことを長々と書きましたが、もう少し自身でも考えたいと思います。ご協力お願いします。

投稿日時 - 2009-12-06 18:27:46

お礼

さっそくのご回答ありがとうございました。
わたくしの質問の書き方が悪かったので、少し違うご意見でした。
でも、知らなかったコードなどがあり、勉強になりました。
ありがとうございます。

投稿日時 - 2009-12-06 18:26:43

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問