Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 7 Home Premium : Excel 2010)
入力規則のリストボックスの操作
投稿日時: 20/07/06 23:02:07
投稿者: shimoichimabu

入力規則のリストボックスを操作したいです。
下記のように、入力規則のリストを設定しました。
セルをクリックした時、プルダウンが出て@〜Eが表示されます。
しかし、この状態でENDキーを手動で押すと、
F〜Iが表示されますが、下記マクロでは実行されません。
何故でしようか?
 
Private Sub Worksheet_SelectionChange(ByVal target As Range)
     
    With Selection.Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Formula1:="@,A,B,C,D,E,F,G,H,I"
        .IgnoreBlank = True
        .InCellDropdown = True
        .InputTitle = ""
        .ErrorTitle = ""
        .InputMessage = ""
        .ErrorMessage = ""
        .IMEMode = xlIMEModeHiragana
        .ShowInput = False
        .ShowError = False
    End With
     
    CreateObject("WScript.Shell").SendKeys "%{DOWN}"    'DropDownリストを表示させる
     
    Application.Wait [Now() + "0:00:00.5"]
    DoEvents
     
  CreateObject("WScript.Shell").SendKeys "{END}"  ’F〜Iが表示されない!
          
End Sub

回答
投稿日時: 20/07/07 22:56:08
投稿者: WinArrow
投稿者のウェブサイトに移動

原因はよくわかりませんが
Sendkeys
には、信頼性が低いとの意見がいます。
 
あまり期待しない方がよいのではないでしょうか?

回答
投稿日時: 20/07/08 09:03:20
投稿者: radames1000

ドロップダウンが閉じたあとに続きのSendKeysが行われるように見えます。
対処案ですが、Target="I"とすれば自動的にそれが選択されるので、
ドロップダウンリストの一番下まで表示されます。
ただTargetの値をあらかじめ退避させることが必要になります。

回答
投稿日時: 20/07/08 10:48:20
投稿者: simple

選択肢が表示されているあいだは、セルの編集中とみなされ(というか実際そうですが)、
「一般的に、セルの編集中は通常はマクロが動作しない」ことになっていますし、
今回のような場合は、その影響が編集に及ばないように考慮されているのかもしれません。
 
いずれにしても、最後までスクロールするのが常に最善でもないわけですし、
もしそうなら選択肢の順序を工夫すべきでしょう。
ですから、こうしたことに力を入れることがよいのかどうか個人的には疑問を感じます。
(イソップの「酸っぱい葡萄の話」と揶揄されるかもしれないが。)
 
# それに、セルが移動するごとにこんなことになったら、個人的にはやってられない気持ちです。
# 範囲指定はするのでしょうが。余り、シートのイベントプロシージャに期待するのもどうかと。

回答
投稿日時: 20/07/08 18:47:19
投稿者: WinArrow
投稿者のウェブサイトに移動

原因は、simpleさんのおっしゃる通りと思います。
 
ドロップダウンリストを
別のセルに作成したときのサンプルです。
 
データは、H1~H10に作成してあります。
 
Sub test()
Dim VCell As Range
    Range("A1").Select
    With Range("A1").Validation
        Set VCell = Range(.Formula1)
        .Parent.Value = VCell.Cells(VCell.Cells.Count).Value
    End With
    SendKeys "%{down}"
End Sub

投稿日時: 20/07/08 23:15:24
投稿者: shimoichimabu

 WinArrowさん、radames1000さん、simpleさん回答ありがとうございます。
 
>対処案ですが、Target="I"とすれば自動的にそれが選択されるので、
>ドロップダウンリストの一番下まで表示されます。
 
>ドロップダウンリストを別のセルに作成したときのサンプルです。
 
以上のような方法を教えて頂き、勉強になりました。
 
>ドロップダウンが閉じたあとに続きのSendKeysが行われるように見えます。
 
>選択肢が表示されているあいだは、セルの編集中とみなされ(というか実際そうですが)、
>「一般的に、セルの編集中は通常はマクロが動作しない」ことになっていますし
 
確かに仰る通りですね。CreateObject("WScript.Shell").SendKeys "%{DOWN}" の時点で
編集待ちの状態ですね。
 
今回も貴重なご意見を頂き、ありがとうございました。