none
Excel2016でScreenUpdaing/UserFormのobject_QueryCloseイベントが機能しない。 RRS feed

  • 質問

  • Excel2007を使用していましたが、別の機種ではExcel2016にきりかえました。

    Excel2007使用機種では、ScreenUpdaingプロパティで画面表示の停止/UserFormのobject_QueryCloseイベント利用しての画面の切り替えができます。

    しかし、Excel2016では、機能しません。

    Excel2016以降よりScreenUpdaingプロパティ/UserFormのobject_QueryCloseイベント機能は、VBAより削除されてしまったのでしょうか。

    ご教示いただければ幸いです。

    2017年4月24日 0:18

回答

  • 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 末尾空白行を削除
    2017年4月24日 4:02

すべての返信

  • 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 末尾空白行を削除
    2017年4月24日 4:02
  • 北窓舎:芦田   様

     ご回答ありがとうございました。

    QueryCloseの件

     Excel 2016(バージョン 1702, ビルド 7870.2031)を利用しております。

     下記は、userformの終了ボタンをクリックするとuserform_querycloseイベントによりマスタメニュー.xlsmがActiveになることを意図して作成。
    現行では、マスタメニューはActiveとはなりません。
    MSに、ScreenUpdatingと同様の意図があるのではないかと推定しております。

    現行プログラム)
    Private Sub cmd終了_Click()
        Unload Frm基本情報
    End Sub

    Private Sub userform_queryclose(cansel As Integer, closemode As Integer) 
        Workbooks("マスタメニュー.xlsm").Activate

    End Sub

    改善プログラム)
    Private Sub cmd終了_Click()
        Unload Frm基本情報
        Workbooks("マスタメニュー.xls").Activate
    End Sub

    社会保険労務士 井浦由広


    2017年4月24日 21:01
  • 井浦由広 様、

    "マスタメニュー.xlsm" が問題の UserForm をもっているブックだとすれば、
     Private Sub userform_queryclose(cansel As Integer, closemode As Integer) 
       ThisWorkbook.Activate
     End Sub
    ではどうなるでしょうか?

    また、念のため確認させてください。
    Excel のアーキテクチャ(32-bit, 64-bit)は何でしょうか?
    私が使っているのは 32-bit です。
    ________________
    北窓舎:芦田
    2017年4月24日 22:41
  • 北窓舎:芦田   様

     ご回答ありがとうございました。
    わたくしの使っている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:26
  • 井浦 様、

    引用部とご自身の文言の区別が判然としません。
    お手数ですが、井浦さんのコメント・ご回答だけを書いていただけますでしょうか?
    ____________
    北窓舎:芦田
    2017年4月25日 11:31
  • 井浦 様、

    質問・お願いの意図を書いておきます。

    (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 で使えないことは珍しくないので、アーキテクチャをお尋ねした次第です。
    _______________
    北窓舎:芦田



    2017年4月25日 11:43