ユーザーフォームで入力画面を作成し
項目入力後、実行ボタンでEXCELファイルにデーターを転記
→ユーザーフォームの全表示データを空白にする。
→終了ボタンで、ユーザーフォームを閉じる
と言う処理で
ユーザーフォームに入力段階で、必須項目に入力(選択)漏れがあると
メッセージを表示させて入力を促したいのですが
Private Sub Combobox19_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If Combobox19 = "" Then
msgbox "処理区分を選択して下さい。"
Cancel=True
End If
上記のようにすると、最後に終了ボタンを押した時にも
メッセージが出てしまいます。
Exitを Keydownにすると、うまく行ったのですが
メッセージ表示後、Combobox19にフォーカスしたいのですが
次のboxにフォーカスしてしまいます...。
何か良い方法がありましたら、お教え下さいませ。
わかりづらいかもしれませんが、よろしくお願いします。
No.6ベストアンサー
- 回答日時:
> マウスでフォーカスを移した場合でも検知してくれるやり方って、
> ありますか?
#3 は元々のロジックを重視していたのですが、視点をかえて、
ロジックそのものを考えてみます。
一例をあげるなら、ComboBox に値がないと 次のコントロールに
入力できなくするとか?
新規フォームに以下のものを配置して、確認してみて下さい。
・ComboBox 1つ
・TextBox 2つ
・CommandButton 1つ
Private Sub UserForm_Initialize()
Dim i As Integer
For i = 0 To 10
Me.ComboBox1.AddItem "ITEM " & Format(i, "00")
Next i
Me.CommandButton1.Caption = "初期化"
Call CTRL_INIT
End Sub
Private Sub ComboBox1_Change()
Dim FLAG As Boolean
FLAG = Not (ComboBox1.Text = "")
With Me.TextBox1 'ComboBoxの値が必須のコントロール
.Enabled = FLAG
If FLAG Then
.Text = ""
Else
.Text = "(処理区分を選択して下さい)"
End If
End With
End Sub
Private Sub ComboBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If Me.ComboBox1.Text = "" Then
Cancel = True
End If
End Sub
Private Sub CommandButton1_Click()
Call CTRL_INIT
End Sub
Private Sub CTRL_INIT()
With Me
.ComboBox1.Text = ""
.TextBox1.Text = ""
.TextBox2.Text = ""
End With
Call ComboBox1_Change
Me.ComboBox1.SetFocus
End Sub
KenKen_SPさん!どうもありがとうございました!
魔法のようにうまく出来ました!!
(KenKen_SPさんにとっては普通のことなのかもしれませんが
私のような初心者にとっては、本当に魔法のようです。)
新規フォームでの確認方法まで教えて頂いたので、とてもわかりやすかったです。
実際の物に置き換えて試すとなると、頭がごちゃごちゃしてわからなくなってしまいそうになるところでしたので
本当に大助かりです!
本当に、本当に、ご親切にありがとうございました!!
No.5
- 回答日時:
#3 です。
ちょっと気になっていたのですが、、> Combobox19の区分によって表示させる内容や計算式が変わって
> くるんです・・・。
KeyPress イベントだと Combobox19 に入力しなくてもマウスで
フォーカスを移した場合、それを検知できないのだけれども、
それは大丈夫なのですか?
KenKen_SPさん、フォローありがとうございます。
そうなんですねー。
私もNo.4のWendy02さんに教えて頂いた方法を試してみてそのことに気がついたのですが
そのこと以外は、私がやりたかったことが全て嘘のように解決したので、その感動の方が大きくて
そのことは「まっ、いっか!」なんて、適当なヤツになってしまっていました。
もしかして、今の条件で、マウスでフォーカスを移した場合でも検知してくれるやり方って、ありますか?
聞いておいて大変申し訳ないのですが
大掛かりな変更とかになるのでしたら、この件はあきらめます…
もし、簡単に(例えばKeyDownを○○に変えればいいだけとか)出来ることでしたら
教えて下さいませ。
わがままですみません!
No.4
- 回答日時:
こんにちは。
Wendy02です。私は、以下のようなコードを使っています。
入力確定に何キーをお使いになるか、という問題のような気がします。通常は、Enter キー =13 ですね。他には、Tabキー =9 がありますね。必要に応じて、最初の除外部分をお決めになったらいかがでしょうか?それを入れないと、全てのキーのイベント・チェックが入ってしまいますね。
Private Sub ComboBox19_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode <> 13 Then Exit Sub
If ComboBox19.Value = "" Then
MsgBox "処理区分を選択して下さい。"
KeyCode = 0
End If
End Sub
Wendy02さん!!!涙ものでございますぅ!
私めなど、KeyCodeが何者かさえわからず、よくもこんなレベルで
VBAなどと言う物に手を出しているものだわと、ホントにお恥ずかしい限りです。
今回KeyDownを使うにあたっても、一覧からそれらしき物を順にやってみて
なんとなくこれが近いかなぁーなんて具合で…。
でも、Wendy02さんを筆頭に、ここの親切な方々のおかげ様を持ちまして
こんな私が、少しずつ、ホントに少しずつですが進歩(と言えるかどうか?!)している気がしています。
私の質問に対してWendy02さんが
よく 「私はこうしています」 と言う風に書いて下さることが、ホッとします…
私のやりたいことって、全く無謀なことではなく
そのような場面は、皆さんにも有り得ることなんだと思わせてもらえます。
これでも、本を見たり、自分なりに「あーでもない、こーでもない」とTRYしてみて
それでもどうにもならない時に、ここを利用させて頂くことにしているつもりです。
なんでもかんでも、「聞けばいいや」と言う風な考えではありませんので
「また、こいつ!」なんて、お思いにならず、今後とも色々助けて下さいませ!
長くなってしまい、申し訳ありませんでした。
本当にありがとうございました!!!
No.3
- 回答日時:
fk_sapさん、こんばんは。
Wendy02です。>Keydownにすると、うまく行ったのですが
それで、いいのだと思います。
そして、
>If Combobox19 = "" Then
>msgbox "処理区分を選択して下さい。"
>Cancel=True
のCance = True の代わりに、KeyCode = 0 にしてみてください。
Wendy02さん、おはようございます!
3日~6日まで休みだったので、ご回答を見せて頂くのが今朝になってしまいました。
Wendy02さんが教えて下さるのは、いつも私にとっては初めて教わることなので
「どれだけ考えても絶対にそこに行き着く訳ないよねー」と言うようなことで
それでいて、とっても単純明快で、わかりやすいですねー。
なのでいつも、まず感動、それから歓心、そして最後にやっと「勉強になったわー」って具合です!
余談が長くなってすみません!
よろしければ、もう1つお教え下さいますでしょうか?
教えて頂いたようにするとうまく行ったのですが
これは、Combobox19の▼から選択した場合のみ大丈夫なのですよねー。
これを、Combobox19に直接入力した場合や、そこにカーソルを合せて↓キーを押して選択した場合でも
メッセージが出ないようにはできませんでしょうか?
欲張りを言ってすみません。
よろしくお願いします。
No.2
- 回答日時:
こんにちは。
KenKen_SP です。QueryClose イベントでモジュールレベル変数のフラグを立てます。
こんな感じ。
'モジュールレベル変数のフラグ
Dim CLOSE_FLAG As Boolean
Private Sub Combobox19_Exit(ByVal Cancel As MSForms.ReturnBoolean)
'CLOSE_FLAG = False のときだけ入力チェックを行う
If CLOSE_FLAG = False And ComboBox19.Value = "" Then
MsgBox "処理区分を選択して下さい。"
Cancel = True
End If
End Sub
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
CLOSE_FLAG = True
End Sub
KenKen_SPさん、早速ご回答頂いたのにお礼が遅くなってしまい、申し訳ありません。
今、教えて頂いたコードを試してみたのですが
私の書き方(書く場所?)が間違っているのか、うまく行ってくれませんでした。
でも、私の少ない能力でこのコードを読んだ限りでは
なんかすごーく納得してしまっています!
またゆっくりと、このコードの意味をもっとしっかり理解して
書き方を勉強したいと思います。
ありがとうございました!
No.1
- 回答日時:
いくつがの方法がありますが・・・。
実行ボタンの処理ではいけませんか?
If Combobox19 = "" Then
msgbox "処理区分を選択して下さい。"
Combobox19.SetFocus
exit sub
End If
hana-hana3さん、早速ご回答頂いたのにお礼が遅くなってしまい、申し訳ありません。
なるほど、それでも処理は通るのですが
実行ボタンに行くまでに、他の入力部分が
Combobox19の区分によって表示させる内容や計算式が変わってくるんです・・・。
説明が不十分でした。
でも、他の場面で使えるかもしれないので覚えておきます。
ありがとうございました!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- Visual Basic(VBA) Excel VBAのリストボックスの値を他のフォームに反映させる方法を教えてください。 2 2023/07/14 14:06
- Visual Basic(VBA) VBA 参照先で選んだファイルをコピーし、出力先に別名で保存したい 8 2022/05/13 20:37
- その他(データベース) Accessフォームからパラメーターで表示したレコードを指定のExcelのセルへ転送する方法について 2 2022/08/22 18:04
- Access(アクセス) Access 登録ボタンからサブフォームの更新 1 2022/07/22 10:23
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Excel(エクセル) B列に文字がはいったらA列に数字が入るマクロードを完成させたい 4 2023/04/21 01:58
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- JavaScript ソースコードは下の共有コードサイト「張り紙」にあります。 入力フォームの javascript で 1 2022/05/11 11:01
- Visual Basic(VBA) エクセルのマクロについて教えてください。 7 2023/07/04 09:18
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Visual Basic 6.0 コンボボック...
-
WPFでの時刻入力コントロールに...
-
コントロールキーが押されたキ...
-
C# DateTimePicker をキー入力...
-
一定時間操作されないと自動で...
-
IEで、BackSpaceで「戻る」機能...
-
【VB】タブ切り替え時のイベント
-
特定のキーを押すまでループさ...
-
KEYPREVIEW=TRUEについて。意味...
-
コマンドボタン(入力)をクリッ...
-
NULLで検索を行ったときは全件...
-
(VBA)チェックボックスのclick...
-
「ご処理進めて頂きますようお...
-
エクセルで、日付を入力すると...
-
UPS警告音を止めたい
-
エクセルVBAで、MsgBox やInput...
-
CloseとDisposeの違い
-
DoEventsがやはり分からない
-
VBAでループ内で使う変数名を可...
-
VBA エンターキーでイベントに...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【VB】タブ切り替え時のイベント
-
特定のキーを押すまでループさ...
-
タブキー押下時のイベントをひ...
-
Visual Basic 6.0 コンボボック...
-
一定時間操作されないと自動で...
-
WPFでの時刻入力コントロールに...
-
(VBA)チェックボックスのclick...
-
コンボボックスにキー入力をさ...
-
VB.NETのDropDownListをReadOnl...
-
VB.NETでフォームがない...
-
NULLで検索を行ったときは全件...
-
Excel VBA マクロ実行中のみテンキ...
-
KEYPREVIEW=TRUEについて。意味...
-
エクセルVBAのテキストボック、...
-
テキストボックスの入力文字を1...
-
フォーカスについてお教えください
-
【Mouse Down】キーリピートを...
-
キーイベントを擬似的に発生さ...
-
VB6で電卓を作っているのですが...
-
複数のテキストボックスのカン...
おすすめ情報