[リストへもどる]
一括表示

投稿時間:2003/08/01(Fri) 22:11
投稿者名:KR
Eメール:
URL :
タイトル:
Excelファイルの起動確認
はじめまして、こんにちは。

当方、現在、VB実行ファイルと同じフォルダにあるExcelファイルをVBから起動して表示する
処理を行っています。
Excelファイルの二重起動を防ぐために、Excelのインスタンスを確認し、開いているExcelファイル
名を調べているのですが、VBで起動するファイル以外を先に手動で起動してしまうと、
先に起動したExcelファイル名は調べることができるのですが、肝心のVBで起動したExcelファイル名が
取得できません。
また別フォルダにある同名のExcelファイルの起動は許可をしたく思います。
何かよい方法はないでしょうか。

現在のソースは以下の通りです
------------------------------------------------
Dim This_xlApp As Excel.Application
Dim obj_wrk As Workbook

On Error Resume Next
    
    'Excelが起動中かを確認
    Set This_xlApp = GetObject(, "Excel.Application")

    If Err.Number Then
        'エラーが発生した(Excelが起動してない)場合は Err オブジェクトをクリアします
        Err.Clear
    Else
        'Excelはすでに起動中の場合
        '起動中のExcelファイルの名称とパスを確認します
       For Each obj_wrk In This_xlApp.Workbooks
            'ファイル名を比較して、一致した場合は対象のファイルが起動中と判断します
            If 起動確認したいファイル名 = obj_wrk.Path & "\" & obj_wrk.Name Then
                    Msgbox "すでに起動しています。"
                End If
        Next obj_wrk
    End If
-------------------------------------------------------
環境は    VB6.0
    OS/WinMe
    Excel/Excel2000 です。

APIの使用等、何でも構いませんので
どうかご教授の程、何卒宜しくお願いいたします。

投稿時間:2003/08/02(Sat) 14:18
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re: Excelファイルの起動確認
今、一つ意味が理解できないのですが?
> 先に起動したExcelファイル名は調べることができるのですが、肝心のVBで起動したExcelファイル名が
> 取得できません。

VBで起動したExcelファイル名が取得できません。 との事ですが、VBで起動したなら、その時に
ファイル名やパスは指定しているはずですから、取得できないはずがないのですが。

起動中かどうか知りたければ、そのファイルを同じ名前で変更して見て下さい。

投稿時間:2003/08/02(Sat) 18:20
投稿者名:KR
Eメール:
URL :
タイトル:
Re^2: Excelファイルの起動確認

花ちゃん様、お返事どうもありがとうございます。

分かりにくい文章で申し訳ありません。順をおって説明させて頂きます。
問題は以下の内容です。
(VBで起動するファイル名を"C:\XXXX.xls"とさせて頂きました。)

@:何か適当なExcelファイルを起動して、そのままにしておきます。

A:VBよりCreateObject関数とOpenメソッドを使用してExcelファイルを起動し表示します。
    (ソースはこんな感じです)
    Set This_xlApp = CreateObject("Excel.Application")
    This_xlApp.Workbooks Open "C:\XXXX.xls"

B:Aの処理終了時に SET This_xlApp = nothing でインスタンスを開放します。
C:一旦VBを終了します。@とAのExcelファイルは開いたままです。

D:再度VBを起動して、Excelファイル"C:\XXXX.xls"が起動するしているか、
起動している全てのExcelファイルに対してFor Each 〜 で確認します

    (ソースはこんな感じです)
    Set This_xlApp = GetObject(, "Excel.Application")
        
    For Each obj_wrk In This_xlApp.Workbooks
        If "C:\XXXX.xls" = obj_wrk.Path & "\" & obj_wrk.N
ame Then
            Msgbox "すでに起動しています。"
        End If
    Next obj_wrk

すると@で起動したファイルは For Each 〜の部分で取得できるのですが
手動で起動したExcelとVBで起動したExcelのインスタンスの違いからなのか、
VBで開いたAで開いたのファイルを取得せずにループを抜けてしまいます。
これを何とかしたいのです。

>起動中かどうか知りたければ、そのファイルを同じ名前で変更して見て下さい。

とは SaveAs で同じ名前でファイルを保存しなおすことでしょうか。

以上、稚拙な説明文ですが、よろしくお願い致します。

投稿時間:2003/08/02(Sat) 18:53
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re^3: Excelファイルの起動確認
> >起動中かどうか知りたければ、そのファイルを同じ名前で変更して見て下さい。
> とは SaveAs で同じ名前でファイルを保存しなおすことでしょうか。

ここで、Excel関係の質問をされるなら、Excel・Word関係 は見ておいて下さい!。

その中の、Microsoft Excel が既に起動されているかどうかを調べる の下の欄に
指定のファイルが使用中かどうかを調べる がありますので見て下さい。

投稿時間:2003/08/04(Mon) 10:26
投稿者名:KR
Eメール:
URL :
タイトル:
Re^4: Excelファイルの起動確認
花ちゃん様、お返事どうもありがとうございます。

> ここで、Excel関係の質問をされるなら、Excel・Word関係 は見ておいて下さい!。
>
> その中の、Microsoft Excel が既に起動されているかどうかを調べる の下の欄に
> 指定のファイルが使用中かどうかを調べる がありますので見て下さい。

ご指摘の通りでした。
自分の確認不足です。
どうもありがとうございました。