Excel (VBA)

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

 
(Windows 10 Pro : Excel 2016)
ComboBox DropDownさせたい
投稿日時: 22/08/27 07:29:19
投稿者: taichi

現在はUserForm上で
Private Sub CombBox1_MouseMove(括弧内省略)
    CombBox1.DropDown
End Sub
でComboBoxを DropDownさせているのですが、
複数のComboBoxが近接しているので、マウス操作によっは
次のComboBoxがDropDownしてしまうということが多いので
MouseMove をやめて
 
Private Sub CombBox1_Change()
    CombBox2.SetFocus
    CombBox2.DropDown
End Sub
とすると、オートメーション エラー
起動されたオブジェクトはクライアントから切断されたとでます。
CombBox2 は選択できますが、選択後もDropDownされたままの状態です。
UserForm上の終了ボタンでは通常に終了します。
もしダメならCombBoxの配置で回避したいと思います。
因みに
Private Sub UserForm_Initialize()
     CombBox1.SetFocus
     CombBox1.DropDown
End Sub
ではSetFocusだけが有効でDropDownしません。
 
よろしくお願いします。

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

>CombBox2.DropDown
このコードを記述場所に原因があります。
 
次のようにするとよいでしょう。
 
Private Sub ComboBox2_Enter()
    Me.ComboBox2.DropDown
End Sub

回答
投稿日時: 22/08/27 11:33:18
投稿者: WinArrow
投稿者のウェブサイトに移動

ユーザーフォームを使う場合、
用意されている、プロシジャは、イベントプロシジャといい、
対象とするコントロール(含む、ユーザーフォーム)が
どのようなときに、起動されるかをキチンと理解しましょう。
 
>Private Sub UserForm_Initialize()
は、ユーザーフォームをメモリに配置するプロシジャです。
このプロシジャが終了するまでユーザーフォームは開かれません。
従って、フォーム全体が開いていないので、その中のコントロールも開いていない。
開いていないコントロールのメソッド(Dropdounを実行する、当然のことながら、エラーになります。

投稿日時: 22/08/27 22:00:06
投稿者: taichi

WinArrow さん いつもありがとうございます。
 
Private Sub UserForm_Initialize() の説明 納得出来ました。
 
コントロールを1つだけ配置して試してみました。
マウスをComboBox1に近づけても
DropDownされませんでした。
 
Private Sub UserForm_Initialize()
    For n = 1 To 5
        With ComboBox1
            .AddItem n
        End With
    Next
End Sub
 
Private Sub ComboBox1_Enter()
   Me.ComboBox1.DropDown
End Sub

回答
投稿日時: 22/08/28 06:36:38
投稿者: WinArrow
投稿者のウェブサイトに移動

taichi さんの引用:
WinArrow さん いつもありがとうございます。
 
Private Sub UserForm_Initialize() の説明 納得出来ました。
 
コントロールを1つだけ配置して試してみました。
マウスをComboBox1に近づけても
DropDownされませんでした。
 
Private Sub UserForm_Initialize()
    For n = 1 To 5
        With ComboBox1
            .AddItem n
        End With
    Next
End Sub
 
Private Sub ComboBox1_Enter()
   Me.ComboBox1.DropDown
End Sub

 
え〜とですね・・・・
  
コントロールが1つですから、
Private Sub UserForm_Initialize()の中で
1番目のコントロールにカーソルが移動します。
つまり
     CombBox1.SetFocus
と同じことが実行されています。
このプロシジャの中では、
Private Sub ComboBox1_Enter()
のなかでは、
 CombBox2.DropDown
が実行されていますが、
このメソッドは無効です。
前レスで「エラーになる」って書きましたが、「無視される」が正解です。
 
それから
>マウスをComboBox1に近づけても
は、
>_MouseMove
 
を実行しようとしているわけですが、
プロシジャが無いから、当然のことながら、何も変化しません。
 
【対応策】
もう一つコントロール(テキストボックスでもよい)を追加して
ComboBox1を2番目になるようにタブオーダーを変更します。
  
ユーザーフォームが開いたら、テキストボックスあら[Tab]キーでカーソルを移動してみてください。

投稿日時: 22/08/28 09:50:35
投稿者: taichi

WinArrow さんありがとうございました。
 
【対応策】
もう一つコントロール(テキストボックスでもよい)を追加して
ComboBox1を2番目になるようにタブオーダーを変更します。
   
ユーザーフォームが開いたら、テキストボックスあら[Tab]キーでカーソルを移動してみてください。

上を試しました。これで問題が解決できます。
 
【質問】
>どのようなときに、起動されるかをキチンと理解しましょう。
 
現在は、させたい事をネットで色々検索し、その都度コピペ(多少は書き換えますが)
しているような状態なので、トンチンカンな思い違いを多々しているとおもいます。
 
系統だってVBA(EXCELだけでOK)を勉強し直したいと思いますが、
何かお薦めの本(or サイト)でもあれば、教えていただけないでしようか。

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

>何かお薦めの本(or サイト)でもあれば、教えていただけないでしようか。
最も難しい質問ですね・・
 
このサイトに「即効テクニック」があります。
参考になると思います。
 
 
 
 
 

回答
投稿日時: 22/08/28 22:45:11
投稿者: MMYS

taichi さんの引用:

系統だってVBA(EXCELだけでOK)を勉強し直したいと思いますが、
何かお薦めの本(or サイト)でもあれば、教えていただけないでしようか。

その質問に答えられる人はいないでしょう。
  
人によってスキルは違うから同じ書籍でも、難しすぎて理解できない。簡単すぎて参考にならない。となります。
つまり、本人しか、判断できません。
 
また、ここで回答する方は、昔学習したのですから、今は絶版で参考にならないでしょう。
Excel2000とか20年以上前の書籍を紹介されてもねぇ。
 
 
とはいえ、私からアドバイスをするなら、公立図書館でVBA関連の書籍を借りてくることをおすすめします。なお、VBAは進化が事実上、止まっているので、Excel2010以降の書籍なら、どれでも同じです。
 
 

投稿日時: 22/08/31 07:32:13
投稿者: taichi

WinArrow さんありがとうございました。
 
Kindleにも無料で読めるVBA関連の本もかなりありますので、読んでみます。