プロが教える店舗&オフィスのセキュリティ対策術

エクセル2003 VBAでデータ入力フォームを作成中です。
データ2種類あり、2つのtextbox(t1 , t2)作りました。
t1のデータ入力後はEnterKeyでExitして
private SUB t1.exit(ByVal Cancel As MSForms.ReturnBoolean)
でエクセルのセル内への所定の場所に書き込みを実行しています。
ところが次にfocus(tabというのか)が移動する t2では 繰り返しデータを入力したいのです。ですからt1と同じようにしたのではEnterでt1にfocusが逃げてしまいます。データは2桁の数字です。Enterで確定してさらに繰り返しt2内でデータを入れ、0を入力しEnterしたときに初めてt1に移らせたいのです。EnterKeyBehaviorをtrueにするのか また
private SUB t2.Exit(ByVal Cancel As MSForms.ReturnBoolean)
で記述していいのかわかりません。教えてください。

A 回答 (3件)

No.1です。


t2に戻って新たに値を入力するのだから、Cancel = True の前後)どちらでもいいです)に
t2.Text = "" と入れてt2の内容をクリアしておくといいかもしれません。
    • good
    • 0
この回答へのお礼

明快な回答ありがとうございました。
無事 思い通りの
ものができました。
ありがとうございました。

お礼日時:2007/02/19 10:44

標準モジュールに


Public i
Public j
Sub test01()
i = 2
j = 2
UserForm1.Show
End Sub
iは明細最初行、jは明細最初列(B列)を指定。
ーーーー
Userform1にTextBox1とTextBox2を貼り付け。
TextBox1のイベントで
Private Sub TextBox1_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
Cells(i, 1) = TextBox1.Text
TextBox2.SetFocus
End Sub
---
TextBox2のイベントで
Private Sub TextBox2_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
If TextBox2.Text = "0" Then
TextBox2.Text = ""
i = i + 1
j = 2
Cancel = False
TextBox1.SetFocus
MsgBox "第" & i & "行目入力"
Else
Cells(i, j) = TextBox2.Text
TextBox2.Text = ""
j = j + 1
End If
Cancel = True
TextBox2.SetFocus
End Sub
<実行関係>
標準モジュールの
test01を実行する。
ーー
<入力のお約束。>
そして次ぎの操作を入力する。
(A)はテキストボックス1に入力
それ以外はテキストボックス2で入力。
(E)はENTERキーを押すことを意味す。
(0)は半角0とENTERキーを押す。(全角で0を入れないよう用心)。
(C)はESCキーを押すことを意味す。
ことを意味する。
テキストボックス1に対し、まず東京と入力しENTER。以下下記にしたがって入力する。
東京(A)国立(E)八王子(E)青梅(E)東村山(E) 0(E)
(ESC)(TXB1クリック)神奈川(A)横浜(E)相模原(E) 0(E)
(ESC)(TBX1クリック)京都(A)八幡向日常用(E)0(E)
以下略
東京国立八王子青梅東村山
神奈川横浜相模原
京都八幡向日常用
がシートに入力されます。
結構私にとって難しかった。不適当箇所もあるかも。ご参考に。
ーーー
しかしこの質問の発想は普通は使わないと思う。複雑になり、もろいプログラムに(操作によってはエラーが出やすい)なりやすいと思う。
    • good
    • 0
この回答へのお礼

詳しい回答を
ありがとうございました
参考になります。
imogasiさんには
たびたびお世話になります。

お礼日時:2007/02/19 10:49

こんにちは。


Exitイベントは、Cancel = True とすることで、イベントをキャンセル出来ます。
データを入力してExitイベントで入力したデータが0以外の時に処理をしてCancel = Trueにして元のテキストボックスに戻る、とすればいいでしょう。

Private SUB t2.Exit(ByVal Cancel As MSForms.ReturnBoolean)
If t2.Text <> "0" Then
'ここにデータに対する処理を書く
Cancel = True
End If
こんな感じでしょうか。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!