Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


948 / 13645 ツリー ←次へ | 前へ→

【77331】comboboxのDropButtonClicを自動で開く tomi 15/7/22(水) 19:09 質問[未読]
【77332】Re:comboboxのDropButtonClicを自動で開く β 15/7/22(水) 19:43 発言[未読]
【77334】Re:comboboxのDropButtonClicを自動で開く tomi 15/7/23(木) 4:06 お礼[未読]
【77336】Re:comboboxのDropButtonClicを自動で開く マナ 15/7/23(木) 20:19 質問[未読]
【77337】Re:comboboxのDropButtonClicを自動で開く ichinose 15/7/23(木) 23:57 発言[未読]
【77339】Re:comboboxのDropButtonClicを自動で開く ichinose 15/7/24(金) 6:00 発言[未読]
【77349】Re:comboboxのDropButtonClicを自動で開く マナ 15/7/24(金) 19:00 お礼[未読]
【77351】Re:comboboxのDropButtonClicを自動で開く マナ 15/7/24(金) 19:27 お礼[未読]
【77338】Re:comboboxのDropButtonClicを自動で開く β 15/7/24(金) 2:50 発言[未読]
【77350】Re:comboboxのDropButtonClicを自動で開く マナ 15/7/24(金) 19:03 お礼[未読]

【77331】comboboxのDropButtonClicを自動で開く
質問  tomi  - 15/7/22(水) 19:09 -

引用なし
パスワード
   よろしくお願いします。
 ユーザーフォームにComboboxがあります。
 ユーザーフォームをが表示された時にDropButtonClickが自動で開く様ににするにはどのように記述すればよいか教えて頂きたいと思います。
 エクセル2007です。

【77332】Re:comboboxのDropButtonClicを自動で開く
発言  β  - 15/7/22(水) 19:43 -

引用なし
パスワード
   ▼tomi さん:

こんなことでしょうか?

Private Sub UserForm_Activate()
  ComboBox1.DropDown
End Sub

【77334】Re:comboboxのDropButtonClicを自動で開く
お礼  tomi  - 15/7/23(木) 4:06 -

引用なし
パスワード
   ▼β さん:
>▼tomi さん:
>
>こんなことでしょうか?
>
>Private Sub UserForm_Activate()
>  ComboBox1.DropDown
>End Sub
ありがとうございました。解決しました。

【77336】Re:comboboxのDropButtonClicを自動で開く
質問  マナ  - 15/7/23(木) 20:19 -

引用なし
パスワード
   ▼β さん:

解決したようなので、よろしければ、関連で教えてください。
Activateでなく、Initailizeだとできないのですが
そういうものでしょうか。

SendKeysでは、できるのですが、
私が勘違いしているだけで、当たり前のこと?

Private Sub UserForm_Initialize()

  ComboBox1.List = Array("a", "b")
'  ComboBox1.SetFocus
  ComboBox1.DropDown
'  SendKeys "%{Down}"
'  Application.OnTime Now + TimeValue("00:00:1"), "drop"
  
End Sub

【77337】Re:comboboxのDropButtonClicを自動で開く
発言  ichinose  - 15/7/23(木) 23:57 -

引用なし
パスワード
   ▼マナ さん:
>▼β さん:
>
>解決したようなので、よろしければ、関連で教えてください。
>Activateでなく、Initailizeだとできないのですが
>そういうものでしょうか。
Excel2010では、コンボボックスの位置と結構離れた位置でリストが表示されます。
Initailizeは、ユーザーフォームが表示される前に発生するイベントなので
このような不具合になるのでしょうねえ!!

Sendkeysでも プロシジャー内で "%{Down}"が実行されるように


SendKeys "%{Down}", True とすると、
ComboBox1.DropDownと同じ結果になります。

SendKeys "%{Down}" だと、ユーザーフォームが表示後に"%{Down}"が実行されますから・・・。


Activateイベントでは、可能でも Initializeでは不可なことって
他にもいくつかあったはずですよ、今は 思い出せませんが・・・。

【77338】Re:comboboxのDropButtonClicを自動で開く
発言  β  - 15/7/24(金) 2:50 -

引用なし
パスワード
   実際に、実装レベルで、InitializeとActivateで、どうなっているかはうかがい知れませんが
ユーザーフォームが表示されて機能する部分と表示前に機能する部分は、なんとなく勘(?)。
勘がはずれても、やってみれば、あぁ、こうなんだと。

SendKeysに関しては、ichinoseさんから回答があるように、
実行はキュー(っていうんでしょうか?)に入っていて、表示されたときに、
キーストロークがそのフォームにぶつけられるんでしょうね。

たとえば、StartupPositionが1のユーザーフォームで

Private Sub UserForm_Initialize()
  MsgBox "Init:" & Me.Left
End Sub

Private Sub UserForm_Activate()
  MsgBox "Act:" & Me.Left
End Sub

Initializeは、メモリーに呼びこまれただけでひょうじされていませんので 0 ですね。
表示されて初めて実際の値が取得できます。

また、

Private Sub UserForm_Initialize()
  MsgBox "Init"
  Unload Me
End Sub

これだと エラーになりますね。

Private Sub UserForm_Activate()
  MsgBox "Act"
  Unload Me
End Sub

Initializeが完了して初めて Unload が可能になるようです。

また、

Private Sub UserForm_Initialize()
  MsgBox "Init"
  Me.Hide
End Sub

Private Sub UserForm_Activate()
  MsgBox "Act"
  Me.Hide
End Sub

Initialize では表示されていないので、Hideもなにも、あったものではないんですが
実際にInitializeでは機能していないことが、Activateで表示されたときにわかりますね。

【77339】Re:comboboxのDropButtonClicを自動で開く
発言  ichinose  - 15/7/24(金) 6:00 -

引用なし
パスワード
   >Activateイベントでは、可能でも Initializeでは不可なことって
>他にもいくつかあったはずですよ、今は 思い出せませんが・・・。
思い出した事例


ユーザーフォーム(UserForm1)にテキストボックスを二つ(TextBox1、TextBox2)
配置してください。


UserForm1を表示させる際に 条件によって フォーカスするテキストボックスを変えたい場合を想定します。

事例では、時刻の秒単位が30秒より大きかった場合、TextBox2にフォーカスする

という仕様です。
尚、表示は モードレスで表示するとします。

1

UserForm1のモジュールに

Private Sub UserForm_Initialize()
  If Second(Now()) > 30 Then TextBox2.SetFocus
End Sub

標準モジュールに

Sub test1()
  UserForm1.Show vbModeless
End Sub





UserForm1のモジュールに

Private Sub UserForm_Activate()
  If Second(Now()) > 30 Then TextBox2.SetFocus
End Sub

標準モジュールに

Sub test2()
  UserForm1.Show vbModeless
End Sub


1では、UserForm1の表示時に Textbox2にフォーカスをあてることが出来ませんが、

2では 可能になっています。


Initailizeでうまくいかないときに Activateで試してみる

こんな鉄則(昔、算数の参考書によくありましたね こういうの)を
頭に入れておくと よさそうですよね

【77349】Re:comboboxのDropButtonClicを自動で開く
お礼  マナ  - 15/7/24(金) 19:00 -

引用なし
パスワード
   ▼ichinose さん:

いつもありがとうございます。


>Excel2010では、コンボボックスの位置と結構離れた位置でリストが表示されます。

↑この意味が理解できていません??
ですが、

>Initailizeは、ユーザーフォームが表示される前に発生するイベントなので

今回のケースも含め、Activateではできて、
Initailizeでできないこともあるのは理解しました。


>Initailizeでうまくいかないときに Activateで試してみる
>頭に入れておくと よさそうですよね

そうですね。

【77350】Re:comboboxのDropButtonClicを自動で開く
お礼  マナ  - 15/7/24(金) 19:03 -

引用なし
パスワード
   ▼β さん:

わかりやすい解説ありがとうございます。

>Initializeは、メモリーに呼びこまれただけでひょうじされていませんので 0 ですね。
>表示されて初めて実際の値が取得できます。

試してみて、実行のタイミングがよく理解できました。
何となく賢くなった気分です。

【77351】Re:comboboxのDropButtonClicを自動で開く
お礼  マナ  - 15/7/24(金) 19:27 -

引用なし
パスワード
   >↑この意味が理解できていません??

あっ!意味わかりました。
こんなところに、リストが表示されていたなんて。

Excel2002ではどうだろうと思って
試してみたら気付きました。
これで、すっきりです。

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

948 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free