プロが教える店舗&オフィスのセキュリティ対策術

ExcelのVBAを使った複雑なアプリケーションを開発中です。
 本体のWorkBookは、終始必要なくて、ユーザーフォームだけで完結するものです。結果的には、あたかもVBで作成されたもののように見えることになる。
【手順】
1) xslファイルを開くとユーザーフォームのみ表示される。
2) ユーザーフォームで一連の作業を行う。本体のWorkBook上のsheetは処理中に使用はする(作業用の一時データ貼り付けなど)けど、表示させたくない。
3) 作業終了時・・・これがわからない。
     (終了ボタンまたは閉じるボタンクリック)
           |
     <他のWorkBookが開いているか>
   |                 |
   yes                 No
   |                 |
[現在のworkBookのみ閉じる]   |
  saveの必要なし    [アプリケーションを終了する]  
                 saveの必要なし

A 回答 (2件)

これでよい?


>3) 作業終了時・・・これがわからない。
'終了ボタンはフォームを閉じるだけでよい
Private Sub CommandButton1_Click()
Unload Me
End Sub
'フォームが閉じる時のイベントで分岐処理
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
If Workbooks.Count > 1 Then
'他にBookが存在した場合
Application.DisplayAlerts = False
ThisWorkbook.Close
Else
'他にBookが無い場合
Application.DisplayAlerts = False
Application.Quit
End If
End Sub

以上、参考まで
    • good
    • 0
この回答へのお礼

随分と遅くなりました。
過去の記録を整理していて気が付きました。
このままでは、私の方の作りが少し違っていてそのまま適用はでき万出たが、重要なヒントをいただきました。

お礼日時:2010/04/22 17:34

こんばんは。



アドバイスといえるか分かりませんが、VBAではお勧めしません。あくまでも、実験的な範囲を免れ得ないと思うのです。私個人は、VBから作ってしまうので、そのようなことは考えませんが、それは、起動時から、Application やWorkbook が、Visible = False として置けばよいのですが、Applicationの終了時にハングの危険が必ず伴います。

理由は、おそらく、Applicationの終了時まで、UserForm が残っているせいなのだと思うのです。それで、UserFormはWorkbook自体とは間接的なつながりでしかなく、おまけにコントロール・オブジェクトがOLEとして存在しているから、途中で途切れてしまうからだと思うのです。たぶん、97時代には問題なかったようなので、富士通のテキストにも載っていたようですが、Excel 2000移行は変わりましたから、問題が発生するのだと思うのです。よほど、この辺りが明るくないと開発は難しいのです。

どうしてもというなら、それは、あえて挑戦してみたらと思うのですが、ここのサイトでも、同様の方法で不明のハングの質問がありましたが、そういうUserForm のみという方法が失敗しているのを知ると、とても、実務上では使えないような気がしています。見かけを優先させてリスクを上げるということには、あまり得策ではないような気がします。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A