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
> Application.WindowState = xlMaximized
Application の代わりに、xlApp 変数を使ってください。
ただし現在の xlApp 変数は、Sub excel_start() 内で宣言されているため、
この変数をモジュール レベル変数にする必要があります。
> '★これがあるとインスタンスに残る感じ
そもそも VB6 に、『Application』という名前のオブジェクトはありません。
そのため、Application という変数が無いと、この記述はエラーになります。
しかしながら、Excel を参照設定していた場合、Applicatoin が
グローバル オブジェクトとして利用可能となるため、変数宣言無しで
Application を利用できてしまいます(参照設定無しならエラーになる)。
# F2 でオブジェクトブラウザを開き、一覧から Excel ライブラリを選択して、
# クラス一覧から「<グローバル>」なメンバを確認してみてください。
そして、これらグローバル オブジェクトをうっかり利用してしまうと、
Excel オブジェクトを解放できなくなったり、2回目以降の実行時に
問題を発生させるなどの問題を引き起こします。
自分で作ったオブジェクト(New/CreateObject)から辿ったオブジェクトのみを
利用するようにすれば、この問題は発生しなくなります。
魔界の仮面弁士さん素晴らしいです。
えらいわけがわからない事が原因まですっかりお見通しとは
ぶったまげました。おかげさまでエラーも無くなり、
一安心です。大変有り難う御座いました。
ありがとうございました。本件お陰様で解決です。
編集 削除