質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

オブジェクト

オブジェクト指向において、データとメソッドの集合をオブジェクト(Object)と呼びます。

Q&A

解決済

2回答

8079閲覧

rowsData 実行時エラー424 オブジェクトが必要です と出てしまいます

secoseco

総合スコア13

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

オブジェクト

オブジェクト指向において、データとメソッドの集合をオブジェクト(Object)と呼びます。

1グッド

0クリップ

投稿2018/12/11 06:23

前提・実現したいこと

VBA初心者です。
とある入門サイトを見ながらちまちま進めていましたが、
下記を入力してからエラーメッセージが出てしまいました。

rowsData = wsData.Cells(Rows.Count, 1).End(xlUp).Row '最後の行数を取得
↑の部分が何かちがうのでしょうか?
最初は自分で手打ちしていましたが、
それで何か打ち間違いがあったのかもしれないと思い、
サイトの構文をそのままコピペしてみましたが、ダメでした。

サイトの管理人さんと同じように進めていたのですが、
ここにきて急にエラーメッセージが表示され、進まなくなってしまいました。

ここ数日で初めてVBAに触れたような右も左もわからない初心者で
質問内容もわかりづらく申し訳ありません。

解決策をご教示いただければ助かります。

発生している問題・エラーメッセージ

実行時エラー424 オブジェクトが必要です。

該当のソースコード

Sub 請求書作成()

wstemplate.Rows("21:44").Hidden = False '隠れているかもしれない行を再表示しておく

Dim rowsData As Long '行数カウント用の変数
rowsData = wsData.Cells(Rows.Count, 1).End(xlUp).Row '最後の行数を取得

Dim i As Long, j As Long, k As Long
k = 21
For i = 2 To rowsData
For j = 1 To 3
wstemplate.Cells(k, j).Value = wsData.Cells(i, j).Value
Next j
k = k + 1
Next i

wstemplate.Rows(21 + rowsData - 1 & ":44").Hidden = True 'データがない行を隠す

End Sub

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

chatarow👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

wsDataという変数は質問に書かれているプログラム中、実行時エラーが発生する行で始めて出てきます。
そして、wsDataを定義するコードも、wsDataに値を代入するコードも見当たりません。
そのため、wsDataが何なのか判りません。

エラーが発生したコードでは、wsDataという何か判らないもののメソッド(?)Cellsを呼び出そうとしていますので、

・メソッドCallsを呼び出そうとしているようなので、wsDataはオブジェクトのつもりなのであろう
・でも、プログラムで定義されていないのでオブジェクトとして扱えない。
・だから、「訳のわかんない wsDataではなく、ちゃんとしたオブジェクトを使えよ!」

という意味で「オブジェクトが必要です」というメッセージが表示されたのです。

投稿2018/12/11 06:57

coco_bauer

総合スコア6915

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

secoseco

2018/12/11 07:01

ご回答ありがとうございました。 wsdateがそもそも定義されておらずオブジェクトでもなかったのですね。 ご教示いただき、はじめて気づきました。 迅速な対応、ありがとうございました。
guest

0

ベストアンサー

wsDataがないのだと思います。
グローバルで持ってたらこの回答は意味をなさないので、スルーしてください。

請求書作成関数内でwsDataを生成しましょう。
ワークシート名には適宜対象とするシート名に置き換えてください。

VBA

1 Dim rowsData As Long '行数カウント用の変数 2 Dim wsData As Worksheet ' ←追加 3 Set wsData = Worksheets("ワークシート名") ' ←追加 4 rowsData = wsData.Cells(Rows.Count, 1).End(xlUp).Row '最後の行数を取得

投稿2018/12/11 06:44

ttyp03

総合スコア16998

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

secoseco

2018/12/11 06:59

ご回答ありがとうございます。 なるほど、wsdateががそもそもなかったのですね。 教えていただいた追加のコードを入力したら無事反映されました。 迅速な回答ありがとうございました。大変助かりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問