Excelがインスタンスに残る

解決


よっしー  2009-08-06 12:37:25  No: 142335  IP: 192.*.*.*

Excelを起動して、マクロを実行する物ですが、
    Application.WindowState = xlMaximized '★これがあるとインスタンスに残る感じ
この部分があると、インスタンスに残ります。(かなりの確率で)
インスタンスに残った後に、タスクマネージャからExcelを終了して
再度Private Sub Command1_Click()を実行すると、
    Application.WindowState = xlMaximizedでエラーして
【リモートサーバーが無いか、使用出来る状態ではありません。】と表示される。
Excel本体をmax表示したいのですが、間違っているでしょうか?

また、インスタンスに残ったExcelは、どうにか自動で消す事は可能でしょうか?


'Excel本体が開いていない時使用
Private Sub Command1_Click()
    On Error GoTo 0
    Call excel_start
    Application.WindowState = xlMaximized '★これがあるとインスタンスに残る感じ
    Call Excel_exe1("JM_Tool.xls", "auto_open")
End Sub

'Excel本体が開いている時使用
Private Sub Command2_Click()
    On Error GoTo 0
    Call Excel_exe1("JM_Tool.xls", "auto_open")
End Sub

'ファイルを開いて、マクロ実行
Public Sub excel_start()
     Dim xlApp As Excel.Application
     On Error GoTo Er1
     Set xlApp = CreateObject("Excel.Application")
     xlApp.Visible = True
     ' 指定したExcelファイルを開く
     Set xlbook = xlApp.Workbooks.Open(XL_SUP_GET & "JM_Tool.xls")
     ' オブジェクトを解放
     Set xlApp = Nothing
     Exit Sub
Er1:
    MsgBox "Excel立ち上げエラー!"
    ' オブジェクトを解放
    Set xlApp = Nothing
End Sub

'既に開いているブックに対してマクロ実行
Public Sub Excel_exe1(ByVal file_n As String, ByVal exe_mn As String)
    On Error GoTo Er1
    Set exl = GetObject(, "Excel.Application")
    With exl
        .Windows(file_n).Activate
        .Run (exe_mn)
    End With
    Exit Sub
Er1:
End Sub

Public Function XL_SUP_GET()
    Dim TxtLine   As String
    Dim MyString As String
    Dim lngFileNo As Long
    Dim TxtFile As String
    TxtFile = "C:\sp_tool\other\XLSTARTPath.txt"
    lngFileNo = FreeFile
    Open TxtFile For Input As #lngFileNo
        Line Input #1, XL_SUP_GET
    Close #lngFileNo
End Function

編集 削除
魔界の仮面弁士  2009-08-06 13:02:47  No: 142336  IP: 192.*.*.*

> Application.WindowState = xlMaximized

Application の代わりに、xlApp 変数を使ってください。
ただし現在の xlApp 変数は、Sub excel_start() 内で宣言されているため、
この変数をモジュール レベル変数にする必要があります。


> '★これがあるとインスタンスに残る感じ
そもそも VB6 に、『Application』という名前のオブジェクトはありません。
そのため、Application という変数が無いと、この記述はエラーになります。

しかしながら、Excel を参照設定していた場合、Applicatoin が
グローバル オブジェクトとして利用可能となるため、変数宣言無しで
Application を利用できてしまいます(参照設定無しならエラーになる)。

# F2 でオブジェクトブラウザを開き、一覧から Excel ライブラリを選択して、
# クラス一覧から「<グローバル>」なメンバを確認してみてください。

そして、これらグローバル オブジェクトをうっかり利用してしまうと、
Excel オブジェクトを解放できなくなったり、2回目以降の実行時に
問題を発生させるなどの問題を引き起こします。

自分で作ったオブジェクト(New/CreateObject)から辿ったオブジェクトのみを
利用するようにすれば、この問題は発生しなくなります。

編集 削除
よっしー  2009-08-06 15:32:37  No: 142337  IP: 192.*.*.*

魔界の仮面弁士さん素晴らしいです。
えらいわけがわからない事が原因まですっかりお見通しとは
ぶったまげました。おかげさまでエラーも無くなり、
一安心です。大変有り難う御座いました。

編集 削除
よっしー  2009-08-06 22:30:33  No: 142338  IP: 192.*.*.*

ありがとうございました。本件お陰様で解決です。

編集 削除