ユーザーフォームにコンボボックス2個textboxが2個あります
コンボは選択のみです。
コンボとtextbox1は入力必須にして、空欄でコマンドボタンが押された時はメッセージを表示したいです
OKwebを参考に作ったのですが、コンボ1が空欄でもMsgが出ません
願いします
Private Sub CommandButton1_Click()
Dim ctrl As Control, tst1 As String, txt2 As String
Dim ws As Worksheet
Set ws = Sheets("sheet1")
For Each ctrl In Me.Controls
Select Case ctrl.Name
Case "ComboBox1", "ComboBox2", "TextBox1"
If Me.Controls(ctrl.Name).Value = "" Then
txt1 = txt1 & ctrl.Name & vbLf
Else
txt2 = txt2 & Me.Controls(ctrl.Name).Value & vbLf
End If
End Select
Next
If Len(txt1) > 0 Then
MsgBox "以下の値を入力してください" & vbLf & txt1, vbExclamation
Exit Sub
Else
ret = MsgBox("以下の値を入力します" & vbLf & txt2, vbOKCancel)
If ret <> vbOK Then Exit Sub
No.2ベストアンサー
- 回答日時:
こんにちは。
バグらしいバグは掲載されたソースからは読み取れません。ComboBox に
どのようにデータを追加しているのか、どのようなデータなのかあたり
からも検証しないと。
また、ソースが途中で途切れてますよ。ちゃんと End Sub まで、掲載して
下さい。
とりあえず、新規ブックで Userform を挿入し、
・Textbox1
・ComboBox1
・ComboBox2
・CommandButton1
をそれぞれ配置してから、下記ソースを貼り付けて動かしてみて下さい。
Private ws As Worksheet
Private Sub UserForm_Initialize()
Set ws = Sheets("sheet1")
' // ComboBox 用テストデータ作成
ws.Cells.Delete
With ws.Range("A1:C10")
.Formula = "=""R""&ROW()&""C""&COLUMN()"
.Value = .Value
End With
With ws.Range("D1:D10")
.Formula = "=""ITEM""&ROW()"
.Value = .Value
End With
' // 選択 ONLY のコンボボックス(fmStyleDropDownList)に
' // データを追加する
With Me.ComboBox1
.Style = fmStyleDropDownList
.ColumnCount = 2
.List = ws.Range("A1:C10").Value
End With
With Me.ComboBox2
.Style = fmStyleDropDownList
.List = ws.Range("D1:D10").Value
End With
End Sub
' // Style が fmStyleDropDownList のコンボボックスで値を消去できるようにする
Private Sub ComboBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = 8 Or KeyCode = 46 Then ' 8:backspace / 46: delete key
ComboBox1.ListIndex = -1
End If
End Sub
Private Sub ComboBox2_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = 8 Or KeyCode = 46 Then ' 8:backspace / 46: delete key
ComboBox2.ListIndex = -1
End If
End Sub
Private Sub CommandButton1_Click()
Dim ctrl As Control, txt1 As String, txt2 As String
Dim ret As Integer
For Each ctrl In Me.Controls
Select Case ctrl.Name
Case "ComboBox1", "ComboBox2", "TextBox1"
If Len(Trim$(ctrl.Text)) = 0 Then
txt1 = txt1 & ctrl.Name & vbLf
Else
txt2 = txt2 & ctrl.Text & vbLf
End If
Case Else
End Select
Next
If Len(txt1) > 0 Then
MsgBox "以下の値を入力してください" & vbLf & txt1, vbExclamation
Exit Sub
Else
ret = MsgBox("以下の値を入力します" & vbLf & txt2, vbOKCancel)
If ret <> vbOK Then Exit Sub
End If
End Sub
追伸:: ....余計なお世話ですが。
■1点目: 変数名が違います。
> Dim ctrl As Control, tst1 As String, txt2 As String
txt1 As String ですよね。このようなミスを防ぐ意味で、Option Explicit
を宣言のうえ、プログラムを作成する習慣をつけた方が、上達が速いですよ。
■2点目: For Each ループについて
For Each ctrl In Me.Controls のループで
> Me.Controls(ctrl.Name).Value
とするのは、折角 For Each を使う意味が無くなってしまいますから、
そのまま ctrl.value とか、ctrl.text で使って下さい。
詳しくコードまで記入してくださりありがとうございます。
ソースが切れてしまったのは質問の文字数制限のためです…すみません
書いてくださったものを新しいBOOKで試したところうまくいき、自分のマクロに組み入れたところこちらでもうまく行きました!
If Me.Controls(ctrl.Name).Value = "" Thenの辺りが怪しかったでしょうかね。
こんなに早く解決できてしまうとはKenKen_SPさんありがとうございます。
追伸の内容は私も素人でまだまだ勉強不足なので今後気をつけたいと思います
delやbackspaceでコンボボックスの値を消去できるようにするというもの使わせていただきました。
delではうまくいくのですが、backspaceだと選択肢の最上位に行ってしまいますね。わたしだけでしょうか。
ありがとうございました
No.1
- 回答日時:
提示されたコードで試してみました。
当方のExcel2007では問題なく実行できています。
>コンボ1が空欄でもMsgが出ません
マクロは何事もなく、実行して終了されるということですか?
セルへの出力結果はどうなっていますか?
この回答への補足
早速ありがとうございます。
質問欄では文字制限があって説明が少なくなってしまいました。
コンボボックス1(日付)はSheet1の縦列を選択し、2(勘定項目)では横列を選択し、それによってテキストボックス(経費金額)の内容をどのセルへ入力するか決めます。
コンボボックス2やテキストボックス1を空欄にしてコマンドボタンを押すと、「以下の値を入力してください...」と空欄になっている場所を示すメッセージが表示されます。
しかしコンボボックス1を空欄にし、コンボボックス2とテキストボックス1を入力した状態でコマンドボタンを押すと、「以下の値を入力します」という、必須項目の入力はできている方のメッセージが表示されてしまいます。
実際このメッセージが表示されてもコンボボックス1が入力されていないのでセルへの出力はされません。
必須項目を入力した状態でコマンドボタンを押すと、「以下の値を入力します (コンボボックス1の内容、2の内容、テキストボックス1の内容)」と表示され、セルへの出力も行われます。
先ほどのコードから後の部分です。
r = Me.ComboBox1.ListIndex + 5 ’5行目からスタートする
c = Me.ComboBox2.ListIndex + 19 ’19列目からスタートする
If ws.Cells(r, c).HasFormula Then
ws.Cells(r, c).FormulaLocal = ws.Cells(r, c).FormulaLocal & "+" & TextBox1.Value
Else
ws.Cells(r, c).FormulaLocal = "=" & TextBox1.Value
End If
If ws.Cells(r, 18) = 0 Then
ws.Cells(r, 18) = Me.TextBox2.Text
Else
ws.Cells(r, 18).Value = ws.Cells(r, 18).Value & "," & TextBox2.Value
End If
End If
Set ws = Nothing
Me!ComboBox1 = Null’入力後は値をクリアする
Me!ComboBox2 = Null
Me!TextBox1 = Null
Me!TextBox2 = Null
End Sub
よろしくお願いします
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Visual Basic(VBA) エクセルのマクロについて教えてください。 3 2023/02/17 11:59
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Visual Basic(VBA) エクセルのマクロについて教えてください。 7 2023/07/04 09:18
- Excel(エクセル) VBAの指示の内容 昨日こちらでご教示頂いたのですが初心者な為、一つ一つの指示が何をやっているのかわ 2 2022/10/25 18:08
- Visual Basic(VBA) ①ExcelVBAでカレンダーを作り、別のユザーフォームで日付を入力したいのですがエラーになります。 1 2023/02/17 18:39
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Excel(エクセル) 2つのVBAを一緒にしたら機能しなくなりました(エクセル) 7 2022/06/02 12:41
- Visual Basic(VBA) エクセルのマクロについて教えてください。 3 2023/02/22 08:53
- Visual Basic(VBA) VBA処理追加 こちらでご教示頂いたのですが回答完了させてしまいましたのでこちらからまた質問させてく 2 2022/10/27 09:57
このQ&Aを見た人はこんなQ&Aも見ています
-
新NISA制度は今までと何が変わる?非課税枠の拡大や投資対象の変更などを解説!
少額から投資を行う人のための非課税制度であるNISAが、2024年に改正される。おすすめの銘柄や投資額の目安について教えてもらった。
-
エクセルVBAでテキストボックスに入力があった場合のみ、ワークシートに転記したい
Visual Basic(VBA)
-
VBA コンボボックスで選んだ値を取得するには
その他(Microsoft Office)
-
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
-
4
Excel VBA コンボボックスで空白を削除
その他(Microsoft Office)
-
5
コンボボックスにリストが表示されません・・・
Excel(エクセル)
-
6
【Excel VBA】コンボボックスで選択した値の取得
Excel(エクセル)
-
7
ユーザーフォームを表示中にシートの操作をさせるには
Excel(エクセル)
-
8
コンボボックスの文字によるif文の作成
Visual Basic(VBA)
-
9
EXCEL2013 VBA ListBox 未選択
Excel(エクセル)
-
10
ExcelのComboboxでマウスのスクロールを有効にしたい
Excel(エクセル)
-
11
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
12
VBA コンボボックスとテキストボックスを連結させたい
Visual Basic(VBA)
-
13
Excel-VBA>コントロールをグレイアウトするには?
Excel(エクセル)
-
14
フォームのテキストボックスが空白なら*"を入力する"
Excel(エクセル)
-
15
エクセルVBA オプションボタンのチェックを外したい
Excel(エクセル)
-
16
コンボボックス内の文字サイズ変更
Excel(エクセル)
-
17
条件に応じてコンボボックスの背景色を変えたいです
Excel(エクセル)
-
18
テキストボックスの番号を使ったFor~Next文について
Visual Basic(VBA)
-
19
エクセルVBAでマルチページの切り替え方法の件で
Excel(エクセル)
-
20
VBA:ユーザーフォームのマルチページに色を付けたい。
Word(ワード)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
首吊りどこ締めるの
-
至急!尿検査前日にオナニーし...
-
尿検査前日に自慰行為した時の...
-
白血球が多いとどんな心配があ...
-
尿検査の前日は自慰控えたほう...
-
検便についてです。 便は取れた...
-
彼女のことが好きすぎて彼女の...
-
勃起する時って痛いんですか? ...
-
EXCELで条件付き書式で空白セル...
-
腕を見たら黄色くなってる部分...
-
EXCELで式からグラフを描くには?
-
変な話しになります。尿検査で...
-
excelでsin二乗のやり方を教え...
-
エクセル指定した範囲からラン...
-
Excelで""で囲む方法
-
ある範囲のセルから任意の値を...
-
2つの数値のうち、数値が小さい...
-
精子が黄色?
-
エクセルでエラーが出て困って...
-
納豆食べた後の尿の納豆臭は何故?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
至急!尿検査前日にオナニーし...
-
首吊りどこ締めるの
-
尿検査の前日は自慰控えたほう...
-
尿検査前日に自慰行為した時の...
-
検便についてです。 便は取れた...
-
白血球が多いとどんな心配があ...
-
中出しをするとお腹が痛い・・・。
-
射精をして1週間以内に尿検査を...
-
彼女のことが好きすぎて彼女の...
-
腕を見たら黄色くなってる部分...
-
勃起する時って痛いんですか? ...
-
変な話しになります。尿検査で...
-
これって喉仏ですか? 私は女性...
-
EXCELで条件付き書式で空白セル...
-
男です。昨日の午後3時くらいに...
-
今朝、毎朝の習慣でオナニーし...
-
納豆食べた後の尿の納豆臭は何故?
-
1日前の検尿
-
値が入っているときだけ計算結...
-
精子が黄色?
おすすめ情報