• 締切済み

EXCEL_VBAでCheckBox等の未チェックをMsgBoxで返したい

EXCEL VBAで入力フォームとして、UserFormにTextBox,ComboBox,OptionnButton,CheckBoxが複数配置してあり、 入力が完了したらCommandButtonをクリックし、テンプレートシートの 各セルに値が反映されるようなBookを想定しています。 ここでCommandButtonをクリックした時に、各入力・チェック項目が抜けている場合、MsgBoxで「○○○に入力漏れがあります」と再入力を促し、全て入力が完了した場合にテンプレートシート(ActiveSheet)に値が反映され、MsgBoxで「入力内容に間違いがなければ印刷、やり直す場合は修正して下さい」と表示させたいのですが、エラー処理ができず、ご教示願えればと思っております。 よろしくお願いします。

みんなの回答

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

> エラー処理が出来ない と記載されていますが どのようなコードでチェックしようとして 何が問題を起こしているのかを具体化しましょう たとえば CheckBox1,2,3とOpttionButton1,2,3がある場合に dim nCheck(2) as Boolean dim nOption as Integer nCheck(0) = CheckBox1.Checked nCheck(1) = CheckBox2.Checked nCheck(2) = CheckBox3.Checked nOption = ( OptionButton1.Checked ) * 1 + _   (OptionButton2.Check) * 2 + ( OptionButton3.Checked ) * 3 if nCheck(0) + nCheck(1) + nCheck(2) = 0 then   MsgBox "チェックボックスが選択されていません" end if if nOption = 0 then   MsgBox "オプション(ラジオ)ボタンが選択されていません" end if といった具合のチェックをするだろうと思います

Shyrose
質問者

お礼

丁寧なご回答誠にありがとうございました。 返す値で条件判定をする方法は考えもつかなかったです。 なお、CheckBoxのメソッドにCheckedがなく、結果的にValueで 代用しています。 今後は、添削対象のコードも検討頂ければと思います。 本当にどうもありがとうございました。

関連するQ&A

  • VBAについて

    UserForm1に、TextBox2、TextBox3、ComboBox1があります。 例えば、それぞれに TextBox2 = 100 TextBox3 = 500 ComboBox1 = abc-def と値をフォームから入力し、 UserForm1に配置された「OK」ボタンをクリックすると、 エクセルシートのH10からM10の結合された一つのセルの中に 100 / 500 abc-def と2段表示させたいのですが、可能でしょうか。 可能でしたら方法を教えて下さい。

  • Excell(2003) VBA UserForm上のSheetの参照方法は

    Excell2003にてuserForm1にコントロールとしてスプレッドシートを載せています。 このuserForm1には、別にテキストボックス(textbox1)とコマンドボタンが二つ(commandButton1とCommandButton2)があります。 commandButton1がクリックされたとき、textbox1に入力された値をチェックしたのち、Me(userForm)上のSheet1の適当なセル(たとえばA2)にその値を入力したい。  また、CommandButton2がクリックされたときは、Sheet2のA2に入力したい。その場合Sheet2を表示する動作も必要です。  この場合 Q:本体のSheetではなく、フォーム上のSheetを指定する方法 Q:複数のSheetからなるフォーム上のspledSheetのいずれかを表示する方法  はどのようにしたら良いのでしょう。

  • エクセル VBA MsgBox

    1)下記の記述だと コンボが空白ならエラー表示が出て Okをクリックすると ”記録しますか?” となります! そこをエラー表示されたら UserFormに戻り 空白が無くなったら ”記録しますか?” というMegBoxにしたいのですが どう変化すれば良いのでしょうか? 教えて下さい! Private Sub CommandButton1_Click() Dim i As Integer For i = 1 To 10 If Controls("ComboBox" & i).Text = "" Then MsgBox "選択されていません確認して下さい!", vbInformation, "良く見て下さい!" Exit For End If Next If MsgBox("記録しますか?", vbOKCancel) = vbOK Then With UesrForm From.TextBox1 = Val(UesrFrom.ComboBox1) + _ Val(UesrFrom.ComboBox2) + Val(UesrFrom.ComboBox3) + _ Val(UesrFrom.ComboBox4) + Val(UesrFrom.ComboBox5) From.TextBox2 = Val(UesrFrom.ComboBox6) + _ Val(UesrFrom.ComboBox7) + Val(UesrFrom.ComboBox8) + _ Val(UesrFrom.ComboBox9) + Val(UesrFrom.ComboBox10) End With MsgBox " 記録します!" Unload Me Else MsgBox " キャンセル!!" End If End Sub

  • Excel2000 VBA シート名の変更

    なかなかうまくいかずに困っています。 Excel2000  OS:WindowsXp ユーザーフォーム(UserForm1)上に ・Textbox1 ・Textbox2 ・Commandbutton1 があります。 Commandbutton1をクリックすると、Textbox1とTextbox2の値をつなげた文字列を、 アクティブなワークシートの名前にしたいと思っています。 今現在の、うまく動かないコードは以下のとおりです。 Private Sub CommandButton1_Click() 'ユーザーフォーム上のCommandButton1 Dim snday As Variant 'Textbox1に入力される、『日』を取得するための変数 Dim snyoubi As Variant 'Textbox2に入力される『曜日』を取得するための変数 Dim namae As Variant 'シート名になる変数。 Dim Sh As Worksheet snday = UserForm1.TextBox1.Value snyoubi = UserForm1.TextBox2.Value namae = snday & snyoubi Sh.Name = namae End Sub これを実行すると、 実行時エラー’91’ オブジェクト変数または withブロック変数が設定されていません のエラーが出ます。 Sh.Name = namae のところを with ActiveSheet ~End with で挟んでみてもだめでした。 どなたかご教授ねがえませんか。 よろしくお願いいたします。

  • VBA コマンドボタンのキャプション名を変更に

    お手数をおかけします。 実は、ExcelのUserformに設置されている『CommandButton』のキャプション名を自由に変更できる様にしたいと考えています。 内容は、Userform1に『CommandButton』が10個設置しています。その10個設置しているCommandButtonのキャプション名を変更できる様に、もう一つのUserform2の方に TextBox1とComboBox1を設置しComboboxで変更したいCommandButtonを選択しTextBox1に 変更したい名を入力しUserform2のCommandButton1=決定を押すと自在にUserform1のCommandButtonのキャプション名を 変更できる様にしたいのですが、どの様にしたらできますでしょうか? 宜しくお願いしますm(__)m

  • エクセル VBA コンボボックスの計算

    UserForm1上に コンボボックスには数字がリストされます! ComboBox1、ComboBox2、ComboBox3 3つ作成して 例えば ComboBox1=1 ComboBox2=0 ComboBox3=5 と表示された時 CommandButton1をクリックしたら UserForm2の TextBox1に”6”と足し算 された数字を表示したいのですが 普通のセルなら 出来るのですが・・ ComboBoxでするなら どのような記述に なるのでしょうか? すいません、教えて下さい!

  • VBAで最終行の取得について

    UserFormのConboBoxで「○○」を選んで、 UserFormのTextBoxで『あいう』と入力すると、ワークシートに A      B 1 ○○   ×× 2 あいう と表示され、 UserFormのConboBoxで「××」を選んで、 UserFormのTextBoxで『アイウ』と入力すると A      B 1 ○○   ×× 2 あいう  アイウ 3 :    : と表示されるようにしたいと思います。 以下のプログラムまではできています。 ********************************************* Private Sub UserForm_Initialize()  Dim lasClm As Integer, i As Integer  lasClm = Sheet1.Range("A1").End(xlToRight).Column   For i = 1 To lasClm   ComboBox1.AddItem Sheet1.Cells(1, i).Value   Next i End Sub ********************************************* Private Sub CommandButton1_Click()  Select Case ComboBox1.Text  Case Sheet1.Cells(1, 1).Value '「○○」が選択  Sheet1.Cells(2, 1).Value = TextBox1.Text ・・・(1)  Case Sheet1.Cells(1, 2).Value '「××」が選択  Sheet1.Cells(2, 2).Value = TextBox1.Text ・・・(2)  End Select  UserForm1.Hide End Sub ********************************************** 今は(1)、(2)のように直接セルを指定しているのですが、 この部分を各列(A列、B列)の最終行の値を取得して、 最終行+1のセルに順次TextBoxに入力された値を代入していきたいのですが、 どのようにしたらよいのでしょうか。 しかし、A列とB列は同じように値が増えていくとは限りません。 例)    A     B 1 ○○   ×× 2 あいう  アイウ 3 かきく 4 さしす となる場合もあるので、A列とB列それぞれの最終行の値を取得したいと思っています。

  • VBAのチェックボックスについて

    □りんご (TextBox)個 □みかん (TextBox)個 □いちご (TextBox)個     : □ぶどう (TextBox)個 というのをUserFormのマルチページに配置しているのですが、 例えば、上記で「りんご」と「みかん」にチェックを入れて、各TextBoxに「5」と入力したら、エクセルシート(sheet("B5"))に『りんご-5個,みかん-5個』と表示させたいと思っています。(チェックの個数は制限なし) 今考えているのが、If文で各CheckBoxがTrueか判定していく方法です。 しかし、これでは考えられる組み合わせの数だけIf文ができてしまい、かなり長いプログラム(判定ばかり)になってしまいます。。 例えば、はじめに各CheckBoxでTrueか判定して、Trueの場合のみフラグを立てて、フラグが1のCheckBoxのLabelとTextBoxを表示できるようにしたいと思うのですが、どのようにしたらよいのでしょうか。 他に効率のよいプログラムがあれば教えて下さい。

  • MsgBoxの表示について

     ユーザーフォームのチェックボックスの選択後(複数選択可)コマンドボタンのクリックで各チェックボックスのマクロを実行するようにしていますが、下記コードだとマクロの実行後もMsgBoxが表示されてしまいますが(当たり前ですが)、これをコマンドボタンのみをクリックした場合のみMsgBoxを表示させることは可能でしょうか?お教え下さい。 Windows7・SP1 Office2010・SP2 Private Sub CommandButton1_Click() Sheets("編集").Select If CheckBox9 Then Unload UserForm6 変更後編集データの保存 End If If CheckBox10 Then Unload UserForm6 変更前編集データの保存 End If If CheckBox11 Then Unload UserForm6 指定勤務有あり編集データの保存 End If If CheckBox12 Then Unload UserForm6 指定勤務有なし編集データの保存 End If If CheckBox2 Then Unload UserForm6 日付データの保存 End If If CheckBox3 Then Unload UserForm6 個人情報の保存 End If MsgBox ("保存する編集データを選択してください。"), vbExclamation End Sub

  • EXCEL2003 VBA リストボックス

    お世話になります。 質問の内容についてですが、 現在VBAの勉強をしながらデータベースを組んでいます。 そこで、次のようなものを作っています。 Sheet1に於いて、     A    B     C 1  追番  名称   個数 2   1   りんご   1個 3   2   みかん  2個 4   3   なし    3個 5   4   なす    5個 というような表があるとします。 そして、VBAでフォームをつくり、TextBox1(名称入力用)、TextBox2(個数入力用)、ListBox1(すでに入力されているもの及び追加分のリスト用)、CommandButton1(入力された「名称」と「個数」をSheet1の表の一番下に追加)、CommandButton2(フォームを閉じる)という構成にしています。 また、Sheet1上にコマンドボタンを作っており、そのボタンを押すとフォームを呼出すようにしています。 流れとしては、既存の表に追加する場合、コマンドボタンを押してフォームを呼出し、テキストボックスに入力した内容をSheet1の一番下に追加する。また、フォーム上のリストボックスでも現在の表の内容を見る事ができる、というものです。 フォームでのコードは以下のようにしています。 Private Sub CommandButton1_Click() If TextBox1.Value = "" Then MsgBox "「名称」は必須項目です。" End If If TextBox2.Value = "" Then MsgBox "「個数」は必須項目です。" End If If TextBox2.Value = "0" Then MsgBox "「個数」に0は登録できません。" End If Lrow = Range("B2").CurrentRegion.Rows.Count Range("B" & Lrow + 1).Value = TextBox1.Value Range("C" & Lrow + 1).Value = TextBox2.Value End Sub Private Sub CommandButton2_Click() Unload UserForm1 End Sub Private Sub UserForm_Initialize() Dim b As Long Dim a() As String ReDim a(1 To 100) UserForm1.ListBox1.ColumnCount = 2 UserForm1.ListBox1.List = Worksheets(Sheet1).Range("B2:C").Value For i = 2 To 104 If Range("B" & i) = "" Then ListBox1.AddItem Range("B" & i).Value ListBox1.AddItem Range("c" & i).Value b = b + 1 a(b) = Range("C" & i).Value End If Next i End Sub このコードでSheet1上のコマンドボタンを押して実行しようとするとエラーが出てしまいます。 エラーの原因は何なのでしょうか? (なお、コマンドボタンのコードは「UserForm1.Show」のみです。 コード自体は本などを読みながら似たようなVBAを使った物を参考にしています。

専門家に質問してみよう