エクセルでVBAの下記コードで実行すると、実行時エラー'1004'
アプリケーション定義またはオブジェクト定義のエラーとなりますが、
Worksheets("作業用").Activate
Worksheets("職員").Range(Cells(6, 1), Cells(Wrow, 12)).AdvancedFilter Action:=xlFilterCopy, _
CriteriaRange:=Range("a6:c8"), CopyToRange:=Range("d6:z2000"),
Unique:=False
それを下記のようにwith end with構文で囲むとエラーとなりません。
形式的には同じコードに見えるのですが、実質的に何が違うためオブジェクト定義エラーにならないのでしょうか。
AdvancedFilterに限らず、しばしば同様の原因によるエラーに悩まされていますので、ご教示いただければ幸いです。
Worksheets("作業用").Activate
With Worksheets("職員")
.Range(.Cells(6, 1), .Cells(Wrow, 12)).AdvancedFilter Action:=xlFilterCopy, _
CriteriaRange:=Range("a6:c8"), CopyToRange:=Range("d6:O2000"), Unique:=False
End With
No.1ベストアンサー
- 回答日時:
こんばんは。
>Worksheets("職員").Range(Cells(6, 1), Cells(Wrow, 12)).AdvancedFilter
Cells(6,1)とCells(Wrow,12)にシートオブジェクトが付加されてないので
それがWorksheets("職員")のセルだと認識されないからです。
Worksheets("職員").Range(Worksheets("職員").Cells(6, 1), Worksheets("職員").Cells(Wrow, 12)).AdvancedFilter
とCellsにシート名を付加しなければなりません。
>with end with構文で囲むとエラーとなりません。
提示のコードにはCellsの前にドットが付加されてますので
これはWorksheets("職員")が付加されているのと同じになりますから
エラーになりません。
Range,Cellsを使うときはそれがどのシートのものか気をつける必要があります。
で、可能な限り、シート名を付加することをお勧めします。
丁寧なご教示まことにありがとうございました。
疑問が解決しました。
どのシートでオブジェクトを参照しているかによって、オブジェクトが参照される場合と参照されない場合があるため、可能なかぎりwith構文でシート名を付加する方が安全だということですね。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセル VBAの構文について 2 2023/02/10 18:26
- Visual Basic(VBA) 【至急】Excel 同一人物の情報を一行にまとめる(複数行) 6 2022/05/24 17:58
- Visual Basic(VBA) 前回ご教授いただいたコードに覚えたてのループ処理で品名りんごAから順に20回for nextでループ 7 2023/01/13 22:01
- Visual Basic(VBA) Excelで下記のようにマクロを作ったところ、一回目は実行できたのですが、二回目以降「実行時エラー1 1 2022/03/25 08:08
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) エクセルのマクロとシートの保護について教えてください。 1 2022/10/18 08:36
- Excel(エクセル) なぜExit Subがあるのかわかりません 4 2023/02/19 12:34
- Visual Basic(VBA) 【VBA】ボタンに登録したマクロがエラーになる 4 2022/07/25 17:47
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- Visual Basic(VBA) Sheet3から2つの条件でオートフィルターで抽出した個数をSheet2へ入力するマクロで、一つ目の 4 2023/01/12 23:40
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
UserForm1.Showでエラーになり...
-
文字列内で括弧を使うには
-
マクロで"#N/A"のエラー行を削...
-
「実行時エラー '3167' レコー...
-
実行時エラー 438 の解決策をお...
-
VBAでfunctionを利用しようとし...
-
インポート時のエラー「データ...
-
VBでSQL文のUPDATE構文を使った...
-
Python openpyxlを使用したセル...
-
String""から型'Double'への変...
-
【VBAエラー】Nextに対するFor...
-
TransferSpreadsheetのエラー処理
-
エクセル関数式=ABSで#VALUE!...
-
html5 エラー
-
VBA データ(特定値)のある最...
-
VB.net 重複チェックがしたいです
-
実行時エラー'-2147467259(8000...
-
お助けください!VBAのファイル...
-
Excel VBA 複数ブックシートご...
-
VBAで時間(00:00形式)を積算...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
UserForm1.Showでエラーになり...
-
String""から型'Double'への変...
-
VBAでfunctionを利用しようとし...
-
【VBA】ワークブックを開く時に...
-
マクロで"#N/A"のエラー行を削...
-
文字列内で括弧を使うには
-
実行時エラー 438 の解決策をお...
-
On ErrorでエラーNoが0
-
お助けください!VBAのファイル...
-
VBA データ(特定値)のある最...
-
インポート時のエラー「データ...
-
実行時エラー'-2147467259(8000...
-
ACCESSで値を代入できないとは?
-
VB.net 重複チェックがしたいです
-
ActiveCell.FormulaR1C1の変数
-
【VB.NET】 パワポ操作を非表示で
-
「実行時エラー '3167' レコー...
-
ApplicationとWorksheetFunctio...
-
フランスの生年月日(jj/mm/aaaa)
-
【マクロ】 IFERROR関数をマク...
おすすめ情報