Excel VBA質問箱 IV

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

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


50567 / 76732 ←次へ | 前へ→

【31050】Re:大きなサイズのフォーム 再送
発言  ichinose  - 05/11/10(木) 7:53 -

引用なし
パスワード
   ▼年寄り さん:
おはようございます。

>ちょいとダウンしていた。『臭いメシ』ならぬ『不味いメシ』を食わされていた。ノートは持って行ったが、病室ではインターネットが使えない。応答に遅れて大変申し訳ない。とても気になっていた。
急に寒くなってきましたからねえ・・・。
なにせ、本日夕方から子供スケート教室の付き添いです。もう、冬ですね!!
お大事に!!


>
>質問1
>UserFormに直接貼り付けたTextBoxコントロールのイベントと、Classモジュールで今回作成したf_txtというTextbox(Msforms.Textbox)のイベントに違いがあります。Textbox(Msforms.Textbox)のイベントの方が少ない。何故ですか?
はい、おっしゃるとおりです。
特にEnter、Exit、Update(Before,After)とありませんよね?
本当の理由は私もわかりませんが、風の噂ではコンパイラー言語VBとの
格差だとか・・・。
これがあるので私は、Keydownというイベントにてデータチェックを行っている
場合が多いのですが・・・。

UserformのプロパティにActivecontrolというプロパティがあります。
このプロパティでアクティブになっている(フォーカスを持っている)コントロールが
取得できます。このプロパティの中身を監視して変化があったらイベントを発生させる
という手法が考えられますし、私もだいぶ前にそんなコードを見たことがあります。
(Excel2000からは、独自のイベントが作成できますからね)

汎用的に作るには、時間かかるかなあ・・(実用的か否かの検証も大変そう)。

角田さん、作ってないですかあ?


>
>質問2
>TextBoxコントロールのイベントAfterUpdateとBeforUpdateの区別がはっきりしません。後者がキャンセルを判断して(Cancel = True)コントロールの移動をしないだけならば、後者は前者を包含しているように思える。すなわち前者は必要ないように思えるが?

なるほど、微妙なタイミングですからねえ。

1 Beforeupdate

2 Afterupdate

3 Exit

この3つのイベントについてかんがえましょう!!
HELPどおりなら、1,2,3の順序でイベントは
発生します。

Updateイベントは、テキストボックスに変更があった場合、フォーカスが
次に移るタイミングで発生します。つまり、変更がなければ発生しない。

対して、Exitは、変更があろうがなかろうがフォーカスが
次に移るタイミングで発生します。
明らかに1,2と3にはイベントの発生に違いが見られますよね!!

では、
1,2は、

新規ブックに
Userform1を作成し、Textbox1とCommandbutton1を作成してください。
同じように
Userform2を作成し、Textbox1とCommandbutton1を作成してください

Userform1のモジュールに
'============================
Private Sub TextBox1_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
  If Not IsNumeric(TextBox1.Text) Then
    MsgBox "数字だけだよ"
    Cancel = True
    End If
End Sub
'=========================
Private Sub UserForm_Initialize()
  TextBox1.Text = "123"
End Sub


Useform2のモジュールに
'===========================================
Dim svcancel As Boolean
'===========================================
Private Sub TextBox1_AfterUpdate()
  If Not IsNumeric(TextBox1.Text) Then
    MsgBox "数字だけ"
    svcancel = True
  Else
    svcancel = False
    End If
End Sub
'==============================================================
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
  Cancel = svcancel
  svcancel = False
End Sub
'==============================================================
Private Sub UserForm_Initialize()
  svcancel = False
  TextBox1.Text = "123"
End Sub


このふたつのユーザーフォームで
TextBox1に数字以外をしてしみてください。
表示の違いとコードをよく見比べてみてください。
Cancel=Trueとしたときの後の動作に違いが出てきます。


>
>しかし今回も『ドラえもんのポケット』さながら、『ichinoseさんの魔法の手』(正確には『Excelの宝箱』?)はきっと何かを出すに決まっている。勝手にイベントを作ってしまう?
あっははは、そんなにすごければ、ここにくる必要もないんですが・・・。

確認してください。
2 hits

【13756】コントロール 年寄り 04/5/12(水) 19:58 質問
【13758】Re:コントロール ichinose 04/5/12(水) 22:01 回答
【13769】大きなサイズのフォーム 年寄り 04/5/13(木) 3:45 質問
【13771】Re:大きなサイズのフォーム ichinose 04/5/13(木) 8:15 発言
【13772】Re:大きなサイズのフォーム 年寄り 04/5/13(木) 8:57 お礼
【30550】Re:大きなサイズのフォーム 年寄り 05/10/30(日) 17:10 質問
【30570】Re:大きなサイズのフォーム 再送 ichinose 05/10/31(月) 7:37 発言
【30592】Re:大きなサイズのフォーム 再送 年寄り 05/10/31(月) 16:05 発言
【30605】Re:大きなサイズのフォーム 再送 年寄り 05/10/31(月) 19:47 発言
【30607】Re:大きなサイズのフォーム 再送 年寄り 05/10/31(月) 21:06 質問
【30608】Re:大きなサイズのフォーム 再送 ichinose 05/10/31(月) 21:42 発言
【30618】Re:大きなサイズのフォーム 再送 年寄り 05/11/1(火) 7:17 お礼
【30621】Re:大きなサイズのフォーム 再送 年寄り 05/11/1(火) 11:25 質問
【30622】Re:大きなサイズのフォーム 再送 ichinose 05/11/1(火) 12:16 発言
【30643】Re:大きなサイズのフォーム 再送 年寄り 05/11/1(火) 19:11 質問
【30645】Re:大きなサイズのフォーム 再送 ichinose 05/11/1(火) 20:16 発言
【30651】Re:大きなサイズのフォーム 再送 年寄り 05/11/1(火) 20:48 発言
【30658】Re:大きなサイズのフォーム 再送 ichinose 05/11/1(火) 22:41 発言
【31049】Re:大きなサイズのフォーム 再送 年寄り 05/11/10(木) 6:20 質問
【31050】Re:大きなサイズのフォーム 再送 ichinose 05/11/10(木) 7:53 発言
【31066】Re:大きなサイズのフォーム 再送 ichinose 05/11/11(金) 8:33 発言
【31111】Re:大きなサイズのフォーム 再送 年寄り 05/11/11(金) 17:16 発言
【31170】Re:大きなサイズのフォーム 訂正 ichinose 05/11/14(月) 8:12 発言
【31172】Re:大きなサイズのフォーム 訂正 年寄り 05/11/14(月) 8:47 発言

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