VBAユーザーフォーム作成のエラーについて

このQ&Aのポイント
  • VBA初心者がユーザーフォーム作成時にエラーが発生する問題について教えてください。
  • エラーメッセージ「実行時エラー”424”オブジェクトが必要です」が表示されます。
  • 正しいコードを書いたつもりなのですが、どこが間違っているのかわかりません。
回答を見る
  • ベストアンサー

VBAユーザーフォーム作成のエラーについて

VBA初心者です。 初心者ですので、本を見ながら作成していましたが、その通り作成したつもりがエラー表示が・・ シート上にユーザーフォームは出てくるようにして入力をしているのですが、ボタン(更新、追加、削除)やスピン移動をクリックすると「実行時エラー”424”オブジェクトが必要です”とでてきます。本の通りしたので何が悪かったのかよくわからなくなりました。 下記に本を見て作ったコードを書きますので教えて頂きたいです。素人すぎますので説明不足もありますが宜しくお願いします。 Private Sub Button更新_Click() データ書き込み (Spin移動.Value) End Sub Private Sub Button削除_Click() データ範囲.Rows(Spin移動.Value).Delete データ表示 (Spin移動.Value) Set データ範囲 = Range("A1").CurrentRegion Spin移動.Max = データ範囲.Rows.Count End Sub Private Sub Button終了_Click() 患者様データ.Hide End Sub Private Sub Button追加_Click() Dim AddRow As Integer AddRow = データ範囲.Rows.Count + 1   ←この部分でエラー データ書き込み (AddRow) Textレコード.Text = Spin移動.Value - 1 & "/" & レコード数取得 Set データ範囲 = Range("A1").CurrentRegion Spin移動.Max = データ範囲.Rows.Count Spin移動.Value = データ範囲.Rows.Count データ表示 (AddRow) End Sub Private Sub MultiPage1_Change() End Sub Private Sub Option女_Click() End Sub Private Sub Option男_Click() End Sub Private Sub Spin移動_Change() If データ範囲.Rows.Count <> 1 Then データ表示 (Spin移動.Value) End If End Sub Private Sub TextIIIIV音_Change() End Sub Private Sub Text患者ID_Change() End Sub Private Sub Text生年月日_AfterUpdate() Text年齢.Value = DateDiff("yyyy", Text生年月日.Value, Now()) End Sub Private Sub UserForm_Initialize() Dim TBL(1 To 9) As Control Dim データ範囲 As Range Combo診療科.ColumnCount = 1 Combo診療科.AddItem "内科" Combo診療科.AddItem "外科" Combo診療科.AddItem "小児科" Combo主治医.ColumnCount = 1 Combo主治医.AddItem "今中尚子" Combo主治医.AddItem "岡井康葉" Set TBL(1) = Text患者ID Set TBL(2) = Text氏名 Set TBL(3) = Text生年月日 Set TBL(4) = Frame性別 Set TBL(5) = Combo診療科 Set TBL(6) = Combo主治医 Set TBL(7) = Text入院日 Set TBL(8) = Text退院日 Set TBL(9) = Combo指導医 Set データ範囲 = Range("A1").CurrentRegion Spin移動.Max = レコード数取得 + 1 If データ範囲.Rows.Count = 1 Then Else データ表示 2 End If End Sub Public Sub データ表示(行数 As Integer) Dim Cnt As Integer For Cnt = 1 To 9 Select Case Cnt Case 4 If データ範囲.Cells(行数, Cnt).Value = "男" Then Option男.Value = True Else Option女.Value = True End If Case Else Dim S For Cnt = 1 To 9 S = データ範囲cells(行数, Cnt).Value Next End Select Next If IsDate(Text生年月日.Text) Then Text年齢.Value = DateDiff("yyyy", Text生年月日.Value, Now()) Else Text年齢.Value = Null End If Textレコード.Value = Spin移動.Value - 1 & "/" & レコード数取得 End Sub Public Sub データ書き込み(行数 As Integer) Dim Cnt As Integer For Cnt = 1 To 9 Select Case Cnt Case 4 If Option男.Value = True Then データ範囲.Cells(行数, Cnt).Value = "男" Else データ範囲.Cells(行数, Cnt).Value = "女" End If Case Else データ範囲.Cells(行数, Cnt).Value = TBL(Cnt).Value End Select Next End Sub Public Function レコード数取得() As Integer レコード数取得 = Range("A1").CurrentRegion.Rows.Count - 1 End Function

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

  • ベストアンサー
  • goota33
  • ベストアンサー率53% (7/13)
回答No.1

エラーが起きた部分より上側に、以下の二行を入れれば 正しく動作するのではないでしょうか。 Dim データ範囲 As Range Set データ範囲 = Range("A1").CurrentRegion たぶんユーザーフォームを表示するときに本来入っていたはずの値が初期化されてしまって、 値が入ってない状態になってるのが原因だと思います。 なので同じ関数の中でまた「データ範囲」変数の値を入れ直してあげれば プログラムは動くのではないかと。。。

shinarika
質問者

お礼

goota33様 ありがとうございます。上記に関しては解決しました。すみません。もう一つ問題が発生。またも質問していいですか?入力後「データ書き込み」と「データ表示」のデータ範囲.Cells(行数,Cnt).Value=TBL(Cnt).ValueのTBLの部分で青くなり、SubまたはFunctionが定義されていません。と表示されます。どうしてでしょうか?本当初心者すぎてすみませんが教えて頂きたいです。

関連するQ&A

  • ユーザーフォームがエラーになってしまって困っています。

    VBA初心者なので、テキスト本を参考にユーザーフォームを作ったのですが、エラーになってしまって困っています。 フォーム上のコンボボックス、テキストボックスに入力した値をワークシート上に転記したいのですがエラーが出てしまって先に進めずに困っています。 どなたかお力をお貸し頂けませんでしょうか? Option Explicit Dim TBL(1 To 8) As Control Dim データ範囲 As Range ---------------------------- Private Sub UserForm_Initialize() With Combo会社名 .MatchEntry = fmMatchEntryFirstLetter .ColumnCount = 2 .TextColumn = 1 End With With Combo住所1 .AddItem "東京都" .AddItem "埼玉県" .AddItem "神奈川県" End With Set TBL(1) = Textコード番号 Set TBL(2) = Text登録年月日 Set TBL(3) = Combo住所1 Set TBL(4) = Combo会社名 Set TBL(5) = Text郵便番号 Set TBL(6) =Text住所2 Set TBL(7) = Text 住所3 Set TBL(8) = Text電話番号 Set データ範囲 = Range("A1").CurrentRegion Spin移動.Max = レコード数取得 + 1 If データ範囲.Rows.Count = 1 Then Else データ表示 2 End If End Sub ---------------------------------------- Public Function レコード数取得() As Integer レコード数取得 = Range("A1").CurrentRegion.Rows.Count - 1 End Function ---------------------------------------- Public Sub データ表示(行数 As Integer) Dim Cnt As Integer For Cnt = 1 To 19 TBL(Cnt).Value = データ範囲.Cells(行数, Cnt).Value  ---この部分でエラー Next Textレコード.Value = Spin移動.Value - 1 & "/" & レコード数取得 End Sub ------------------------------------- Private Sub Spin移動_Change() If データ範囲.Rows.Count <> 1 Then データ表示 (Spin移動.Value) End If End Sub ------------------------------------ Private Sub Button追加_Click() Dim AddRow As Integer AddRow = データ範囲.Rows.Count + 1 データ書き込み (AddRow) Textレコード.Text = Spin移動.Value - 1 & "/" & レコード数取得 Set データ範囲 = Range("A1").CurrentRegion Spin移動.Max = データ範囲.Rows.Count Spin移動.Value = データ範囲.Rows.Count データ表示 (AddRow) End Sub ------------------------------------- Private Sub Button更新_Click() データ書き込み (Spin移動.Value) End Sub ------------------------------------- Public Sub データ書き込み(行数 As Integer) Dim Cnt As Integer For Cnt = 1 To 19 データ範囲.celles(行数, Cnt).Value = TBL(Cnt).Value Next End Sub -------------------------------------- Private Sub Button終了_Click() ActiveWorkbook.Save Application.DisplayAlerts = False Unload Me ActiveWorkbook.Close Application.Quit End Sub

  • コンパイルエラーSubまたはFunction定義

    VBAユーザーフォーム作成の上記エラーについて VBA初心者です。 初心者ですので、本を見ながら作成していましたが、その通り作成したつもりがエラー表示が・・ シート上にユーザーフォームは出てくるようにして入力をしているのですが、ボタン(更新、追加、削除)やスピン移動をクリックすると「コンパイルエラー SubまたはFunctionが定義されていません」とでてきます。本の通りしたので何が悪かったのかよくわからなくなりました。 下記に本を見て作ったコードを書きますので教えて頂きたいです。素人すぎますので説明不足もありますが宜しくお願いします。 Private Sub Button更新_Click() データ書き込み (Spin移動.Value) End Sub Private Sub Button削除_Click() データ範囲.Rows(Spin移動.Value).Delete データ表示 (Spin移動.Value) Set データ範囲 = Range("A1").CurrentRegion Spin移動.Max = データ範囲.Rows.Count End Sub Private Sub Button終了_Click() 患者様データ.Hide End Sub Private Sub Button追加_Click() Dim AddRow As Integer AddRow = データ範囲.Rows.Count + 1   データ書き込み (AddRow) Textレコード.Text = Spin移動.Value - 1 & "/" & レコード数取得 Set データ範囲 = Range("A1").CurrentRegion Spin移動.Max = データ範囲.Rows.Count Spin移動.Value = データ範囲.Rows.Count データ表示 (AddRow) End Sub Private Sub MultiPage1_Change() End Sub Private Sub Option女_Click() End Sub Private Sub Option男_Click() End Sub Private Sub Spin移動_Change() If データ範囲.Rows.Count <> 1 Then データ表示 (Spin移動.Value) End If End Sub Private Sub TextIIIIV音_Change() End Sub Private Sub Text患者ID_Change() End Sub Private Sub Text生年月日_AfterUpdate() Text年齢.Value = DateDiff("yyyy", Text生年月日.Value, Now()) End Sub Private Sub UserForm_Initialize() Dim TBL(1 To 9) As Control Dim データ範囲 As Range Combo診療科.ColumnCount = 1 Combo診療科.AddItem "内科" Combo診療科.AddItem "外科" Combo診療科.AddItem "小児科" Combo主治医.ColumnCount = 1 Combo主治医.AddItem "今中尚子" Combo主治医.AddItem "岡井康葉" Set TBL(1) = Text患者ID Set TBL(2) = Text氏名 Set TBL(3) = Text生年月日 Set TBL(4) = Frame性別 Set TBL(5) = Combo診療科 Set TBL(6) = Combo主治医 Set TBL(7) = Text入院日 Set TBL(8) = Text退院日 Set TBL(9) = Combo指導医 Set データ範囲 = Range("A1").CurrentRegion Spin移動.Max = レコード数取得 + 1 If データ範囲.Rows.Count = 1 Then Else データ表示 2 End If End Sub Public Sub データ表示(行数 As Integer) Dim Cnt As Integer For Cnt = 1 To 9 Select Case Cnt Case 4 If データ範囲.Cells(行数, Cnt).Value = "男" Then Option男.Value = True Else Option女.Value = True End If Case Else Dim S For Cnt = 1 To 9 S = データ範囲cells(行数, Cnt).Value Next End Select Next If IsDate(Text生年月日.Text) Then Text年齢.Value = DateDiff("yyyy", Text生年月日.Value, Now()) Else Text年齢.Value = Null End If Textレコード.Value = Spin移動.Value - 1 & "/" & レコード数取得 End Sub Public Sub データ書き込み(行数 As Integer) Dim Cnt As Integer For Cnt = 1 To 9 Select Case Cnt Case 4 If Option男.Value = True Then データ範囲.Cells(行数, Cnt).Value = "男" Else データ範囲.Cells(行数, Cnt).Value = "女" End If Case Else データ範囲.Cells(行数, Cnt).Value = TBL(Cnt).Value ←このTBLの部分で青くなり上記エラー End Select Next End Sub Public Function レコード数取得() As Integer レコード数取得 = Range("A1").CurrentRegion.Rows.Count - 1 End Function

  • コンパイルエラーSubまたはFunction定義

    VBAユーザーフォーム作成の上記エラーについて VBA初心者です。 初心者ですので、本を見ながら作成していましたが、その通り作成したつもりがエラー表示が・・ シート上にユーザーフォームは出てくるようにして入力をしているのですが、ボタン(更新、追加、削除)やスピン移動をクリックすると「コンパイルエラー SubまたはFunctionが定義されていません」とでてきます。本の通りしたので何が悪かったのかよくわからなくなりました。 下記に本を見て作ったコードを書きますので教えて頂きたいです。素人すぎますので説明不足もありますが宜しくお願いします。 Private Sub Button更新_Click() データ書き込み (Spin移動.Value) End Sub Private Sub Button削除_Click() データ範囲.Rows(Spin移動.Value).Delete データ表示 (Spin移動.Value) Set データ範囲 = Range("A1").CurrentRegion Spin移動.Max = データ範囲.Rows.Count End Sub Private Sub Button終了_Click() 患者様データ.Hide End Sub Private Sub Button追加_Click() Dim AddRow As Integer AddRow = データ範囲.Rows.Count + 1   データ書き込み (AddRow) Textレコード.Text = Spin移動.Value - 1 & "/" & レコード数取得 Set データ範囲 = Range("A1").CurrentRegion Spin移動.Max = データ範囲.Rows.Count Spin移動.Value = データ範囲.Rows.Count データ表示 (AddRow) End Sub Private Sub MultiPage1_Change() End Sub Private Sub Option女_Click() End Sub Private Sub Option男_Click() End Sub Private Sub Spin移動_Change() If データ範囲.Rows.Count <> 1 Then データ表示 (Spin移動.Value) End If End Sub Private Sub TextIIIIV音_Change() End Sub Private Sub Text患者ID_Change() End Sub Private Sub Text生年月日_AfterUpdate() Text年齢.Value = DateDiff("yyyy", Text生年月日.Value, Now()) End Sub Private Sub UserForm_Initialize() Dim TBL(1 To 9) As Control Dim データ範囲 As Range Combo診療科.ColumnCount = 1 Combo診療科.AddItem "内科" Combo診療科.AddItem "外科" Combo診療科.AddItem "小児科" Combo主治医.ColumnCount = 1 Combo主治医.AddItem "今中尚子" Combo主治医.AddItem "岡井康葉" Set TBL(1) = Text患者ID Set TBL(2) = Text氏名 Set TBL(3) = Text生年月日 Set TBL(4) = Frame性別 Set TBL(5) = Combo診療科 Set TBL(6) = Combo主治医 Set TBL(7) = Text入院日 Set TBL(8) = Text退院日 Set TBL(9) = Combo指導医 Set データ範囲 = Range("A1").CurrentRegion Spin移動.Max = レコード数取得 + 1 If データ範囲.Rows.Count = 1 Then Else データ表示 2 End If End Sub Public Sub データ表示(行数 As Integer) Dim Cnt As Integer For Cnt = 1 To 9 Select Case Cnt Case 4 If データ範囲.Cells(行数, Cnt).Value = "男" Then Option男.Value = True Else Option女.Value = True End If Case Else Dim S For Cnt = 1 To 9 S = データ範囲cells(行数, Cnt).Value Next End Select Next If IsDate(Text生年月日.Text) Then Text年齢.Value = DateDiff("yyyy", Text生年月日.Value, Now()) Else Text年齢.Value = Null End If Textレコード.Value = Spin移動.Value - 1 & "/" & レコード数取得 End Sub Public Sub データ書き込み(行数 As Integer) Dim Cnt As Integer For Cnt = 1 To 9 Select Case Cnt Case 4 If Option男.Value = True Then データ範囲.Cells(行数, Cnt).Value = "男" Else データ範囲.Cells(行数, Cnt).Value = "女" End If Case Else データ範囲.Cells(行数, Cnt).Value = TBL(Cnt).Value ←このTBLの部分で青くなり上記エラー End Select Next End Sub Public Function レコード数取得() As Integer レコード数取得 = Range("A1").CurrentRegion.Rows.Count - 1 End Function

  • Excel VBA ユーザフォームの検索について

    添付の画像のようなユーザフォームを作っています。 TextBox1に検索ワードを入力して、CommandButton1をクリックすると、下のComboBox1に一覧が出るようにしたいと思い、ほかのサイトから下記のコードを見つけて、作ってみました。参照先のsheet2を表示しているときは大丈夫なのですが、別のシートを選んでいるとエラーになります。 sheetは3つあり、それぞれ違うリストが入力されています。今回はsheet2のリストを参照したいのですが、最初はsheet1が表示されている状態で実行したいです。 エラーの内容は 実行時エラー9 インデックスが有効範囲にありません。 コチラがコードです。 Private Sub UserForm_Initialize() Dim i As Long, imax As Long Dim tbl() As Variant imax = ThisWorkbook.Worksheets("sheet2").Cells(Rows.Count, "A").End(xlUp).Row ReDim tbl(imax) For i = 1 To imax tbl(i) = Range("A" & i).Value Next i With ComboBox1 .List() = tbl() End With End Sub Private Sub CommandButton1_Click() Dim i As Long, imax As Long Dim tbl() As Variant Dim cnt As Long, j As Long j = -1 With ThisWorkbook.Worksheets("sheet2") imax = .Cells(Rows.Count, "A").End(xlUp).Row cnt = Application.CountIf(Range("A1:A" & imax), "*" & TextBox1.Text & "*") ReDim tbl(cnt) For i = 1 To imax If InStr(.Range("A" & i), TextBox1.Text) > 0 Then j = j + 1 tbl(j) = Range("A" & i).Value ←この部分がエラーになる End If Next i End With With ComboBox1 .List() = tbl() End With End Sub どこを直せば良いか、教えてください。 よろしくお願いします。

  • VBA ユーザーフォーム

    VBA初心者です。以下の様なソースを見つけました。この場合は、文字を検索するとD1 にその該当番号が表示されます。 ※A列には番号、B列には文字列 そうではなく、そのクリックした行のA列にセルが移動し、ユーザーフォームが閉じられる様にできますでしょうか? よろしくお願い致します。 Private Sub ListBox1_Click() Sheets("Sheet1").Range("D1").Value = ListBox1.Value End Sub Private Sub TextBox1_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean) Dim v() As Variant Dim c As Range Dim k As Long ListBox1.Clear With Sheets("Sheet1") With .Range("A1", .Range("A" & .Rows.Count).End(xlUp)) ReDim v(1 To 2, 1 To .Rows.Count) For Each c In .Cells If c.Offset(, 1).Value Like TextBox1.Value & "*" Then k = k + 1 v(1, k) = c.Value v(2, k) = c.Offset(, 1).Value End If Next If k = 0 Then MsgBox "指定の値は存在しません" Else ReDim Preserve v(1 To 2, 1 To k) ListBox1.List = WorksheetFunction.Transpose(v) End If End With End With End Sub

  • ユーザーフォームに教えてください!

    病院に勤めている者ですが、今エクセルで患者さまデータを作成しており、ユーザーフォームを使って患者さま情報を一目みてわかるようにしています。オートフィルターとスクロールバーを同期させてテキストバックスに反映させるようにしているのですが、ユーザーフォームに入力すれば直接セルに入力できるようにするにはどうしたら良いでしょうか。記述は下記のとおりです。 Private Sub ScrollBar1_Change() SelectRow For i = 1 To 65 Me.Controls("textbox" & CStr(i)).Value = Selection.Cells(1, i) Next End Sub Private Sub UserForm_Initialize() ScrollBar1.Min = 1 ScrollBar1.Max = CountRows() ScrollBar1.LargeChange = ScrollBar1.Max \ 10 + 1 ScrollBar1.Value = 1 SelectRow For i = 1 To 65 Me.Controls("textbox" & CStr(i)).Value = Selection.Cells(1, i) Next End Sub Sub SelectRow() Dim iRows As Long iRows = 0 For i = 5 To ActiveSheet.UsedRange.Rows.Count If Not Rows(i).Hidden Then iRows = iRows + 1 If iRows = ScrollBar1.Value Then ActiveSheet.Rows(i).Select Exit For End If End If Next i End Sub Function CountRows() As Long Dim iRows As Long iRows = 0 For i = 1 To ActiveSheet.UsedRange.Rows.Count If Not Rows(i).Hidden Then iRows = iRows + 1 End If Next i CountRows = iRows End Function 具体的な記述があればありがたいです!

  • ユーザーフォームでの新規ボタン作成

    エラーが出て、自己解決が出来ず皆さんのお知恵を借りたく投稿しました。 質問内容や文章が分かりづらくてご迷惑かもしれませんが、どうかよろしくお願いいたします。 Excel、VBAのユーザーフォームで顧客情報を入力するものを作成しています。 やりたい事は、新規ボタンを押したら氏名が入っていないセル(行)にジャンプするものを作成したいです。 まず、私がした事として・・・・ ---------------------------------- Private i As Long Public Sub Display() laCODE.Caption = Worksheets("顧客データ").Cells(i, 1).Value cmb部屋番号.Value = Worksheets("顧客データ").Cells(i, 2).Value txt氏名.Value = Worksheets("顧客データ").Cells(i, 3).Value txt生年月日.Value = Worksheets("顧客データ").Cells(i, 4).Value txtTEL.Value = Worksheets("顧客データ").Cells(i, 5).Value end sub Private Sub UserForm_Initialize() Worksheets("顧客データ").Select i = 2 Call Display end sub 新規ボタンをコマンドボタンで作成し、 Private Sub cmd新規_Click() If Me.txt氏名 <> "" Then r = Cells(i, 3).End(xlDown).Row i = r + 1 Call Display Else MsgBox "氏名が空欄です。", vbOKOnly + vbExclamation, "Input Error!" '空欄であればエラー表示 Exit Sub End If End Sub 顧客データというシートがあり、1行目にはタイトル、2行目以降にデータ内容が登録されます。 ---------------------------------- 内容は、多少省略はしていますが、上記の内容で作成しました。 新規ボタンを押すと、氏名が登録されていないレコードまでジャンプし、一見成功したように見えますが、最後のレコード(氏名が入っている)で、新規ボタンを押すとエラーが出てしまいます。 初心者でご迷惑かもしれませんが、どうかご教授よろしくお願い致します。

  • ExcelVBAでのユーザーフォームについて

    ご回答ありがとうございました。 これといった資料がなく(探し方が悪いのかもしれませんが)、少ない経験値で複雑なというか面倒な処理のマクロ(VBA)を組まされることになり、困っているところです。当初の話だと「勉強しながらでよい」ということだったのですが、いろいろと仕事が次々と舞い込んできて、そんな余裕もなくせっぱ詰まり少ない知識で必死にやっています。 先にご回答いただいた内容で是非アドバイスをいただきたいと思い、新たに質問させていただきました。 ユーザーフォームでマルチページを作っています。そこでもコンボボックスを使うのですがそこの記述方法をアドバイス下さい。やっぱり記述場所がおかしいのか、クリックするとリストの内容がコンボボックスをクリックした分だけ繰り返してしまうことがあります。 ////////////////////////////////////////////////////// Private Sub UserForm_Initialize() Dim sh As Worksheet Set sh = Worksheets("対象年") Dim i As Integer Dim lastRow As Integer lastRow = sh.Cells(Rows.Count, 1).End(xlUp).Row With ComboBox1 For i = 2 To lastRow If ComboBox1 = "" Then .AddItem sh.Cells(i, 1).Value End If Next i End With End Sub ////////////////////////////////////////////////////// Private Sub ComboBox1_DropButtonClick() Dim sh As Worksheet Set sh = Worksheets("対象年") Dim i As Integer Dim lastRow As Integer lastRow = sh.Cells(Rows.Count, 1).End(xlUp).Row With ComboBox1 For i = 2 To lastRow If ComboBox1 = "" Then .AddItem sh.Cells(i, 1).Value End If Next i End With End Sub ////////////////////////////////////////////////////// とまぁ、結局コードは同じなのですが。 それと、結果をラベルに出させる場合には回答で記述いただいた ////////////////////////////////////////////////////// Private Sub ComboBox1_Change()   Dim vTgYear As Variant   vTgYear = ComboBox1.Value   Label1.Caption = vTgYear - 1 & "~" & vTgYear + 1 & "年" End Sub ////////////////////////////////////////////////////// で、よいでしょうか? よろしくお願いいたします。

  • vba ユーザーフォームについて

    勉強のためにvb勉強中です。エクセルのユーザーフォームについて質問です。 コンボボックス 01 02 のどちらかを選択すると、テキストに入力した数字は、01を選択したら11行、02を選択したら12行に転記できるようにしたいのですが、if文を使うのだろうと思うのですが、教えていただけないでしょうか。 私が途中まで作成した載せておきます。よろしくお願い申し上げます。 Private Sub CommandButton1_Click() Dim rc As Long Dim retu As Long Dim Ctrl As Control If Me.txtComboBox1.Value = "" Then MsgBox "社員名を選択してください!", vbOKOnly Me.txtComboBox1.SetFocus Exit Sub End If rc = MsgBox("件数を入力しますか?", vbYesNo) If rc = vbYes Then MsgBox "実行する" Else MsgBox "中止しました" Exit Sub End If retu = Cells(3, Columns.Count).End(xlToLeft).Column + 1 Cells(3, retu).Value = Me.txtComboBox1.Value ←社員を選択 Cells(4, retu).Value = Me.txtsuzuki.Value  ←売れた件数 Cells(5, retu).Value = Me.txttoyota.Value  ←売れた件数 Cells(6, retu).Value = Me.txthonnda.Value   ←売れた件数 For Each Ctrl In Me.Controls If Ctrl.Name Like "txt*" Then Ctrl.Value = "" End If Next Ctrl End Sub また、テキストボックスに数字だけ入力して、プルダウン選択してないとエラ~メッセージも出るようにしたいです...

  • エクセル 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