tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板 [ツリー表示へ]   [Home]
一括表示(VB6.0)
タイトルExcelが既に開いている時
記事No13925
投稿日: 2009/08/03(Mon) 15:27
投稿者そいと
Excelが既に開いている時に下の物を実行すると、
Excelが二つ開いてしまいます。現状開いているExcelで
ファイルを開きたいのですがどうすれば良いですか?

Private Sub Command2_Click()
    Set exl = CreateObject("Excel.Application")
    With exl
        .Application.Visible = True
        .Workbooks.Open ("C:\TEST.XLS")
    End With
End Sub

[ツリー表示へ]
タイトルRe: Excelが既に開いている時
記事No13926
投稿日: 2009/08/03(Mon) 16:47
投稿者魔界の仮面弁士
> Excelが既に開いている時に下の物を実行すると、
> Excelが二つ開いてしまいます。現状開いているExcelで
> ファイルを開きたいのですがどうすれば良いですか?

自分で生成したものであるならば、2 回目以降は CreateObject せず、
先の exl 変数を使い回せば良いとおもいます。


自分以外によって起動された Excel を利用したい、という意味であれば、
 Set exl = GetObject( , "Excel.Application")
のようにして、既に起動済みの Excel を捉えることができます。

ただし、起動済みの Excel が無い場合、この GetObject は失敗しますので、
その場合には On Error でエラー処理をして、CreateObject で
Excel を起動するようにしてみてください。


>     With exl
>         .Application.Visible = True
Application プロパティは、冗長なので使わないようにしましょう。
たとえば下記は、いずれも全く同じ意味を持ちます。
 exl.Visible = True
 exl.Application.Visible = True
 exl.Application.Application.Visible = True


>         .Workbooks.Open ("C:\TEST.XLS")
VB6 では、引数を取らないメソッドの呼び出しには括弧をつけてはいけません。

この場合には、
 .Workbooks.Open "C:\TEST.XLS"
と記述するのが正しいです。

もしも括弧をつけたいなら、
 Call .Workbooks.Open("C:\TEST.XLS")
あるいは
 Set book = .Workbooks.Open("C:\TEST.XLS")
という記述法を使わねばなりません。

現在、括弧をつけても動作していたのは、たまたま引数が一個だけだったため、
 Set book = .Workbooks.Open( ("C:\TEST.XLS") )
の意味で解釈されただけに過ぎません。

もしも引数が 2 個だった場合、
 .Workbooks.Open "C:\TEST.XLS", 1
は動作しますが、
 .Workbooks.Open("C:\TEST.XLS", 1)
だと、VB6 ではエラーになる事に注意してください。

[ツリー表示へ]
タイトルRe^2: Excelが既に開いている時
記事No13927
投稿日: 2009/08/03(Mon) 22:47
投稿者そいと
魔界の仮面弁士さん、ご回答ありがとうございます。
自分なりに整理して実行してみましたところ、やりたいことが
次の3パターンあります。NO.1はOKです。NO.2と3は下の様に
したいのですが、可能でしょうか?済みませんが宜しく
おねがいします。

’NO.1
'新しくブックを開いて、マクロを実行する物(Excelは既に開いている)
Private Sub Command1_Click()
    Set exl = GetObject(, "Excel.Application")
    With exl
        .Visible = True
        .Workbooks.Open "C:\TEST.XLS"
        .Run ("auto_open")
    End With
End Sub

’NO.2
’既にブックは開いており、マクロを実行する物(Excelは既に開いている)
Private Sub Command2_Click()
    Set exl = GetObject(, "Excel.Application")
    With exl
        .Windows("TEST2.XLS").Activate
        .Run ("macro2")
    End With
    Exit Sub
End Sub
’●Excelに強制的にフォーカスを写してマクロ実行したい。

’NO.3
’既にブックは開いているが、ブックが【表示しない】になっており、
 マクロを実行する物(Excelは既に開いている)
Private Sub Command3_Click()
    Set exl = GetObject(, "Excel.Application")
    With exl
        .Windows("TEST3.XLS").Activate '★
        .Run ("macro3")
    End With
    Exit Sub
End Sub
’●Excelに強制的にフォーカスを写してマクロ実行したい。
’● ★部でブックを指定したいが、これではブックが表示されてしまう。

[ツリー表示へ]