フォーカスを固定したい

[戻る]
moe28 2002/08/20(火) 14:52:48
ユーザーフォームのTextBox1に文字を入力し
そのイベントを使って印刷命令をだしています

例えば

Private Sub TextBox1_Change()
 If TextBox1 = "P" Then
    Range("C6:F8").Select
    Selection.PrintOut Copies:=1, Collate:=True
 End If
End Sub

として印刷した場合、印刷後はTextBox1にフォーカスが
ないので マウスなどでTextBox1をクリックして戻しています

Private Sub TextBox1_Change()
 If TextBox1 = "P" Then
    Range("C6:F8").Select
    Selection.PrintOut Copies:=1, Collate:=True
  TextBox1.SetFocus 
 End If
End Sub

としてもダメです
TextBox1にフォーカスを固定して入力しながら
印刷したいのですがお知恵をお貸し下さい

べーちゃん 2002/08/21(水) 03:53:18
こんにちはmoe28さん

>TextBox1にフォーカスを固定して入力しながら
>印刷したいのですがお知恵をお貸し下さい

知恵を貸すのはかまわないですが、その前に「使用上の注意」は読まれましたか?
質問前に使用上の注意を読んでおくことは、このような掲示板でのルールです。
どうぞ、よろしくお願いします。 
開発環境は必要な情報です。(VCの場合だけではありません)

さて、ご質問の件はVBでなく、EXCELのVBAに関してだと思われます。
EXCELのVBAも95,97,2000,XPでアプローチが異なります。
とりあえず、EXCEL97でしたら、

If TextBox1 = "P" Then
    UserForm1.Hide
    Range("C6:F8").Select
    Selection.PrintOut Copies:=1, Collate:=True
    Range("A1").Select
    UserForm1.Show
End If

でうまくいくはずです。

moe28 2002/08/22(木) 01:43:24
失礼しました
環境は windows Me + Excel2000 です


残念ながらその方法では2度目にはイベントがきません

簡単のために全てのキーに反応するようにして
例えば
Private Sub TextBox1_Change()
    UserForm1.Hide
    Range("C6:F8").Select
    Selection.PrintOut Copies:=1, Collate:=True
    Range("A1").Select
    UserForm1.Show    
End Sub

としてテストした場合2度目以降のキーには反応しません?

またメモリも消費していくようです(ついにはエラーとなります)

べーちゃん 2002/08/22(木) 08:32:54
こんにちはmoe28さん

>残念ながらその方法では2度目にはイベントがきません

そんなことはないといいたいところなんですが、こちらで確認したのが
EXCEL97なんでそこまではいえないですね。

確認したいのですが、MaxLengthを1に設定していませんか?
changeイベントはキー入力によって発生するのではなく、テキストの
内容が変化したときに発生するイベントです。
従って、テキストボックスの内容が変化(change)しなければいくら
キー入力してもイベントは発生しません。changeイベントだからです。
本当にキー入力でイベント発生させたい場合はchangeイベントではなく、
KeyPressイベントまたはKeyDownイベントを使うべきです。

moe28 2002/08/22(木) 09:58:56
[[解決]]

>KeyPressイベントまたはKeyDownイベントを使うべきです

これではうまくいきました

しかしchangeイベントは
windows Xp + Excel2000 でも同じ現象がでます?
MaxLengthは初期設定0のままです
とりあえず changeイベントはさけるようにします

ありがとうございました

古いスレッドには追加発言できません。