• ベストアンサー
  • 暇なときにでも

VBA初心者なのですが(Userformについて)

まずは質問ご覧いただきありがとうございますm(_ _)m さっそくなのですが、次のプログラムを打つとSelect Caseのところで”指定されたオブジェクトは見つかりません”と出てしまうのですがなぜでしょうか。回答お待ちしております。 Private Sub CommandButton2_Click() Dim msg As String, i As Integer Dim ii As Integer, msg2 As String For i = 1 To 3 If Controls("CheckBox" & i).Value = True Then msg = msg & Controls("CheckBox" & i).Caption & vbCrLf End If Next i For ii = i To 2 If Controls("OptionBotton" & i).Value = True Then msg2 = msg2 & Controls("OptionBottob" & i).Caption & vbCrLf End If Next ii Select Case Controls("CheckBox" & i).Value & Controls("OptionBotton" & i).Value Case Controls("CheckBox" & i).Value = True & Controls("OptionBotton" & i).Value = False MsgBox msg & "がチェックされてます" Case Controls("CheckBox" & i).Value = False & Controls("OptionBotton" & i).Value = True MsgBox msg2 & "オン" Case Controls("CheckBox" & i).Value = True & Controls("OptionBotton" & i).Value = True MsgBox msg & "がチェックされています" & vbCrLf & msg2 & "オン" Case Else MsgBox "チェック又は、オンにしてください" End Select End Sub

共感・応援の気持ちを伝えよう!

  • 回答数2
  • 閲覧数627
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
  • 回答No.2
  • AoDoc
  • ベストアンサー率68% (100/147)

文字宣言から、"CheckBox" & i は文字と整数を加えていると思いますが、例えば、i=1の時、CheckBox1であるなら、"CheckBox" & str(i)等のようにするのが普通ですが。おそらく、CheckBox1のオブジェクトは無いと言うことになると思います。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

回答していただきありがとうございます。m(_ _)m CheckBox1についてはもう一度確認してみます。 あと、sir( )については知らなかったので試してみたいと思います。 ありがとうございました!

関連するQ&A

  • エクセル VBA OptionButtonからTextBox

    すいません! OptionButtonなら 下記の記述でエラー表示を 簡単にできるのですが これがOptionButtonではなく TextBoxならどのように変化したら 良いのでしょうか? すいません、教えて下さい! Private Sub 記録_Click() Dim i As Integer Dim Cnt As Integer Cnt = 0 For i = 1 To 6 Step 1 If Me.Controls("OptionButton" & i).Value Then Cnt = i Exit For End If Next i If Cnt = 0 Then MsgBox "選択されていません" Exit Sub End If If Me.Controls("Combobox" & Cnt).Value = "" Then MsgBox Me.Controls("OptionButton" & Cnt).Caption & " の内容が選択されていません" Exit Sub End If With 記入フォーム .TextBox5.Value = Me.Controls("OptionButton" & Cnt).Caption .TextBox6.Value = Me.Controls("Combobox" & Cnt).Value End With Unload Me End Sub

  • VBA チェックした項目以外を非表示

    現在下記のようなコードがあります。 C列に項目が入力されており そのC列に入力されている項目と同じ文字が ユーザーフォームのチェックボックスのキャプションになっています。 今回やりたいのはチェックボックスにチェックした項目以外を 非表示にしたいというものですが 現状は、1つだけのチェックなら正常に機能します。 2つ以上チェックしてしまうとオブジェクト名が大きい方が優先されて しまい1つだけの項目しか表示されません。 どのようにコードを書き換えればよろしいでしょうか? Private Sub CommandButton1_Click() Dim i As Integer Dim d As Date Dim y As Date Dim myMSG As String Dim myFlg As Boolean Dim rng As Range Dim rng2 As Range myFlg = False For i = 1 To 14 If Me.Controls("CheckBox" & i).Value = True Then myMSG = Me.Controls("CheckBox" & i).Caption myFlg = True End If Next i If myFlg = False Then GoTo Label1 End If Set rng2 = Range("C:C").Find(what:=myMSG, lookat:=xlWhole) If rng2 Is Nothing Then MsgBox Me.ComboBox1 & "日に" & myMSG & "は使用していません。", vbInformation Exit Sub Else For x = 2 To Range("C65536").End(xlUp).Row If Range("C" & x).Value <> myMSG Then Rows(x & ":" & x).EntireRow.Hidden = True End If Next x End If End Sub

  • VBAの解読依頼です。

    Windows2000、Access2000です。あるホームページよりVBAをコピーしました。内容としては起動時のShift+Enterを許すか否かというものです。 Function ChangeProperty(strPropName As String, varPropType , varPropValue) As Integer On Error GoTo エラー Dim dbs As Database, prp As Property Const conPropNotFoundError = 3270 Set dbs = CurrentDb dbs.Properties(strPropName) = varPropValue ChangeProperty = True Exit Function エラー: If Err = conPropNotFoundError Then Set prp = dbs.CreateProperty(strPropName,varPropType, varPropValue) dbs.Properties.Append prp Resume Next Else ChangeProperty = False Exit Function End If End Function Function NoShiftKey() Dim msg1 As String Dim msg2 As String msg1 = "有効" msg2 = "無効" Select Case InputBox("パスワード") Case 1234'パスワード ChangeProperty "AllowBypassKey", dbBoolean, True MsgBox msg1 Case 0 ChangeProperty "AllowBypassKey", dbBoolean, False MsgBox msg2 Case Else ChangeProperty "AllowBypassKey", dbBoolean, False MsgBox msg2 End Select End Function これをコマンドボタンクリック時のイベントにします。(参照設定にてDAO3.6にチェックをいれました。) しかし、「dbs.Properties(strPropName) = varPropValue」の一文で「プロパティが見つかりません。」と出ます。そこで、このVBAを解読して頂ける方、どこをどう直すべきなのか、是非ご教授ください。 よろしくお願いします。

その他の回答 (1)

  • 回答No.1

Selectで指定しているControls("CheckBox" & i).Valueのiってなんですか? 上のfor分でiを1から3まで回してますが、抜けてるので何もはいってないのでは?

共感・感謝の気持ちを伝えよう!

質問者からのお礼

まずは回答していただきありがとうございます。m(_ _)m ということは、select caseのときには何を値として指定すればいいのでしょうか? 一応、形としてはselect caseにTrueが入ってるかどうかで分岐をしていきたいとかんがえているのですが・・・ あとコメントみて気付いたのですが変数iiを設定したのにOptionBottonの際変数i を使っていました;。ありがとうございます。

関連するQ&A

  • VBA のメッセージボックスに・・・

    Private Sub CommandButton1_Click() Dim intMsg As Integer Dim x As Double x = Val(Cells(3, 2).Value) / Val(Cells(2, 2).Value) ^ 2 Cells(2, 5) = x intMsg = MsgBox("指数は&x&" & vbCrLf & "&z&です。") Select Case x Case 0 To 18 MsgBox "やせぎみ" Case 19 To 25 MsgBox "普通" Case 26 To 30 MsgBox "太り気味" Case Else MsgBox "危険" End Select End Sub ってプログラムを組んだのですが メッセージボックスに結果が表示されません。 計算して出た値を、メッセージボックス内のxとzで表示させたいのですが・・・ &ではさむ?だけではだめなんですか?

  • エクセルVBA 赤ペン先生をお願いします

    皆さんこんにちは。 エクセル2013使用しているVBA初心者です。 エクセルVBAでコードをど根性&こちらで質問させていただいた時のご回答を元に 作成してみたのですが思うような動作になりません。 下記のコードが美しくないのも重々承知しておりますが 下記内容で修正するべき個所を教えていただけないでしょうか。 やりたい事は ・ユーザーフォーム5でフレームが2個あり  1個は作成書類を7個から1つ選択  もう1個は支社を7個から1つ選択  →「次へ」のボタンを押すと「○○と△△支社を選択しています。お客様情報に~」のメッセージ表示  →OK→処理を続行します→OKならユーザーフォーム4(お客様情報)を開く   キャンセル→処理を中断します→ユーザーフォーム5を再度表示して選択し直せるように・・・   という事をやりたいのですが知識不足の上いくら参考書等を探しても これだ!というものにたどりつけずに困っています。 「○○と△△支社が選択されています」の箇所も myMSG & vbCrLf & "と" & myMSG & だと「△△と△△支社が選択されています」に なってしまうのは理解出来ているのですが代わりにいれるコードも分かりません。 また、「メッセージ表示のOK」を押して「処理を続行しますのキャンセル」を押しても ユーザーフォーム5に戻ることはなくユーザーフォーム4に 進んでしまう始末です。 毎度拙い質問文で申し訳ございませんが どうか皆様のお知恵をお借りできないでしょうか。 ※コードはコマンドボタン1(次へ)に書いてあります。 ---------------------------------------------------------------------------------- Private Sub CommandButton1_Click() Dim myMSG As String Dim i As Integer For i = 1 To 14 If Me.Controls("OptionButton" & i).Value = True Then myMSG = Me.Controls("OptionButton" & i).Caption End If If (OptionButton1 Or OptionButton2 Or OptionButton3 Or OptionButton4 Or OptionButton5 Or OptionButton6 Or OptionButton7) = False Then MsgBox ("作成する書類を選択して下さい") Me.Hide UserForm5.Show End If If (OptionButton8 Or OptionButton9 Or OptionButton10 Or OptionButton11 Or OptionButton12 Or OptionButton13 Or OptionButton14) = False Then MsgBox ("支社を選択して下さい") Me.Hide UserForm5.Show End If Next i intRtn = MsgBox(myMSG & vbCrLf & "と" & myMSG & "支社" & vbCrLf & "が選択されています。" & vbLf & _ "お客様情報に移動します。", _ vbOKCancel + vbExclamation + vbDefaultButton2, _ "作成書類選択") If intRtn <> vbOK Then MsgBox ("処理をキャンセルしました。") Me.Hide UserForm5.Show End If intRtn = MsgBox("処理を続行します。", vbOKCancel + vbExclamation + vbDefaultButton2, _ "作成書類選択") Unload UserForm5 UserForm4.Show If intRtn <> vbOK Then MsgBox ("処理をキャンセルしました。") Me.Hide UserForm5.Show End If End Sub Private Sub UserForm5_QueryClose(Cancel As Integer, CloseMode As Integer) 'Formが閉じるとき If CloseMode = 0 Then '×ボタンを押された場合 End 'プログラムの実行を終了 End If End Sub

  • エクセルでセルの値がTRUEかFALSEか判定

    Q3:R19の表があります。 Q列にはTRUEかFALSEが入りますが、空白や文字列の場合もあります。 R列には文字列です。 Q列でFALSEのセルだけ、同じ行のとなりのR列の文字列を順に抜き出し、メッセージボックスに表示したいのです。 下記のようなVBAを書いてみましたが、Q列が空白や文字列の場合まで抽出されてしまいます。 これを排除するいい方法はないでしょうか? Sub test01()   Dim msg As String   Dim i As Long   With Sheets("LOG")     For i = 3 To 19       If .Range("Q" & i).Value = False Then '        Debug.Print  i & "-" & .Range("R" & i).Value         msg = msg & .Range("R" & i).Value & vbCrLf       End If     Next i   End With   If msg <> "" Then     MsgBox msg & vbCrLf & "上記により不可です。", vbCritical   End If End Sub

  • VBA

    ~フォームの構文~の続きです。 '[確定]ボタンをクリックした時の処理 Private Sub ConfirmButton_Click() Const NumberColumn As String = "A" '転記先のシートにおいて連番を記入する列の列番号 Const DateColumn As String = "B" '転記先のシートにおいて意見が投書された日付を記入する列の列番号 Const DepartmentColumn As String = "C" '転記先のシートにおいて所属部署名を転記する列の列番号 Const TextColumn As String = "D" '転記先のシートにおいて投書内容を転記する列の列番号 Const myGroupName As String = "DepartmentSelect" '所属部署選択用のオプションボタンのGroupNameプロパティに設定した値 Dim StoragePath As String, PostFileName As String, PostSheetName As String _ , Department As String, myText As String, PostBook As Workbook _ , PostRow As Long, PostingOK As Boolean, myWindow As Window _ , buf As Variant, co As Control, myInformation As String _ Department = "": myText = "" For Each co In Opinion_Box.Controls If TypeName(co) = "OptionButton" Then If co.Value = True And co.GroupName = "DepartmentSelect" Then _ Department = co.Caption End If Next co myText = Contents_of_posting.Value myInformation = "" If Department = "" Then myInformation = "選択回答 " If myText = "" Then myInformation = myInformation & "その他" myInformation = Replace(RTrim(myInformation), " ", "と") If myInformation = "" Then Select Case MsgBox("下記の内容が入力されています。" & vbCrLf _ & "この内容でアンケートを送信してよろしいですか?" & vbCrLf _ & " [はい] : この内容でアンケートを送信します。" & vbCrLf _ & " [いいえ] : 入力フォームに戻って投書内容を修正します。" & vbCrLf _ & " [キャンセル] : 投書を中止して入力フォームを閉じます。" _ & vbCrLf & vbCrLf & "【】 " & Department _ & vbCrLf & vbCrLf & "【】 " & vbCrLf & myText _ , vbYesNoCancel + vbInformation, "アンケート内容確認") Case vbYes GoTo Label_Posting Case vbCancel Unload Me End Select Exit Sub Else If MsgBox( _ myInformation & "が入力されていません。" & vbCrLf & vbCrLf _ & "[再試行] : フォームでの入力に戻ります。" & vbCrLf _ & "[キャンセル] : 入力を中止し、フォームを閉じます。" _ , vbRetryCancel + vbExclamation, "未入力項目あり") _ = vbCancel Then Unload Me Exit Sub End If Label_Posting: myInformation = vbCrLf _ & "フォームに入力いただいた内容を投函することができません。" Call Confirm_posting_place(myInformation, PostingOK _ , StoragePath, PostFileName, PostSheetName) With Application .ScreenUpdating = False .Calculation = xlManual .DisplayAlerts = False End With buf = "" On Error Resume Next Set PostBook = Windows(PostFileName).Parent buf = PostBook.Path On Error GoTo 0 If buf = StoragePath Then Set myWindow = PostBook.Windows(1).NewWindow Else Set PostBook = Workbooks.Open(StoragePath & "\" & PostFileName) Set myWindow = PostBook.Windows(1) End If myWindow.Visible = False With PostBook .Windows(.Windows.Count).Visible = False ThisWorkbook.Activate With .Sheets(PostSheetName) PostRow = 0 PostRow = .Range(DateColumn & .Rows.Count).End(xlUp).Row + 1 .Range(NumberColumn & PostRow).Value _ = Int(WorksheetFunction.Max(.Columns(NumberColumn))) + 1 With .Range(DateColumn & PostRow) .Value = Date .NumberFormatLocal = "ggge""年""m""月""d""日""(aaa)" End With .Range(DepartmentColumn & PostRow).Value = Department .Range(TextColumn & PostRow).Value = myText End With End With With myWindow .Visible = True .Parent.Save .Close End With ThisWorkbook.Activate With Application .Calculation = xlAutomatic .ScreenUpdating = True .DisplayAlerts = True End With MsgBox "ありがとうございました!アンケート回答入力内容が送信完了しました。", vbInformation, "完了" Unload Me End Sub 以上です。宜しくお願いします。

  • 【VBA】【正規表現】

    23歳OLです。 VBAと正規表現についての質問です。 ▼やりたいこと ================================================ 1 | 0 |1234567890 | 2014-2-22 22:22:22.06+09 という数列から 1234567890 という数字のみを抜き出したいです。 正確には2本目の|と3本目の|の間に入っている様々な数字です。 ※桁数が固定されていません。 ================================================ ▼実際書いたコード ================================================ Sub Sample2() Dim RE, strPattern As String, i As Long, msg As String, reMatch Set RE = CreateObject("VBScript.RegExp") strPattern = "☆この部分☆" With RE .Pattern = strPattern .IgnoreCase = True .Global = True For i = 1 To 10 Set reMatch = .Execute(Cells(i, 1)) If reMatch.Count > 0 Then msg = msg & reMatch(0).Value & vbCrLf End If Next i End With MsgBox msg Set reMatch = Nothing Set RE = Nothing End Sub ================================================ ☆この部分に☆に何を入れればよいでしょう? ご指導よろしくおねがいします。

  • VBAでシート上のTEXTBOXの値を変更するとイベントが無限に入る。

    ExcelのVBAでシート上に貼り付けたCheckBoxで  内容を変更したくない場合、  下記のようなプログラムを作りました。 Private Sub CheckBox1_Click()     MsgBox "内容を変更しないでください"     If CheckBox1.Value = True Then       CheckBox1.Value = False     Else       CheckBox1.Value = True     End If End Sub すると、イベントが入りまくって、抜け出せなくなりました。 セルの場合は、Application.EnableEvents = False を使用してイベントを止めることができたのですが、 コントロールの場合は、そのような命令が見つかりません。 なにか良い手はないでしょうか。 よろしくお願いいたします。

  • エクセルVBAでOptionButtonのオンオフ取得

    ワークシート上に貼り付けてあるオプションボタンの状態の取得ですが、フォームのオプションボタンなら 例えば、 MsgBox ActiveSheet.OptionButtons("Option Button 44").Value で、オンなら1、オフなら-4146が返ります。 またActiveSheet.OptionButtons("Option Button 44").Value=xlOnで オンに出来ます。 ところがフォームじゃないコントロールツールボックスのオプションボタンは MsgBox ActiveSheet.Shapes("OptionButton30").Valueでも MsgBox ActiveSheet.Controls("OptionButton30").Valueでもエラーになります。 どうやって取得すればいいのでしょうか? どうやてOn Off を指示すればいいのでしょうか?

  • エクセルVBA 最終行にデータを追加する

    エクセルのユーザーフォームにチェックリストを用意しました CheckBox1~CheckBox5まであり、 CheckBox1をクリック(true)にすると、セルに“あ” CheckBox2をクリック(true)にすると、セルに“い” CheckBox3をクリック(true)にすると、セルに“う” CheckBox4をクリック(true)にすると、セルに“え” CheckBox5をクリック(true)にすると、セルに“お” を反映させようと思っています たとえば、 ・CheckBox1のみクリック(true)で、A1に“あ” ・CheckBox2のみクリック(true)で、A1に“い” ・CheckBox1、CheckBox3をクリック(true)で、A1に“あ”、A2に“う” ・CheckBox2~CheckBox5をクリック(true)で、A1に“い“、A2に“う“、A3に”え”、A4に“お” といった感じで、選んだチェック項目について、A列においてA1から次々とデータを入力しようとしています そこで、 sheets1.Range("A:A").Clear If CheckBox1.Value = True Then sheets1.Cells(Rows.Count, 1).End(xlUp) = "あ" End If If CheckBox2.Value = True Then sheets1.Cells(Rows.Count, 1).End(xlUp) = "い" End If If CheckBox3.Value = True Then sheets1.Cells(Rows.Count, 1).End(xlUp) = "う" End If If CheckBox4.Value = True Then sheets1.Cells(Rows.Count, 1).End(xlUp) = "え" End If If CheckBox5.Value = True Then sheets1.Cells(Rows.Count, 1).End(xlUp) = "お" End If としました (実際は、CheckBoxの名前が1~5と数字ではないので、forは使いませんでした) すると、 CheckBox1~CheckBox5を全てクリック(true)しても、A1に“お”が反映されるだけで“あ”~”え”が入力されません どうすれば、思い通りになるのでしょうか 初歩的な質問だと思うのですが、よろしくお願いします

  • エクセルVBAオプションボタンの選択画面に戻りたい

    皆さんこんにちは。 エクセルVBAの初心者です。 選択画面に戻るためのコードが足りていない感じなのですが・・ ご教授をお願いします。 ※エクセル2013を使用しています。 ユーザーフォーム1で作成書類を5種類から選択するようにしました。 選択後、「次へ」のボタンを押すと 『○○が選択されています。支社選択画面に移動します。』という メッセージが出るようにコードを作りました。 「OK」を押せば次の選択画面が開くように今後作っていく予定なのですが 「キャンセル」を押すとユーザーフォーム1が画面から消えるようになってしまっています。 やりたい事は「キャンセル」を押し『処理をキャンセルしました。』と メッセージが出た後に 最初のユーザーフォームで作成書類を選択し直すところに戻りたいのです。 私が作成したコードを記載しますので どこがどう間違っているのか、何が足りないのか ご教授いただければ幸いです。 ----------------------------------------------------- Private Sub CommandButton1_Click() Dim myMSG As String Dim i As Integer For i = 1 To 5 If Me.Controls("OptionButton" & i).Value = True Then myMSG = Me.Controls("OptionButton" & i).Caption End If Next i intRtn = MsgBox(myMSG & vbCrLf & "が選択されています。" & vbLf & _ "支社選択画面に移動します。", _ vbOKCancel + vbExclamation + vbDefaultButton2, _ "作成書類選択") If intRtn <> vbOK Then MsgBox "処理をキャンセルしました。" End End If intRtn = MsgBox("処理を続行します。", vbOKCancel + vbExclamation + vbDefaultButton2, _ "作成書類選択") If intRtn <> vbOK Then MsgBox "処理をキャンセルしました。" End End If End Sub

  • VBAでFunctionの使い方

    エクセルのVBAでFunctionの使い方がいまいちよくわかりません。 Function msg() Dim h As Integer h = Hour(Time) Select Case h Case Is < 12: msg = "おはようございます。" Case Is < 17: msg = "こんにちは。" Case Else: msg = "こんばんは。" End Select End Function Sub 挨拶() MsgBox msg End Sub とやってみたら一応正しく動くようですが、これであっているのでしょうか? 他の例などを見るとFunction msg()の()内にも何か入れなければならないようなのですが、わかりません。

専門家に質問してみよう