none
【重大】 (Excel2016) ユーザーフォームでの重なりの不具合

    Question

  • Window10, Excel2016を使用しております。

    OSをWindows7→Windows10にしたところ、不具合らしき挙動に困っております。

    → 訂正:OSではなく、おそらくExcel2013→2016に変更した影響と思われます。

     

    ■障害内容

     ユーザーフォームにて、重なり合うコントロール部品では

     前面コントロール部品をクリックできなくなった(背面コントロールがクリックされるようになった)。

     

    ■詳細

     VBAユーザーフォームにて、大き目のラベル(背景エリアとして利用)を配置し、その前面にはボタンを配置しています。

     (画面イメージとしては、ダイアログボックス風に下部部分をボタン領域としたく

      ボタン領域サイズにしたラベルに背景色をつけて配置し、その前面にOKやキャンセルなどのボタンを配置しています)

     これまでは前面にいるボタンが当然ながら押下できましたが、

     Excel2016にしたところ、背面のラベルのクリックが発動してしまい、前面のボタンを押すことができません。 

     当方では、今後Excel2016へ移行する際、多くのユーザーフォームが使用できなくなる事が予測されます。

     

    ■補足

    コントロール順序を逆にし、ボタンを背面に、ラベルを前面にすると

    見た目上はボタンは見えない(ラベル領域に隠れている)ですが、

    ボタン位置あたりをクリックするとボタンをクリックできます。

    → つまりExcel2016では、背面コントロールのクリックが優先される挙動となっております。 

     

     

    本件、Excel2016での不具合でしょうか?

    解決策をご存知の方、また同じ現象でお困りの方などおりましたら

    コメントをお願い致します。






    Wednesday, October 19, 2016 5:31 AM

Answers

  • 匿名 太郎さん、こんにちは。

    Windows 10、Excel 2016 で試してみました。(下図参照)


    見た目はラベルの上にボタン(1~3)を配置し、それらをクリックしたところ
    お書きになっているとおり、ラベルのクリックイベントが発生しました。

    なので、フレームを作り、その中にボタン(4~6)を配置し、クリックしたところ
    問題なくボタンのクリックイベントが発生しました。

    なので、ラベルを使わずにフレームをお使いになってはいかがでしょうか?
    サンプルではフレームに Caption を表示していますが、
    Caption をブランクにして、BorderStyle を None  にすれば見た目はラベルと同様になります。

    姑息な回避策ではありますが、ラベルを使うより正しい方法だと思います。
    つまり、ラベルはコンテナではないので中に子供のオブジェクトを持つことができません。
    (ラベルの位置を移動させても、ボタンは連動して移動しません)
    フレームはコンテナなので、その中に子供のオブジェクトを置くことができます。
    (フレームの位置を移動させると、その中のボタンも連動して移動します)

    # オブジェクトではなく、コントロールというのが正しい表現かもしれません・・・(^-^;

    なお、匿名 太郎さんのご質問の意味を誤解していれば、その旨をお知らせください。

    以上です。
    北窓舎:芦田

    • Edited by Ashidacchi Wednesday, October 19, 2016 7:20 AM
    • Marked as answer by 匿名 太郎 Thursday, October 20, 2016 12:01 AM
    Wednesday, October 19, 2016 7:12 AM

All replies

  • 匿名 太郎さん、こんにちは。

    Windows 10、Excel 2016 で試してみました。(下図参照)


    見た目はラベルの上にボタン(1~3)を配置し、それらをクリックしたところ
    お書きになっているとおり、ラベルのクリックイベントが発生しました。

    なので、フレームを作り、その中にボタン(4~6)を配置し、クリックしたところ
    問題なくボタンのクリックイベントが発生しました。

    なので、ラベルを使わずにフレームをお使いになってはいかがでしょうか?
    サンプルではフレームに Caption を表示していますが、
    Caption をブランクにして、BorderStyle を None  にすれば見た目はラベルと同様になります。

    姑息な回避策ではありますが、ラベルを使うより正しい方法だと思います。
    つまり、ラベルはコンテナではないので中に子供のオブジェクトを持つことができません。
    (ラベルの位置を移動させても、ボタンは連動して移動しません)
    フレームはコンテナなので、その中に子供のオブジェクトを置くことができます。
    (フレームの位置を移動させると、その中のボタンも連動して移動します)

    # オブジェクトではなく、コントロールというのが正しい表現かもしれません・・・(^-^;

    なお、匿名 太郎さんのご質問の意味を誤解していれば、その旨をお知らせください。

    以上です。
    北窓舎:芦田

    • Edited by Ashidacchi Wednesday, October 19, 2016 7:20 AM
    • Marked as answer by 匿名 太郎 Thursday, October 20, 2016 12:01 AM
    Wednesday, October 19, 2016 7:12 AM
  • 芦田 様

    返信ありがとうございます。

    ご提案の方法を早速試しまして、

    見た目・動作ともに、現行と変わりない状態で正常操作できることを確認できました。

    素晴らしい方法をありがとうございます。

     

    問題は既存の配布済みファイル郡の修正ですね。。。

    業務でExcelマクロを多用しており、多くの機能を配布してしまっています。

    順次、修正対応して再リリースしていくことになりますが、

    Excelのアップデートで改善されることを切に期待したいと思います。

    (それにしても既存の振る舞いを突然変えるなんて、互換性の考慮が足りないですよね)

     

    早々のご検証、ありがとうございました。



    Wednesday, October 19, 2016 11:56 PM
  • 匿名 太郎さん、おはようございます。

    メインPC(Windows 7)には、Excel 2016、Excel 2010、Excel 2007 を同居させています。
    気になったので、2010 と 2007 で動作確認してみました。

    下図のとおり、どちらも(見かけ上)ラベルの上に配置したボタンをクリックすると、期待どおりにボタンクリックのイベントが発生しました。
    なので、明らかに Excel 2016 になってからの品質低下だと思われます。
     

    私の経験では Excel 2016 にはそれ以外の不具合も散見されます。

    推測ですが、高 DPI への対応ができていないように思われます。
    ノートPC(画面解像度 2560 x 1440)ではボタンの内容が正しく表示されるのに対し、
    メインPC(画面解像度 3840 x 2160)ではボタンの文字が大きくなってボタン内に収まらなくなります。


    私は個人事業主です。上の画像は家庭内で使っている Excel ファイルなので(Excel 2016 でのクセ)がわかっている限り)問題はありません。が、お客様に納めているものでこのような現象が出たら即クレームです。幸いにして(現時点では)4K モニターをお使いのお客様がおられないので苦情はありませんが、MSが早く対応してくれないと、やがては苦情が出るでしょう。

    余談が多くなり、失礼いたしました・・・ <m(__)m>

    北窓舎:芦田


    • Edited by Ashidacchi Thursday, October 20, 2016 2:55 AM
    Thursday, October 20, 2016 1:44 AM
  • 芦田 様

    Excel2016では色々と問題が見つかっているようですね。

    今回ご紹介いただいた事例も把握しておりませんでしたので、

    気にして見るように致します。

     

    大変参考になりました。

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

    Thursday, October 20, 2016 5:25 AM