Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


2060 / 13645 ツリー ←次へ | 前へ→

【70221】エクセル本体の終了がうまくいかない たにやん 11/10/20(木) 10:40 質問[未読]
【70222】Re:エクセル本体の終了がうまくいかない UO3 11/10/20(木) 12:22 発言[未読]
【70226】Re:エクセル本体の終了がうまくいかない たにやん 11/10/20(木) 15:30 発言[未読]
【70227】Re:エクセル本体の終了がうまくいかない Abyss 11/10/20(木) 15:53 発言[未読]
【70228】Re:エクセル本体の終了がうまくいかない たにやん 11/10/20(木) 18:00 お礼[未読]
【70259】Re:エクセル本体の終了がうまくいかない sasa 11/10/24(月) 15:05 回答[未読]
【70264】Re:エクセル本体の終了がうまくいかない たにやん 11/10/24(月) 18:12 お礼[未読]

【70221】エクセル本体の終了がうまくいかない
質問  たにやん  - 11/10/20(木) 10:40 -

引用なし
パスワード
   vbaでエクセル本体を終了させたいのですが、うまくいかずに困っています。

ネット上で「Quitの誤解」などのページなどを参考に自分でも調べたのですが、以下の症状が出て困っています。

仕様: ローカルで起動したエクセルブックのvbaで、ネット上のエクセルブックを読み込み、読みこんだエクセルブックのvbaが走り、フォームによる一連のプログラムを終えた後、フォーム上の閉じるボタンでエクセル本体も閉じる。

症状:
・ネット上から呼び出したブックが残ってしまい、エクセル本体も終了してくれない。
・ネットから呼び出しすブックを、ローカルで実行すると、ちゃんとエクセル本体も閉じてくれる。

チェックしたこと: 別途、シンプルなローカル側ブックとネット側ブックを作成し、同様の動作を行わせると、希望どおりエクセル本体も閉じてくれる。

以上、まとめると、シンプルなブックではうまくいくのに、作りこんでいるものではエクセル本体が閉じてくれない。です。

何かが影響しているのだとは思いますが、解決せずに困っています。
何かお気づきの点ございましたら、アドバイスいただければ幸いです。

windows7 ホームプレミアム。 エクセル2007です。

よろしくお願いします。

【70222】Re:エクセル本体の終了がうまくいかない
発言  UO3  - 11/10/20(木) 12:22 -

引用なし
パスワード
   ▼たにやん さん:

現在のコードの、ネット上のブックを開く部分とエクセルを終了させる部分のコード(それが書かれてあるプロシジャ全体)を
アップされてはいかがでしょう。

【70226】Re:エクセル本体の終了がうまくいかない
発言  たにやん  - 11/10/20(木) 15:30 -

引用なし
パスワード
   ▼UO3 さん:
▼UO3 さん:
UO3さん。ありがとうございます。

ローカルに置いてあるブックのプロシージャです。(ブックを呼び出す部分)

Sub workbook_open()
  Application.WindowState = xlMaximized
  
  Dim url As String
  url = Worksheets("セット").Range("ネット上フォルダー") & "/hontai.xls"

  Workbooks.Open url
End Sub


ネット上のブック内、終了処理をするプロシージャです。
(コメントアウトしてある部分は、オブジェクトの解放が必要がと思ってもがいた名残です)

Sub 終了処理()
  '氏名選択フォーム・問題集選択フォームの段階で終了する場合にも♪
  
  If MsgBox("終了しますか?", vbOKCancel) = vbCancel Then
    Exit Sub
  End If
    
    '終了を選択した場合
    
    Application.StatusBar = "終了処理中"
    
    Dim ワークブック As Workbook
    
    For Each ワークブック In Workbooks
      If ワークブック.Name <> ThisWorkbook.Name Then
        ワークブック.Saved = True
        ワークブック.Close
      End If
     
    Next ワークブック
    
    'オブジェクトを解放する
'    Set 本体ブック = Nothing
'    Set 作業シート = Nothing
'    Set 設定シート = Nothing
'    Set 問題集一覧シート = Nothing
'
'    Set 個々情報シート = Nothing
'    Set 個々履歴シート = Nothing
'    Set 成績シート = Nothing
    
    
    Application.WindowState = xlMaximized
    
    Application.Quit
    ThisWorkbook.Saved = True
    ThisWorkbook.Close
  
End Sub

よろしくお願いします。

【70227】Re:エクセル本体の終了がうまくいかない
発言  Abyss  - 11/10/20(木) 15:53 -

引用なし
パスワード
   下記だけで十分です。

    For Each ワークブック In Workbooks
      ワークブック.Saved = True
    Next ワークブック

    Application.WindowState = xlMaximized
    Application.Quit

【70228】Re:エクセル本体の終了がうまくいかない
お礼  たにやん  - 11/10/20(木) 18:00 -

引用なし
パスワード
   ▼Abyss さん:
>下記だけで十分です。
>
>    For Each ワークブック In Workbooks
>      ワークブック.Saved = True
>    Next ワークブック
>
>    Application.WindowState = xlMaximized
>    Application.Quit

おおっ。うれしいー♪ ありがとうございました。
実行するとうまく閉じてくれました。
この一週間の苦しみが解決しました。 感謝です。

えっと、どこがだめだったのか教えていただけないでしょうか。今後のために。
お手数ですが、よろしくお願いします。

【70259】Re:エクセル本体の終了がうまくいかない
回答  sasa  - 11/10/24(月) 15:05 -

引用なし
パスワード
   >えっと、どこがだめだったのか教えていただけないでしょうか。今後のために。

まずロジックとしてQuitするのに個々のbookをCloseしているが不要で無駄。

> Application.Quit
> ThisWorkbook.Close
>End Sub

この意味は、Quitでexcelの終了が命令されたが、実際はこのプロシージャを終わった(End Subが実行された)後に実行される。
それに対しThisWorkbook.Closeは即実行されそれ以降のコードは実行されない。
(End Subは実行されず、だからQuitも実行はされない)

【70264】Re:エクセル本体の終了がうまくいかない
お礼  たにやん  - 11/10/24(月) 18:12 -

引用なし
パスワード
   ▼sasa さん:

ありがとうございました。
僕にとって、とっても貴重な知識になりました。

>この意味は、Quitでexcelの終了が命令されたが、実際はこのプロシージャを終わった(End Subが実行された)後に実行される。
>それに対しThisWorkbook.Closeは即実行されそれ以降のコードは実行されない。
>(End Subは実行されず、だからQuitも実行はされない)

2060 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free