こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

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

投稿日時 - 2019-04-20 17:59:11

QNo.9608747

困ってます

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.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では、色々やり方だある場合がほとんどなので、むつかしくもあり、好みで選べる面もある。

投稿日時 - 2019-04-20 21:47:13

お礼

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

投稿日時 - 2019-04-21 08:49:25

ANo.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でしらべて、真似から始めないと、質問だけでは追っつかないと思う。

投稿日時 - 2019-04-20 21:33:20

ANo.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)で宣言すればいいでしょう。

投稿日時 - 2019-04-20 19:41:10

お礼

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

投稿日時 - 2019-04-20 20:41:33

ANo.1

×Row.Count
○Rows.Count

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

投稿日時 - 2019-04-20 18:34:06

お礼

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

投稿日時 - 2019-04-20 19:31:37

あなたにオススメの質問