[[20170606185831]] 『ドロップダウンが一瞬表示され、消える』(稲葉) ページの最後に飛ぶ

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

 

『ドロップダウンが一瞬表示され、消える』(稲葉)

 セルの入力規則で値を選択させ、結果に応じて図を入れ替える様式を作成したところ、
 セルを選択したときに表示される入力規則のドロップダウンが、一瞬表示され、
 消えてしまう現象に遭遇しました。

 解消する方法、または別案でよいものがあれば教えてください。

 パソコン初心者のために、選択すると図が切り替わって画面上は必要な図しか
 表示させたくない、という要件です。

 以下に再現できるコードを掲示いたしますので、新しいブックを立ち上げて実行していただければと思います。
 コード実行後のリストボックスシートのA1を選択してみてください。

    Sub 再現()
        Sheets(1).Name = "リストボックス"
        Sheets.Add after:=Sheets(Sheets.Count)
        Sheets(Sheets.Count).Name = "参照元"
        With ThisWorkbook
            .Names.Add Name:="A", RefersTo:="=参照元!A1"
            .Names.Add Name:="B", RefersTo:="=参照元!A2"
            .Names.Add Name:="テスト画像", RefersTo:="=INDIRECT(リストボックス!A1)"
        End With
        With Sheets("リストボックス")
            .Select
            .Range("A1").Validation.Add Type:=xlValidateList, Formula1:="A,B"
            .Range("A1") = "A"
            .Range("A1").Copy
            .Range("C1").Select
            .Pictures.Paste Link:=True
            .Shapes(1).Select
            Selection.Formula = "テスト画像"
        End With

        With Sheets("参照元")
            .Activate
            .Range("A1:A2").Value = [{"肉";"魚"}]
        End With

        Sheets("リストボックス").Activate
    End Sub

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


 中身を理解していないのですが、

 > .Names.Add Name:="テスト画像", RefersTo:="=INDIRECT(リストボックス!A1)"

 ダブルクォーテーションの不足ではないですか?

     Names.Add Name:="テスト画像", RefersTo:="=INDIRECT(""リストボックス!A1"")"

(半平太) 2017/06/06(火) 19:53


 いえ、A1の値が名前の定義なるので、このままで良かったと認識しています
 たぶん 違っていたら補完していただければ助かります
(稲葉) 2017/06/06(火) 20:01

>セルを選択したときに表示される入力規則のドロップダウンが、一瞬表示され、
> 消えてしまう現象に遭遇しました。

試してみましたが、再現できませんでした。
エラーがでましたので、1箇所だけ修正して確認しました。

Selection.Formula = "リストボックス!テスト画像"

(マナ) 2017/06/06(火) 21:23


 稲葉さん

 大変失礼いたしました。
 上っ面を読んだだけでアップしてしまいました。m(__)m

 >セルを選択したときに表示される入力規則のドロップダウンが、一瞬表示され、 
 > 消えてしまう現象に遭遇しました。 

 当方の環境(Win10、XL2013)では、現象再現しました。

 F2キーを押して(編集モード)から、Escキーを押すと、ドロップダウンが出続けます。

(半平太) 2017/06/06(火) 21:53


 カメラ機能を使用したシートにその現象があるようです。

 代案としてオートシェイプを使用。
 設定はご自由に。

    Sub 再現()
        Sheets(1).Name = "リストボックス"
        Sheets.Add after:=Sheets(Sheets.Count)
        Sheets(Sheets.Count).Name = "参照元"
        With ThisWorkbook
            .Names.Add Name:="A", RefersTo:="=参照元!A1"
            .Names.Add Name:="B", RefersTo:="=参照元!A2"
            .Names.Add Name:="テスト画像", RefersTo:="=INDIRECT(リストボックス!A1)"
        End With
        With Sheets("リストボックス")
            .[a1] = "A"
            With .Range("c1")
                With .Parent.Shapes.AddShape(Type:=msoShapeRectangle, Left:=.Left, Top:=.Top, Width:=.Width, Height:=.Height)
                    .DrawingObject.Formula = "=テスト画像"
                    .DrawingObject.ShapeRange.Fill.Visible = msoFalse
                    .DrawingObject.ShapeRange.Line.Visible = msoFalse
                    .DrawingObject.ShapeRange.TextFrame2.AutoSize = msoAutoSizeShapeToFitText
                End With
            End With
            .Range("A1").Validation.Add Type:=xlValidateList, Formula1:="A,B"
        End With
        With Sheets("参照元")
            .Range("A1:A2").Value = [{"肉";"魚"}]
        End With
        Sheets("リストボックス").Activate
    End Sub

(seiya) 2017/06/06(火) 22:32


他のPCでも確認してみました

1)Excel2010, win7 ※エラーがでるのでコード修正
2)Excel2013, win7
3)Excel2002, winXP ※エラーがでるのでコード修正
4)Excel2016, win10

2010と2002では、再現しませんでした。
2013と2016で確かに再現しました。

2013で、その状態になると、
他のセルに手作業で入力規則を設定した場合も
も同じ現象がでてしまいました。

で、マクロでも手作業でもよいですが
参照元シートの適当なセルに
ダミーの入力規則を追加して削除すると
正常?な挙動に戻るようです。

(マナ) 2017/06/06(火) 23:28


マナさん
 ご確認ありがとうございました。
 エラー箇所の原因となった、「テスト画像」の名前の定義が
 シートレベルで定義されていたのでしょうか?
 動作環境も不思議ですね

 半平太さん
 いえ、当方の質問仕方が悪かったのです。
 引用された文言を先頭に持ってくるべきでした。

 再現の報告ありがとうございました。
 編集→エスケープも明日試してみたいと思います。
 ちなみに同一シートをカメラ機能で表示させようとすると、
 問題なくドロップダウンが表示されるので、内部的にクリック
 イベントのようなものが走って、シートを往復しているのかな
 と推測されます。

 seiyaさん
 代替案ありがとうございます。
 カメラ以外でも表示できるんですね。
 勉強になりました。

 明日、件のブックでためしてみます
(稲葉) 2017/06/07(水) 03:34

 seiyaさん
 結果として目的は達成できませんでした。
 例がよくなかったと、今さら気が付きました。

 「セルの値」ではなく、「セルに沿って配置した図」を表示したかったのですが、
 >.DrawingObject.Formula = "=テスト画像"
 はあくまでセルの値しか取得できないのですね。

 やってしまおうと思えばマクロで図を可変させるのは簡単なのですが、
 悔しいのでもう少し標準機能で模索したいです。

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

 半平太さん
 >F2キーを押して(編集モード)から、Escキーを押すと、ドロップダウンが出続けます。
 どうも再現できないです。入力規則が設定されているセルをF2→Escですよね?

 応急処置として、シートモジュールに
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
        '何もしない
    End Sub
 としたところ、一寸間がありますが、再表示されることが確認できました。

 これを使わずに再表示ができれば文句ないのですが・・・。
(稲葉) 2017/06/07(水) 12:29

 > 応急処置として、シートモジュールに...
 こちらでは DoEvents で一旦 OS に処理を渡さないと表示できないようですね。

 Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Address(0, 0) = "A1" Then DoEvents
 End Sub

(seiya) 2017/06/07(水) 15:12


 seiyaさん
 私も別PCで試したところ、解決できなかったため、Application.ScreenUpdatingで対応しました。
 当面、様子見てみます。
 ありがとうございました。
(稲葉) 2017/06/07(水) 15:42

 > 半平太さん
 > >F2キーを押して(編集モード)から、Escキーを押すと、ドロップダウンが出続けます。
 > どうも再現できないです。入力規則が設定されているセルをF2→Escですよね?

 ええ、そうなんですけど、今やってみると再現しないです。
 変だなぁと思って新規ブックでやると再現します。

 一旦閉じてから再オープンするとダメみたい。

 これを再現すると言うべきか、言わざるべきか、
 ハムレットの心境と言うより、実験ばかりでハムスターかモルモットの心境です。

 ドロップダウンは目には見えなくとも、VISIBLEプロパティはTUREとなっていて、
 あるべき場所に存在していることは確かな様です。

 ※B列の頭にマウスを持って行って、クリックすると選択できます。
  まぁ、パソコン初心者にそんなこと言っても、対応してくれないでしょうけども。

(半平太) 2017/06/07(水) 17:29


 一つ発見
 以下のリンク先は英語版の Excel Question Forum では多く引用されているサイトです。
 その中に、同様の問題と回避案が提示されています。
 内容は、やはり一旦OSにfocusさせることです。(記事では手動での方法ですが)
 然しながら、そのページの最後に読者の反応が投稿されているように、これで全て解決にはならないようです。

http://blog.contextures.com/archives/2013/07/16/missing-drop-down-arrows-in-excel-2013/

 現象 Excel 2013 Win7/8/10

 参考まで。
(seiya) 2017/06/07(水) 18:03

 半平太さん
 新規ブックでも再現できないですね。
 新しい発見?としてA1選択後、Alt+TabでIE等別ウィンドウに切り替え、再度Alt+Tabで戻ると表示されていました。

 seiyaさん
 たびたびありがとうございます。
 私のつたない英語力では読むのでさえ時間かかりそうです。
 同じような人がいて、よかった?

 で、自分なりにいろいろやってみて、同一セルにコメントを入れておくと、セルを選択したときに
 ドロップダウント同時にコメントも一瞬で消えます。
 その後、セルからマウスアウトした際ドロップダウンのみ再表示されました。

 コメントの表示がOSへのフォーカスなのかわかりませんが、解決・・・?

(稲葉) 2017/06/07(水) 18:27


 衝突しました。

 上記の読者の投稿の中で最も好評なのがどこかに Form の DropDown を挿入して 入力範囲・リンクするセル 共に 1:1048576 としてしまう案です。

 再現したところ、問題なく表示されていますのでお試しを、

        With Sheets("リストボックス")
            .Select
            .Range("A1").Validation.Add Type:=xlValidateList, Formula1:="A,B"
            .Range("A1") = "A"
            .Range("A1").Copy
            .Range("C1").Select
            .Pictures.Paste Link:=True
            .Shapes(1).Select
            Selection.Formula = "テスト画像"
            With .DropDowns.Add(200, 100, 10, 10)  '<-数値は適当
                .ListFillRange = "1:1048576"
                .LinkedCell = "1:1048576"
                .Visible = False
            End With
        End With
(seiya) 2017/06/07(水) 18:30

 先ほど読み終わりました。
 Mattさん  March 28, 2016 at 5:06 pm
 の投稿ですね。

 試してみて、確かに解決できました!

 いずれにしろ、後から見たら何のためにあるのかさっぱりわからないオブジェクトたちですね。

 問題はあるが、解決です。

 みなさんありがとうございました。
 いつか誰かに役に立てばいいなぁ。
(稲葉) 2017/06/07(水) 18:56

コメント返信:

[ 一覧(最新更新順) ]


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