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

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

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

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

Q&A

解決済

2回答

307閲覧

VBAにおいて、エラー原因は?

OOOOO

総合スコア11

VBA

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

0グッド

0クリップ

投稿2018/05/03 02:14

lang

1VBA 2

初めまして。VBA初心者です。
現在13(N)列目をリフレッシュするようなマクロを組みたいのですが、エラーコードが出てしまい
地道に改善を試みているのですが、どの部分でのアプリケーション定義、またはオブジェクト定義のエラーかわかりません。

もし可能であれば、ご指摘いただけますと幸いです。
よろしくお願いいたします。

以下、エラー内容とコードです。

★エラー内容
アプリケーション定義、またはオブジェクト定義のエラーです

Sub ステータス変更()

Dim rowsData As Long '行数カウント用の変数
Dim adook As Workbook
Dim asheet As Worksheet

Workbooks("【研修用】【販売管理システム】顧客情報.xlsx").Activate '書き込み先ブックをアクティブにする

Set abook = ActiveWorkbook
Set asheet = abook.Sheets("顧客情報")

rowsData = asheet.Cells(Rows.Count, 1).End(xlUp).Row '最後の行数を取得

asheet.Range(Cells(2, 13), Cells(rowsData, 13)).Value = ""

End Sub

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

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

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

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

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

guest

回答2

0

実際のコードをそのままコピペしたものですか。だとしたら、
Dim adook As Workbook
は、正しくは、
Dim abook As Workbook
ですね。

ただ、エラーメッセージが異なるので別に原因があるのかも。
エラーが出たときに、エラーダイアログに「デバッグ」ボタンはないですか。
それを押すとエラーの発生したコードが選択表示されると思いますので、
そのコードを提示してください。

追記

m6uさんの回答で解決したとすると、原因は、
asheet.Range(Cells(2, 13), Cells(rowsData, 13)).Value = ""
Cellsasheet. が付いてないことかな。
asheet.Range(asheet.Cells(2, 13), asheet.Cells(rowsData, 13)).Value = ""
とすべきですね。前者だと asheet がアクティブなとき以外はエラーになります。
Cells(2, 13)は、ActiveSheet.Cells(2, 13) という意味になりますので。

ということで、推奨のコードは下記になります。

vba

1With asheet 2 .Range(.Cells(2, 13), .Cells(rowsData, 13)).ClearContents 3End With

投稿2018/05/03 02:44

編集2018/05/03 07:33
hatena19

総合スコア33699

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

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

退会済みユーザー

退会済みユーザー

2018/05/03 02:49

VBAのソースを手打ちで転記したものでなく、コピペしたものだとしたら、その可能性が大ですね!
退会済みユーザー

退会済みユーザー

2018/05/03 08:37

言われてみれば、Cellsの親がないと、そりゃダメですね
guest

0

ベストアンサー

エラーが出ているのはこの行でしょうか?
asheet.Range(Cells(2, 13), Cells(rowsData, 13)).Value = ""

セル範囲をRangeで指定しながらの.Valueは使えないんじゃないでしょうか。

Dim r As Long For r = 2 To rowsData asheet.Cells(r, 13).Value = "" Next

をお試しください。

投稿2018/05/03 02:21

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

hatena19

2018/05/03 02:48

asheet.Range(Cells(2, 13), Cells(rowsData, 13)).Value = "" は問題なく使えると思います。ただ、 asheet.Range(Cells(2, 13), Cells(rowsData, 13))..ClearContents とするのが一般的かな。
退会済みユーザー

退会済みユーザー

2018/05/03 02:50

カラ文字列、というデータをセルに格納することになって、 ほんとうの意味での未使用セルにならないから、 意図的に消すときは必ずClearContentsを使うべきですよね。 Rangeで矩形範囲指定もできるし。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問