Excel VBA質問箱 IV

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

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


3134 / 13644 ツリー ←次へ | 前へ→

【63974】テキストボックスのExitが処理されません ビギナー 10/1/6(水) 11:07 質問[未読]
【63975】Re:テキストボックスのExitが処理されません UO3 10/1/6(水) 12:27 回答[未読]
【63976】Re:テキストボックスのExitが処理されません neptune 10/1/6(水) 13:49 発言[未読]
【63977】Re:テキストボックスのExitが処理されません 角田 10/1/6(水) 17:35 回答[未読]
【63978】Re:テキストボックスのExitが処理されません Yuki 10/1/7(木) 11:56 発言[未読]
【64033】Re:テキストボックスのExitが処理されません ビギナー 10/1/11(月) 10:26 お礼[未読]

【63974】テキストボックスのExitが処理されません
質問  ビギナー  - 10/1/6(水) 11:07 -

引用なし
パスワード
   こんにちは。
テキストボックスの使用方法についてわからないところがありますので、質問させて下さい。


テキストボックスに値が入力された際の処理を作成するため、テキストボックスのExitを用いているのですが、次の条件を満たす時にはその処理が実行されないようです。

・テキストボックスがフレーム上に配置されている
・テキストボックスへ入力後、フォーカスが別のフレーム内のコントロールに移動する

因みに、フォーカスの移動はマウスクリックによるものに限りません。
タブオーダーでフレーム内の最後に指定されているテキストボックスに対し、入力後にEnterキーを押して次のフレームにタブが移動した場合にも、同じ現象が起こります。


この現象は仕様なのでしょうか?
何か対応策があれば、お教え頂きたいです。
宜しくお願い致します。

【63975】Re:テキストボックスのExitが処理されま...
回答  UO3  - 10/1/6(水) 12:27 -

引用なし
パスワード
   ▼ビギナー さん:

 前にビギナーさんに(同じ方だと思うのですが)Exitイベントを推奨した
 手前、え?そんなこと?と思って昼休みに試しにやってみましたら、
 確かにおっしゃる現象がでる場合がありますね。なんか、VBAのバグっぽい
 感じもしますが、以下のようです。

 1.まず、同じフレーム内に別のコントロールがあり、そこのフォーカスが
   わたる場合は、Exitイベントは発生しています。
 2.ただし、次のフォーカスが別のフレームだとExitイベントは(その時点
   では)発生しませんね。
 3.かわりに・・というと変ですが、Frameに対してもExitイベント指定が
   できまして、他のフレームに抜ける際には、このFrameのExitイベントに
   わたります。
 4.上記3.をなんとか利用する? でも最後のフォーカスが何であったかを
   把握しておく必要がありますね。
 5.上記2で(その時点では)と記述しましたが、発生しなかったExitイベント
   は【コントロールごとに最後のイベントがプール】されているようで
   フォームを閉じると連続して当該Exitイベントルーティンに制御がわたる
   ようです。

【63976】Re:テキストボックスのExitが処理されま...
発言  neptune  - 10/1/6(水) 13:49 -

引用なし
パスワード
   ▼ビギナー さん:
これじゃないですか?
「OFF2000: フレーム (Frame のテキスト ボックスの終了イベントが
正しく実行されません。」
ht tp://support.microsoft.com/kb/210734/ja

【63977】Re:テキストボックスのExitが処理されま...
回答  角田  - 10/1/6(水) 17:35 -

引用なし
パスワード
   下記参考に

AddinBox:[Exit]を通らないで外へ?
ht tp://www.h3.dion.ne.jp/~sakatsu/Excel_Tips03.htm

フレームは使わずにラベルで枠線を表現すれば回避できます。

【63978】Re:テキストボックスのExitが処理されま...
発言  Yuki  - 10/1/7(木) 11:56 -

引用なし
パスワード
   ▼ビギナー さん:
こんにちは。

UserForm1上に
Frameを貼付けその中にTextBoxを3個
そしてダミーのTextBoxを1個 これは別のTextBoxの下に隠して置いてください。
そのFrameの外側にCommandButton1個とTextBox1個があるものとします。
動きはFrameから外れる時にダミーのTextBoxで最後にアクセスしたTextBoxの
Exitイベントを確定することです。
一度試してみて下さい。

Object         Object Name    Tab Index
Frame            Frame1    0
TextBox         TextBox1   0
                TextBox2   1
                TextBox3   2
TextBox         TextBox4   3     これはダミー
              別のTextBoxの下に隠して置いてください。

CommandButton    CommandButton1 1
TextBox         TextBox5       2

フォームモジュール上に
Option Explicit
Dim PreCntl As String

'************* Frame 内 Start ******************
Private Sub Frame1_Enter()
  PreCntl = ""
End Sub
Private Sub Frame1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
  Me.TextBox4.SetFocus
End Sub
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
  TextBox5.Value = "1111" '動作確認の為
End Sub

Private Sub TextBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean)
  TextBox5.Value = "2222"
End Sub

Private Sub TextBox3_Exit(ByVal Cancel As MSForms.ReturnBoolean)
  TextBox5.Value = "3333"
End Sub

最後のTextBoxの時Tab及びEnterを押した時
Private Sub TextBox3_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
  If KeyCode = 9 Or KeyCode = 13 Then
    PreCntl = Me.CommandButton1.Name
  End If
End Sub

ダミーのTextBoxの処理 此処でFrameから外れる前に
手前のTextBoxのExitの処理を行う為
Private Sub TextBox4_Enter()
  Application.OnTime Now, "'ctlSetFocus """ & PreCntl & """'"
End Sub
'************* Frame 内 End ******************

Frameの外のコントロールへのフォーカス EnterイベントでctlFocusを呼ぶ
Private Sub CommandButton1_Enter()
  ctlFocus        ’Frame から直にクリックされた時用
End Sub

Private Sub TextBox5_Enter()
  ctlFocus        ’Frame から直にクリックされた時用
End Sub

コントロールへのSetFocus
Private Sub ctlFocus()
  If PreCntl = "" Then
    PreCntl = Me.ActiveControl.Name
    Application.OnTime Now, "'ctlSetFocus """ & PreCntl & """'"
  End If
End Sub

標準モジュールにOnTime用
コントロールへのSetFocus
Sub ctlSetFocus(ctlNm As String)
  If ctlNm = "" Then Exit Sub
  With UserForm1
    .Controls(ctlNm).SetFocus
  End With
End Sub

【64033】Re:テキストボックスのExitが処理されま...
お礼  ビギナー  - 10/1/11(月) 10:26 -

引用なし
パスワード
   返信が遅くなりまして申し訳ありません。
皆様本当にありがとうございます。

原因がExcel側のバグだというのには驚きましたが、それでも回避する方法は作り出されているのですね。
最終的には、角田さんからご紹介頂きました、ラベルで枠線を表現する方法により対応致しました。

今回は非常に助かりました。
ありがとうございました。

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