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

投稿時間:2003/10/07(Tue) 14:11
投稿者名:でっち
Eメール:
URL :
タイトル:
Excelの操作
はじめまして。Excelの操作で質問があります。

ここのホームページを参考にさせてもらって、Excelを立ち上げたのですが
Excelを立ち上げたフォームモジュールでxlApp.Quitを実行すると正常に
終了するのですが、別のフォームでxlApp.Quitを実行しても終了できません。
どうしたら閉じれるのでしょうか?
xlAppはグローバル宣言をしています。

すみませんが、教えてください。よろしくおねがいします。

投稿時間:2003/10/07(Tue) 15:44
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re: Excelの操作
どこかで Set xlApp = Nothing を実行していませんか?

事象を再現できるコードを投稿して下さい。

投稿時間:2003/10/07(Tue) 16:47
投稿者名:でっち
Eメール:
URL :
タイトル:
Re^2: Excelの操作
> 事象を再現できるコードを投稿して下さい。

コードをのせます。

'標準モジュール-------------------------------
Global Fso As Object
Global xlApp As Excel.Application
Global xlBook As Excel.Workbook
Global xlSheet As Excel.Worksheet

Public Function Form_Init()
    Set Fso = CreateObject("Scripting.FileSystemObject")
    If Fso.FileExists("C:\MCR.csv") = True Then
        Set xlApp = CreateObject("Excel.Application")
        Set xlBook = xlApp.Workbooks.Open("C:\MCR.csv", ReadOnly:=True)
        Set xlSheet = xlBook.Worksheets(1)
    End If
        
End Function

'フォームモジュール
'form1---------------------------------------------
Private Sub Command1_Click()
    Form2.Show
    Unload Form1
    xlApp.Visible = True
'    xlApp.Quit 'ここにコードをのせると普通に終了します。
End Sub

Private Sub Form_Load()
    Form_Init
End Sub

'form2---------------------------------------------------
Private Function Form1_unload(cancel As Integer)
    xlApp.Quit    'ここで実行してもExcelが終了しませんでした
End Function

'---------------------------------------------------------
こんな感じでつくってみたのですけれど、だめでした。
よろしくおねがいします。

投稿時間:2003/10/07(Tue) 17:12
投稿者名:LESIA
Eメール:
URL :
タイトル:
Re^3: Excelの操作
> 'form2---------------------------------------------------
> Private Function Form1_unload(cancel As Integer)
>     xlApp.Quit    'ここで実行してもExcelが終了しませんでした
> End Function

Form2にForm1_unloadというイベントはありませんよ(^^;
しかもFunctionになっているし。

Private Sub Form_Unload(Cancel As Integer)
    xlApp.Quit
End Sub
とするとうまくいくと思います。

投稿時間:2003/10/07(Tue) 18:00
投稿者名:でっち
Eメール:
URL :
タイトル:
解決しました
すみませんでした(赤面)。このコードで再現したと思ったら、
単純なミスでした。
実際なやんでいたのは、form2を下のようなコードにしたときでした。

'form2----------------------
Private Sub Command1_Click()
    Form1.Show
    Unload Form2
End Sub

Private Sub form_unload(cancel As Integer)
    xlApp.Quit
End Sub
'-----------------------------

ゆっくり追っていったら、form1をまたロードすることになるので、
2つエクセルを開いたことになってたみたいです。
(Visible=true にしてなかったから気づきませんでした。そっちを
閉じてたみたいです。)
これも、このページにある「エクセルが起動されてているかを調べる」
を参考にするとなんとかなりそうです。難しそうですけど。。

お騒がせしました。ありがとうございました。

投稿時間:2003/10/07(Tue) 21:57
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re: 解決しました

>'フォームモジュール
>'form1---------------------------------------------
>Private Sub Command1_Click()
>    Form2.Show
>    Unload Form1
>    xlApp.Visible = True
>'    xlApp.Quit 'ここにコードをのせると普通に終了します。
>End Sub

>    Unload Form1

のところを
     Form1.Hide
に変更してみたらどうでしょう。