Excel VBA質問箱 IV

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

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


24923 / 76732 ←次へ | 前へ→

【57154】Re:Cancelの解除方法
発言  ichinose  - 08/7/29(火) 7:34 -

引用なし
パスワード
   おはようございます。

>>'If 入力データが妥当でないとき
>>
>>  If MsgBox("入力エラーです.再入力しますか?", vbOKCancel) = vbOk then
>>    Cancel = True
>>  Else
>>    Exit Sub
>>  End If
>>'End If
> にしましたが、再入力をしますでTextboxのデータを削除しますが、
>Textboxにフォーカスが移りません。
>フォーカスが出るようにしたいのですが、・・・・・

この現象Excel2002(2000でも)ではユーザーフォームがモードレスで
表示された場合でないと再現できません。

モーダルで表示した場合は、きちんとTextboxにフォーカスが戻ります。
もし、モーダルでもフォーカスが戻らない という現象なら、ExcelやWinのバージョンも
教えてください。

で、
「ユーザーフォームがモードレスで表示された場合」の現象だとして・・・。

新規ブックのユーザーフォーム(Userform1)に
  テキストボックス(TextBox1)
  コマンドボタン(Commandbutton1)

を配置してください。
 
Userform1のモジュールに

'===============================================================
Option Explicit
Private focus_obj As Object 'フォーカスを当てるコントロール
Private ev As Long '0--イべントを実行 その他--イベントを実行しない
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
 If ev <> 0 Then Exit Sub
 With TextBox1
   If IsNumeric(.Text) And (Val(.Text) Mod 3 = 0 Or InStr(.Text, "3") > 0) Then
    If MsgBox("3の倍数か3の付く数字は、馬鹿になるから駄目。再入力しますか?", vbOKCancel) = vbOK Then
      ev = 1
      .Visible = False
      .Text = ""
      Set focus_obj = TextBox1
      Me.Hide
      Me.Show vbModeless
      .Visible = True
      ev = 0
      Cancel = True
      End If
    End If
 End With
End Sub
'===================================================================
Private Sub UserForm_Activate()
  If Not focus_obj Is Nothing Then
    focus_obj.SetFocus
    Set focus_obj = Nothing
    End If
End Sub


標準モジュールに

'=====================================================================
Sub main()
  UserForm1.Show vbModeless
End Sub


これでmainを実行して、テキストボックスに「世界のナベアツが馬鹿になる数字」を
入力して試してみてください。


***************************************


このExitイベントは、色んな面で扱いが面倒です。
バグも多いし、配列の実現も難しいことをしないとできないし・・・。

私も実際には、neptuneさんの

>全部のデータ入力後何らかの処理をする前に、全てのデータの正当性をチェックし、問
>題がある時はそのTextBoxにフォーカスし、データを選択してやる

という方法で対処できるような仕様にしてしまいます。
つまり、Exitイベントでのエラーチェックを行わない方向で検討します。

0 hits

【57144】Cancelの解除方法 亜矢 08/7/28(月) 20:11 質問
【57146】Re:Cancelの解除方法 kanabun 08/7/28(月) 20:46 発言
【57149】Re:Cancelの解除方法 亜矢 08/7/28(月) 22:52 質問
【57150】Re:Cancelの解除方法 kanabun 08/7/29(火) 0:38 発言
【57151】Re:Cancelの解除方法 kanabun 08/7/29(火) 0:41 発言
【57152】Re:Cancelの解除方法 kanabun 08/7/29(火) 0:48 発言
【57153】Re:Cancelの解除方法 亜矢 08/7/29(火) 6:21 お礼
【57154】Re:Cancelの解除方法 ichinose 08/7/29(火) 7:34 発言
【57148】Re:Cancelの解除方法 neptune 08/7/28(月) 22:13 発言

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