締切済み

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

  • 困ってます
  • 質問No.9608747
  • 閲覧数78
  • ありがとう数3
  • 気になる数0
  • 回答数4
  • コメント数0

お礼率 75% (3/4)

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

回答 (全4件)

  • 回答No.4

ベストアンサー率 28% (4476/15933)

他カテゴリのカテゴリマスター
#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

お礼率 75% (3/4)

いろいろ調べて頂きありがとうございました!
パターンがあって初心者には難しいですね。
投稿日時 - 2019-04-21 08:49:25
  • 回答No.3

ベストアンサー率 28% (4476/15933)

他カテゴリのカテゴリマスター
>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でしらべて、真似から始めないと、質問だけでは追っつかないと思う。
  • 回答No.2

ベストアンサー率 62% (445/708)

他カテゴリのカテゴリマスター
参考に
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

お礼率 75% (3/4)

ありがとうございました!
初心者は型の設定も悩むところです。よく違いがわかりました。
投稿日時 - 2019-04-20 20:41:33
  • 回答No.1

ベストアンサー率 59% (939/1578)

他カテゴリのカテゴリマスター
×Row.Count
○Rows.Count

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

お礼率 75% (3/4)

早速ありがとうございました❗️
やってみたら動作しました。
rowとrowsに違いがあるとは全く思ってませんでした。1人ではいくら見ても気づかないところでした。感謝申し上げます。
投稿日時 - 2019-04-20 19:31:37
結果を報告する
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。
関連するQ&A
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,500万件のQ&Aを分析して最適な回答をご提案します。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する

ピックアップ

ページ先頭へ