1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

VBAコンボボックス イベントごとのデータ反映具合

Posted at

検証の動機

Accessフォームのコンボボックスに入力された文字列を含めたドロップダウンリストを生成したいが思惑通りのリストが表示されない。
なので、どんなイベントがどんな順序で発生し、いつ入力された値を得られるかを調べたかった。

結論

KeyDown -> KeyPress -> Change -> KeyUp の順でイベントが発生
Changeの段階で入力が参照できた
KeyUpの段階で必要な情報がそろった

前提

combo1という名前のコンボボックスを用意し、デバッグ用出力のみ記述したイベントプロシージャを用意。引数があればそれも表示。
例:KeyDownイベント

	Private Sub combo1_KeyDown(KeyCode As Integer, Shift As Integer)  
	    Dim ProcName As String: ProcName = "combo1_KeyDown"  
		Debug.Print ProcName & " : Start"  
		Debug.Print KeyCode; " <== KeyCode"  
		Debug.Print Shift; " <== Shift"  
		Debug.Print Me.combo1; " <== Me.combo1"  
		Debug.Print Me.combo1.Text; " <== Me.combo1.Text"  
		Debug.Print Me.combo1.Value; " <== Me.combo1.Value"  
		Debug.Print ProcName & " : End"  
	End Sub  

combo1にフォーカスがあり、何も入力されていない状態から開始。

結果

少ない試行で十分な結果が得られたので、全てのパターンは網羅していない。
わかりやすくするために、StartとEnd以外をインデント。

コンボボックスにフォーカスがあり、コンボボックス外をクリックしたとき

	combo1_Exit : Start  
		0  <== Cancel  
		Null <== Me.combo1  
		<== Me.combo1.Text  
		Null <== Me.combo1.Value  
	combo1_Exit : End  

	combo1_LostFocus : Start  
		Null <== Me.combo1  
		<== Me.combo1.Text  
		Null <== Me.combo1.Value  
	combo1_LostFocus : End  

コンボボックス外にフォーカスがあり、コンボボックスの入力欄をクリックしたとき

	combo1_Enter : Start  
		Null <== Me.combo1  
		<== Me.combo1.Text  
		Null <== Me.combo1.Value  
	combo1_Enter : End  

	combo1_GotFocus : Start  
		Null <== Me.combo1  
		<== Me.combo1.Text  
		Null <== Me.combo1.Value  
	combo1_GotFocus : End  

コンボボックスにフォーカスがあり、9を入力したとき

KeyUpイベント時に必要な情報がそろう

	combo1_KeyDown : Start
		57  <== KeyCode
		0  <== Shift
		Null <== Me.combo1
		<== Me.combo1.Text
		Null <== Me.combo1.Value
	combo1_KeyDown : End
	
	combo1_KeyPress : Start  
		57  <== KeyAscii  
		Null <== Me.combo1  
		<== Me.combo1.Text  
		Null <== Me.combo1.Value  
	combo1_KeyPress : End  
	
	combo1_Change : Start  
		Null <== Me.combo1  
		9 <== Me.combo1.Text  
		Null <== Me.combo1.Value  
	combo1_Change : End  
	
	combo1_KeyUp : Start  
		57  <== KeyCode  
		0  <== Shift  
		Null <== Me.combo1  
		9 <== Me.combo1.Text  
		Null <== Me.combo1.Value  
	combo1_KeyUp : End  
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?