Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


673 / 13645 ツリー ←次へ | 前へ→

【79073】オブジェクトが 必要ですというエラーが出てしまう件について ざべす 17/5/1(月) 17:18 質問[未読]
【79074】Re:オブジェクトが 必要ですというエラーが... γ 17/5/1(月) 18:30 回答[未読]
【79075】Re:オブジェクトが 必要ですというエラーが... γ 17/5/1(月) 18:55 回答[未読]
【79090】Re:オブジェクトが 必要ですというエラーが... γ 17/5/3(水) 23:18 発言[未読]

【79073】オブジェクトが 必要ですというエラーが...
質問  ざべす  - 17/5/1(月) 17:18 -

引用なし
パスワード
   初めてこちらで質問をさせて頂きます。
業務でツールを作成するにあたり、下記のエラーが発生してしまいます。
状況としては、FindFileで開いたユニークファイルに対し、MaxRowsで指定の列の最大行数を求めようとすると変数にMaxRowの値を格納するコードでエラーが起きます。

コードは下記のように書いています。

Dim MaxRow As Variant

Application.FindFile

MaxRow = Cells(MaxRows.Count , 2).End(xlUp).Row  ⬅ここでエラー【オブジェクトが必要です】が発生

アドバイス、ご意見など頂ければ幸いです。

【79074】Re:オブジェクトが 必要ですというエラー...
回答  γ  - 17/5/1(月) 18:30 -

引用なし
パスワード
   MaxRowsとは何者でしょうか?
定義されていない変数を使っているのでは?

こうしたことを早期に発見するには、
以下のようにします。

Option Explicit
をモジュールの一行目に挿入するようにして下さい。
そうすれば、今回のような未宣言の変数には警告が出て、
しかも場所を特定してくれますから、原因が直ぐに判明します。

なお、
ツール − オプション − 編集 で
「変数の宣言を強制する」にチェックを入れておけば、
モジュールを作成した時点で、Option Explicitが自動的に挿入されるので、
手間が省けます。
一度だけチェックを入れておけば、以後、気にする必要はありません。
お薦めします。

【79075】Re:オブジェクトが 必要ですというエラー...
回答  γ  - 17/5/1(月) 18:55 -

引用なし
パスワード
   MaxRow = Cells(MaxRows.Count , 2).End(xlUp).Row
は、
MaxRow = Cells(Rows.Count , 2).End(xlUp).Row
の間違いでしょう。
テキストか何かの写し間違いですか?

その昔は、
MaxRow = Cells(65536, 2).End(xlUp).Row
などと直接、数値を書いていたものですよ。

しかし、Excelのバージョンアップで最大行数が拡大され、
これでは適当でないし、いちいち数値を書くのはいかがなものか、となって、
行数をカウントして、それで最終行を指定することになったのですね。

# これで解決して安心せずに、設定の変更は実行してください。
# 補足すると、
# Option Explicitとは、「変数の宣言をきちんとします」という宣言です。
# そのかわり、宣言していない変数を使っていれば、Excel君がきちんと
# 指摘をしてくれます。
# タイプミスをして変数名の間違いに気づくのに相当時間がかかってしまう、
# などということが避けられますし、大抵のひとはこうした設定にしています。

【79090】Re:オブジェクトが 必要ですというエラー...
発言  γ  - 17/5/3(水) 23:18 -

引用なし
パスワード
   反応がないですね。

折角こちらを閲覧された方のために、有益と思われることを書きます。
それは、「自分で作った変数は小文字で始めるとよい」というものです。

(1)VBAの予約語や、既定のオブジェクトのメソッドやプロパティは
  すべからく大文字で始まります。
  従って、上記ルールを守ると、判別が視覚的につくので便利です。

(2)小文字で入力しても、上記の予約語等は自動的に第一文字が大文字に
  変換されます。
  ですから逆に予約語等のつもりで入力して大文字にならなかったら、
  タイプミスしていることがわかります。
  (もっとも、インテリセンスによる自動メンバ表示を利用することが先ですが)

今回のケースでは、
・まずは Option Explicitの記入(自動設定オプションのセット)が必要だった
・小文字で始めていれば、大文字にかわらないので、既定のオブジェクトでも
 なんでもないことが直ぐに分かったはずです。

673 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free