トップ回答者
Excel2016でScreenUpdaing/UserFormのobject_QueryCloseイベントが機能しない。

質問
回答
-
sil_raui さん(井浦由広 さん)、
Excel 2016(バージョン 1702, ビルド 7870.2031)で試してみました。
(1) ScreenUpdate
999999 回のループ処理で試したところ、わずかに差は出ましたが、
ScreenUpdate = False の効果はほとんどありませんでした。
(Elapsed = の単位は秒です)
(2) QueryClose
これは機能しました。
フォーム・右上の[✕]ボタンを無効にすることができました。
(a) お使いのバージョン、ビルド番号をお教えいただけますでしょうか?
(b) QueryClose を使っているコードを開示していただけますでしょうか?
(当方は画面切り替えを行ったのではありませんので)(c) ScreenUpdate については Excel User Voice にフィードバックなさることをお勧めいたします。
____________
北窓舎:芦田- 回答としてマーク 井浦由広 2017年4月24日 21:02
- 編集済み Ashidacchi 2017年4月24日 23:26 末尾空白行を削除
すべての返信
-
sil_raui さん(井浦由広 さん)、
Excel 2016(バージョン 1702, ビルド 7870.2031)で試してみました。
(1) ScreenUpdate
999999 回のループ処理で試したところ、わずかに差は出ましたが、
ScreenUpdate = False の効果はほとんどありませんでした。
(Elapsed = の単位は秒です)
(2) QueryClose
これは機能しました。
フォーム・右上の[✕]ボタンを無効にすることができました。
(a) お使いのバージョン、ビルド番号をお教えいただけますでしょうか?
(b) QueryClose を使っているコードを開示していただけますでしょうか?
(当方は画面切り替えを行ったのではありませんので)(c) ScreenUpdate については Excel User Voice にフィードバックなさることをお勧めいたします。
____________
北窓舎:芦田- 回答としてマーク 井浦由広 2017年4月24日 21:02
- 編集済み Ashidacchi 2017年4月24日 23:26 末尾空白行を削除
-
北窓舎:芦田 様
ご回答ありがとうございました。
QueryCloseの件
Excel 2016(バージョン 1702, ビルド 7870.2031)を利用しております。
下記は、userformの終了ボタンをクリックするとuserform_querycloseイベントによりマスタメニュー.xlsmがActiveになることを意図して作成。
現行では、マスタメニューはActiveとはなりません。
MSに、ScreenUpdatingと同様の意図があるのではないかと推定しております。現行プログラム)
Private Sub cmd終了_Click()
Unload Frm基本情報
End SubPrivate Sub userform_queryclose(cansel As Integer, closemode As Integer)
Workbooks("マスタメニュー.xlsm").ActivateEnd Sub
改善プログラム)
Private Sub cmd終了_Click()
Unload Frm基本情報
Workbooks("マスタメニュー.xls").Activate
End Sub社会保険労務士 井浦由広
- 編集済み 井浦由広 2017年4月24日 21:15
-
井浦由広 様、
"マスタメニュー.xlsm" が問題の UserForm をもっているブックだとすれば、
Private Sub userform_queryclose(cansel As Integer, closemode As Integer)
ThisWorkbook.Activate
End Sub
ではどうなるでしょうか?
また、念のため確認させてください。
Excel のアーキテクチャ(32-bit, 64-bit)は何でしょうか?
私が使っているのは 32-bit です。
________________
北窓舎:芦田- 編集済み Ashidacchi 2017年4月24日 23:26
-
北窓舎:芦田 様
ご回答ありがとうございました。
わたくしの使っているExcel のアーキテクチャも32-bitです。助言いただいた件について)
UserForm は、"マスタメニュー.xlsm"に付属するものです。
したがって、先に提示したプログラムは、
Private Sub userform_queryclose(cansel As Integer, closemode As Integer)
ThisWorkbook.Activate
End Sub
と書き換えることが可能です。
しかし、残念なことに反応は全く同じでした。
Excelの方向性としてCloudとの連携上Backでの処理を避けるように変わってきているのではと推察しております。
________________
新潟市
井浦由広
- 編集済み 井浦由広 2017年4月25日 11:36
-
井浦 様、
質問・お願いの意図を書いておきます。
(1) Workbooks(・・・).Activate ではなく、ThisWorkbook.Activate をお試しいただきたい:
対象とするものが異なると思ったためです。
Workbooks は Excel の外(Windows の中)での指定であり、ThisWorkbook は Excel の中での指定だと思います。
つまり、Excel の外から見れば Wookbook は既に Active になっているので、指定そのものに意味が無いのでは?と思いました。
(2) アーキテクチャは 32-bit か、64-bit か:
64-bit 版 Excel には API などに制限があります。 32-bit Excel で作ったもの(VBA)が 62-bit Excel で使えないことは珍しくないので、アーキテクチャをお尋ねした次第です。
_______________
北窓舎:芦田
- 編集済み Ashidacchi 2017年4月25日 11:46