Excel VBA質問箱 IV

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

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


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

【42484】テキストボックスのカーソルについて ゆう 06/9/13(水) 10:59 質問[未読]
【42487】Re:テキストボックスのカーソルについて Kein 06/9/13(水) 11:24 発言[未読]
【42489】Re:テキストボックスのカーソルについて ゆう 06/9/13(水) 11:34 質問[未読]
【42493】Re:テキストボックスのカーソルについて Kein 06/9/13(水) 12:04 発言[未読]
【42496】Re:テキストボックスのカーソルについて ゆう 06/9/13(水) 12:50 お礼[未読]
【42499】Re:テキストボックスのカーソルについて ichinose 06/9/13(水) 13:17 発言[未読]
【42501】Re:テキストボックスのカーソルについて ゆう 06/9/13(水) 13:44 お礼[未読]
【42504】Re:テキストボックスのカーソルについて Jaka 06/9/13(水) 14:40 発言[未読]
【42490】Re:テキストボックスのカーソルについて Jaka 06/9/13(水) 11:37 発言[未読]
【42492】Re:テキストボックスのカーソルについて ゆう 06/9/13(水) 11:41 質問[未読]
【42494】Re:テキストボックスのカーソルについて Jaka 06/9/13(水) 12:09 回答[未読]
【42497】Re:テキストボックスのカーソルについて ゆう 06/9/13(水) 12:52 お礼[未読]
【42500】Re:テキストボックスのカーソルについて ハナ 06/9/13(水) 13:17 発言[未読]
【42502】Re:テキストボックスのカーソルについて ゆう 06/9/13(水) 13:47 お礼[未読]

【42484】テキストボックスのカーソルについて
質問  ゆう  - 06/9/13(水) 10:59 -

引用なし
パスワード
   お世話になります。

ユーザーフォーム内のテキストボックスに数値以外のもの(空白はOK)が入力された時
エラーメッセージを表示し、テキストボックスの入力値をクリアし、
もう一度入力を促すようにしたいのですが、
SetForcusを使っても、テキストボックスにカーソルがきません。
下記コードで間違っているところを教えてください。

Private Sub Tx_Set_Change()
 If IsNumeric(Tx_Set) = False And Tx_Set.Value <> "" Then
   MsgBox "Please input the numerical value."
   Tx_Set.Value = ""
 End If
   Tx_Set.SetFocus 
End Sub

【42487】Re:テキストボックスのカーソルについて
発言  Kein  - 06/9/13(水) 11:24 -

引用なし
パスワード
   Private Sub TextBox1_Change()
  Dim MyV As Variant

  MyV = TextBox1.Value
  If Not IsNumeric(MyV) And MyV <> "" Then
   MsgBox "その値は入力できません", 48
   Application.EnableEvents = False
   TextBox1.Value = ""
   Application.EnableEvents = True
  Else
   TextBox1.SetFocus
  End If
End Sub

↑こんなコードでテストしてみましたが、何も問題ないようでした・・。

【42489】Re:テキストボックスのカーソルについて
質問  ゆう  - 06/9/13(水) 11:34 -

引用なし
パスワード
   Kein さんへ

早速の回答ありがとうございました。
Keinさんのコードと同じように書いてみましたが、
出来ませんでした。

フォームを呼び出すプログラムの方で
Application.ScreenUpdating = False
を実行しています(シート間のコピー&貼り付けがあるので)
これが問題なんでしょうか?

これが問題としたら、対応策ってあるのでしょうか?

あつかましいですが、ご教授いただけたらと思っています。

【42490】Re:テキストボックスのカーソルについて
発言  Jaka  - 06/9/13(水) 11:37 -

引用なし
パスワード
   IsNumeric(TextBox1.Value)
これだと、全角数字も通っちゃいますが大丈夫でしょうか?

【42492】Re:テキストボックスのカーソルについて
質問  ゆう  - 06/9/13(水) 11:41 -

引用なし
パスワード
   ▼Jaka さん:
>IsNumeric(TextBox1.Value)
>これだと、全角数字も通っちゃいますが大丈夫でしょうか?

そこまで考えていませんでした。
えっと。。。全角数字もダメにするにはどうすればいいのでしょうか?

【42493】Re:テキストボックスのカーソルについて
発言  Kein  - 06/9/13(水) 12:04 -

引用なし
パスワード
   マクロの全体が見えないので、回答しようとすると推定になって
しまいますし、それ以前に何が問題なのかもイマイチはっきり分かりません。
フォーカス云々ということなら、Changeイベントでは初めから何も変化
しませんけど・・。

【42494】Re:テキストボックスのカーソルについて
回答  Jaka  - 06/9/13(水) 12:09 -

引用なし
パスワード
   こんな感じで良いと思います。

Private Sub TextBox1_Change()
If TextBox1.Value <> "" Then
  If Val(TextBox1.Value) <> TextBox1.Value Then
   MsgBox "NG"
  End If
End If
End Sub

Changeイベントを使っているのだから、フォーカスを戻す必要性が無いように思いますが...。

【42496】Re:テキストボックスのカーソルについて
お礼  ゆう  - 06/9/13(水) 12:50 -

引用なし
パスワード
   Kein さん

いろいろと回答していただき、ありがとうございました。
結局のところ、自分のやりたいことが、文面では伝わらず
不愉快な思いをさせてしまったのなら、すみませんでした。

【42497】Re:テキストボックスのカーソルについて
お礼  ゆう  - 06/9/13(水) 12:52 -

引用なし
パスワード
   jakaさん

回答ありがとうございました。
>Changeイベントを使っているのだから、フォーカスを戻す必要性が無いように
 思いますが...。

もう一度入力できるようにする時に、マウスでテキストボックスをさわらないと
入力できなくなってしまうので、カーソルをテキストボックスにもって
行きたかったのです。

結局のところ、原因がわからず、症状もウマく伝えられないので、
あきらめます。
ありがとうございました。



【42499】Re:テキストボックスのカーソルについて
発言  ichinose  - 06/9/13(水) 13:17 -

引用なし
パスワード
   皆さん、こんにちは。

>結局のところ、自分のやりたいことが、文面では伝わらず
>不愉快な思いをさせてしまったのなら、すみませんでした。
これから、VBAでプログラミングをやっていくつもりなら、
このくらいであきらめないことですよ。
人に自分の意思を文章で伝えるのは大変ですけどね!!

これモードレスでユーザーフォームを表示させると
現象が確認できました(Excel2002 SP-3)。


ユーザーフォーム(Userform1)に
  テキストボックス(Textbox1) と
  コマンドボタン(Commandbutton1)を
  一つずつ配置してください。

標準モジュールに

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


Userform1のモジュールに

'==========================================================
Private Sub TextBox1_Change()
 If IsNumeric(TextBox1) = False And TextBox1.Value <> "" Then
   MsgBox "Please input the numerical value."
   TextBox1.Value = ""
 End If
 With TextBox1
'  .Visible = False
'  DoEvents
'  .Visible = True
   .SetFocus
 End With

End Sub


上記のコードで数値以外を入力するとエラーメッセージ表示後、
フォーカスがTextbox1に戻りません!!

Changeイベントのコメントをはずして実行してみてください。
今度はフォーカスがTextbox1に戻ります。

試してみてください。

【42500】Re:テキストボックスのカーソルについて
発言  ハナ  - 06/9/13(水) 13:17 -

引用なし
パスワード
   ▼ゆう さん:
もう、見ていただけないかもしれませんが
私も以前、似たような問題でこちらに相談したことがありまして・・・
こんな回答をいただいてます。
http://www.vbalab.net/vbaqa/c-board.cgi?cmd=one;no=41633;id=excel

>結局のところ、原因がわからず、症状もウマく伝えられないので、
>あきらめます。

そんな寂しいじゃないですか〜。
原因なんですけど
ネプチューンさんが調べてくれてます
>イベントプロシジャーの中ではSETFOCUSが効かないみたいなんです
>調べました。バグくさいですね。XL2Kでも再現しますから。
>ユーザー フォームのイベントで SetFocus メソッドが正しく動作しない場合があ>る
>http://support.microsoft.com/default.aspx?scid=kb%3Bja%3B436443
自分の回答じゃなくて申し訳ありませんが・・・
あきらめるのは、止しましょうよ

【42501】Re:テキストボックスのカーソルについて
お礼  ゆう  - 06/9/13(水) 13:44 -

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

ありがとうございます!ウマく行きました!
説明が下手で、うまく表現できず、あきらめていたのですが、
本当に助かりました。

これを機会に、あきらめない気持ちを持つようにします。
プログラムだけでなく、プログラミングに対する姿勢まで
ご教授頂き、本当に感謝しています。

また、この場をお借りして、私のつたない文章を理解しようと
していただいた皆様に本当に感謝しております。
また、何かあればよろしくお願いします。
ありがとうございました。

【42502】Re:テキストボックスのカーソルについて
お礼  ゆう  - 06/9/13(水) 13:47 -

引用なし
パスワード
   ハナさん

回答ありがとうございます。
ハナさんを初め、皆さんのご協力にホント感謝しています。
プログラムの方は、うまく出来ました。

あきらめない事って大切だなと、実感しております。
親身に回答いただいた皆様に感謝しております。

ホントにホントにありがとうございました。

【42504】Re:テキストボックスのカーソルについて
発言  Jaka  - 06/9/13(水) 14:40 -

引用なし
パスワード
   モードレスだとメッセージボックス表示後にフォーカスがどっかいっちゃうんですね。
知りませんでした。

Private Sub TextBox1_Change()
 Cnt = 0
 If IsNumeric(TextBox1) = False And TextBox1.Value <> "" Then
   MsgBox "Please input the numerical value."
   'Application.EnableEvents = False '←残してあるけど無意味。
   TextBox1.Value = ""
   'Application.EnableEvents = True
 End If
 'バグっぽいですね。
 '↓入れておくと2回通っているのが解ります。
 'っていうか、フォーム上で Application.EnableEvents = False が効かないんだった。
 MsgBox Me.ActiveControl.Name
End Sub

あんまりと言うか、全く意味の無い駄レスですみません。

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