• 締切済み

VBA オブジェクトが必要です エラー424

VBA初心者です。 初歩的な質問で申し訳ありません。 ユーザーフォームのコンボボックスにユーザーリストを読みこみプルダウンする構文です。 以下を実行すると 実行時エラー 424 オブジェクトが必要です という警告が出ます。 どこを直せばいいのかわかりません。 詳しい方教えて下さい。宜しくお願いします。 private sub userform_initialize() dim 最終行 as integer dim i as integer 最終行 = worksheets(゛meisai″).cells(Row.count,8).end(xlup).Row for i = 1 to 最終行 combobox1.addItem worksheets(″meisai゛).value next i end sub

みんなの回答

  • imogasi
  • ベストアンサー率27% (4737/17070)
回答No.4

#3です。WEB記事を見ていると http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/vba_userform05.html があった。 これを適当に質問にあわせて修正して Private Sub UserForm_Initialize() Dim lRow As Long Dim i As Long, myCnt As Long Dim myData With Worksheets("Meisai") lRow = .Range("H" & Rows.Count).End(xlUp).Row myData = .Range("H2:H" & lRow).Value End With With ComboBox1 .ColumnCount = 1 .ColumnWidths = "50" .List = myData End With End Sub これだとForNextなどで、各行データを繰り回しセットせずに .List = myData で1行で済んでいる。 こういう様に、VBAでは、色々やり方だある場合がほとんどなので、むつかしくもあり、好みで選べる面もある。

massfor
質問者

お礼

いろいろ調べて頂きありがとうございました! パターンがあって初心者には難しいですね。

  • imogasi
  • ベストアンサー率27% (4737/17070)
回答No.3

>worksheets(″meisai゛).value これはおかしい。ワークシート名だけを、指定しているだけの形だが、ダメ。 各行、各セルの値を1つずつ、AddItemしないとダメ。 ーー 下記で、質問の部分は、うまく行くと思う。 1字ずつ比べて、どこが間違いか考えてください。 Private Sub UserForm_Initialize() Dim 最終行 As Integer Dim i As Integer 最終行 = Worksheets("Meisai").Cells(Rows.Count, 8).End(xlUp).Row MsgBox 最終行 For i = 2 To 最終行 ComboBox1.AddItem Worksheets("Meisai").Cells(i, 8).Value Next i UserForm1.Show End Sub ーー この後、何をしたいのかわからないが、UserFormやコントロール(Comboboxなど)やイベントは、VBAの中でも、初心者の独学は、難しいと思う。 沢山の場合を、本やWEBでしらべて、真似から始めないと、質問だけでは追っつかないと思う。

  • watabe007
  • ベストアンサー率62% (476/760)
回答No.2

参考に Private Sub userform_initialize()   Dim 最終行 As Long   Dim i As Long   With Worksheets("meisai")     最終行 = .Cells(Rows.Count, 8).End(xlUp).Row     For i = 1 To 最終行       Me.ComboBox1.AddItem .Cells(i, 8).Value     Next i   End With End Sub http://officetanaka.net/excel/vba/variable/03.htm 整数を格納する型は、長整数型(Long)のほかにInteger(整数型)もありますが、Integer(整数型)は最大で32,767までしか入りませんから、特別な事情がある場合を除いて、整数を入れる変数は長整数型(Long)で宣言すればいいでしょう。

massfor
質問者

お礼

ありがとうございました! 初心者は型の設定も悩むところです。よく違いがわかりました。

  • unokwave
  • ベストアンサー率58% (966/1654)
回答No.1

×Row.Count ○Rows.Count このRowsは省略形で、実際はActiveSheet.Rowsです。 だから正確に記述するなら、シートを指定している場面ではRowsもシートを指定するべきで、 worksheets("meisai").Rows と書くべきです。 こうなると一々シートオブジェクトを記述するのが雑多になるので、 Dim ws as Worksheet Set ws = worksheets("meisai") と宣言しておいて、 ws.Rows といった具合に書けるようにします。

massfor
質問者

お礼

早速ありがとうございました❗️ やってみたら動作しました。 rowとrowsに違いがあるとは全く思ってませんでした。1人ではいくら見ても気づかないところでした。感謝申し上げます。

関連するQ&A