[[20180205141102]] 『ユーザーフォームの使用について』(Mikaちゃん) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『ユーザーフォームの使用について』(Mikaちゃん)

商品の1日の在庫管理をマクロで実行しています。

大体毎日400程度の計算を実行し、計算のマクロ実行時には
ユーザーフォームで、「現在集計中。しばらくお待ちください。」と
表示しています。

先日パートの方が、マクロ実行中に×ボタンを押して計算が中断する事が
あったので、

ユーザーフォームに以下のコードを入力し×ボタンを無効にしました。

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
Cancel = True
End Sub

在庫計算マクロの最後に

Unload UserForm1

で、ユーザーフォームを閉じるようにしていたのですが、閉じなくなりました。
そこで良い方法があれば教えて下さい。

ユーザーフォームの×ボタンを有効にしつつ、在庫計算マクロ終了後にユーザーフォームが消えるようにしたいと思っています。
よろしくお願いします。

< 使用 Excel:Excel2013、使用 OS:Windows8 >


共通変数を1つ追加しては?
処理開始で1でもセットしておいて、QueryClose時は共通変数が1ならば閉じられなくする。 処理終了時は0に戻す。 こんな感じで。
(???) 2018/02/05(月) 14:49

???さんの案も一案ですが、

 > Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer) 

上記のCancelの他にもう一つあるCloseModeというのを調べてみてください。

ユーザーが画面から閉じる操作をしたのか、
VBAのコードから閉じる操作をしたのか、

判定できます。

(ご近所PG) 2018/02/05(月) 14:56


メモ帳で書いてたら、同じ趣旨の回答をご近所PGさんが既に回答されてますが、せっかくなので・・・

調べてみたところ、ご呈示のコードは「×ボタンが押された場合」にキャンセルするコードではなく、「何らかの原因」で閉じようとされたら、キャンセルするコードになっているようです。
<参考>
http://officetanaka.net/excel/vba/tips/tips18.htm

なので、以下のように修正すれば、×ボタンだけ無効にできると思われます。
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)

    If CloseMode = 0 Then
        Cancel = True
    End If
End Sub

(もこな2) 2018/02/05(月) 15:02


ご近所PGさま
もこな2さま

ご回答ありがとうございます。
早速改善が図れました♪

本当にありがとうございました!
(Mikaちゃん) 2018/02/05(月) 15:05


解決済みですが一応参考URLということで

QueryClose イベント
https://msdn.microsoft.com/ja-jp/vba/language-reference-vba/articles/queryclose-event

 closemode 引数は、次の値を返します。
定数              値 説明
vbFormControlMenu 0  ユーザーが UserForm 上の コントロール メニューで [ 閉じる ] コマンドを選択しました。
vbFormCode        1  コードから Unload ステートメントが呼び出されました。
vbAppWindows      2  現在の Windows オペレーティング環境セッションが終了しようとしています。
vbAppTaskManager  3  Windows の タスク マネージャー がアプリケーションを閉じます。

(ご近所PG) 2018/02/05(月) 15:11


ご近所PGさま

ご丁寧にありがとうございます。
とても参考になりました♪
(Mikaちゃん) 2018/02/05(月) 15:46


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.