下記のようなコードを書きたいのですが「オブジェクトが必要です」というエラーが
出力されてしまいできないようです。何か代替案はありますでしょうか。
---
dim ws as worksheet
with thisworkbook
for each ws in array(.worksheets(1),.worksheets(2),.worksheets(3))
with ws
'ここに処理を書く
end with
next ws
end with
---
ちなみにこのbookにある全てワークシートで処理を回したいわけではなく
特定のシートのみで処理をしたいです。
エクセル2003です。
よろしくお願いします。
No.2ベストアンサー
- 回答日時:
ArrayはVariant型であり、オブジェクトでは無いとされるからではないでしょうか。
素直に配列としてアクセスするか、
Sub test()
Dim ws As Worksheet
Dim buf As Variant
Dim i As Long
With ThisWorkbook
buf = Array(.Worksheets(1), .Worksheets(2), .Worksheets(3))
For i = LBound(buf) To UBound(buf)
With buf(i)
Debug.Print .Name
End With
Next i
End With
End Sub
どうしてもEachが使いたければ、Collectionに収納すれば良いかも。
下記shはObject型でなければダメかと思いましたが、Worksheet型でも大丈夫でした。インテリセンスが効くメリットはありそうですね。
Sub test2()
Dim wsCollection As Collection
Dim sh As Worksheet
Set wsCollection = New Collection
With ThisWorkbook
wsCollection.Add .Worksheets(1)
wsCollection.Add .Worksheets(2)
wsCollection.Add .Worksheets(3)
End With
For Each sh In wsCollection
Debug.Print sh.Name
Next sh
End Sub
前者はNo.4と大体同じですね。今回はこの方法でやることにしました。
後者はAddが1つずつしかできないのがデメリットですね。
ありがとうございました。
No.4
- 回答日時:
#2です。
追加ですが、下記はエラーにならず動作します。あまり使いたく無いですが...
Sub test()
Dim ws As Variant '<- ここをVariant型で宣言
With ThisWorkbook
For Each ws In Array(.Worksheets(1), .Worksheets(2), .Worksheets(3))
With ws
Debug.Print ws.Name
End With
Next ws
End With
End Sub
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 【VBAエラー】Nextに対するForがありません 対策について 5 2022/11/21 21:26
- Excel(エクセル) エクセルシート中の全角英数字を半角に変換したい 4 2022/07/07 13:14
- Excel(エクセル) vba シート名の一覧を2列に分けるには 5 2023/04/24 08:56
- Visual Basic(VBA) シート削除のマクロで「deleteメソッドは失敗しました」となります。助けてください! Sub 不要 6 2022/09/08 16:41
- Excel(エクセル) vba 転記するときの最終行について 2 2022/09/03 09:31
- Visual Basic(VBA) 前回ご教授いただいたコードに覚えたてのループ処理で品名りんごAから順に20回for nextでループ 7 2023/01/13 22:01
- Excel(エクセル) vbaで列幅について 1 2022/11/15 08:31
- Visual Basic(VBA) コード名シートA列と集計シートA列のコードが一致したら、コード名シートA5からk12の範囲をコピーし 1 2022/08/29 23:46
- Visual Basic(VBA) ExcelVBAに関する質問 3 2023/02/17 10:47
- Visual Basic(VBA) vbaのエラー対応(実行時エラー7:メモリが不足しています) 4 2023/04/24 00:20
このQ&Aを見た人はこんなQ&Aも見ています
-
新NISA制度は今までと何が変わる?非課税枠の拡大や投資対象の変更などを解説!
少額から投資を行う人のための非課税制度であるNISAが、2024年に改正される。おすすめの銘柄や投資額の目安について教えてもらった。
-
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
エクセルのエラーメッセージ「400」って?
Visual Basic(VBA)
-
EXCEL VBAで全選択範囲の解除
Excel(エクセル)
-
-
4
エクセルVBAのIf,Then 構文でOr条件とAnd条件の結合方法?
Excel(エクセル)
-
5
エクセルでエラーが出て困っています。
Excel(エクセル)
-
6
screenupdatingが機能しなくて困ってます
Visual Basic(VBA)
-
7
for each の現在の配列ポインタ VBA
Excel(エクセル)
-
8
Application.ScreenUpdating = Falseが効きません
Visual Basic(VBA)
-
9
マクロの「SaveAs」でエラーが出るのを解消したいです(再)
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
worksheetFunctionクラスのVloo...
-
「Columns("A:C")」の列文字を...
-
実行時エラー 3265「要求された...
-
VBSでレジストリキー名に円マー...
-
Excelでフィルタをかけると警告...
-
ある文字列が全て数字であるか...
-
AccessVBAで「dim dbs as datab...
-
VBからExcelのセルの書式設定を...
-
オートメーションエラー
-
VBScriptでファイルの日時順(降...
-
VBAでWebページにセルの値を入力
-
VBAで別のシートに図形描画
-
VBAでオプションボタンの設定
-
オートメーションエラーについて
-
VBAで Set wb = Sheets(1).Cop...
-
ExcelのVBAについて(グラフ操作)
-
オブジェクトが見つかりません
-
アクセスにてオブジェクト名変...
-
VBAで作成するメール(開封確認...
-
エクセルVBAでcode128のバー...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
worksheetFunctionクラスのVloo...
-
「Columns("A:C")」の列文字を...
-
エクセルのVBAの標準モジュール...
-
実行時エラー 3265「要求された...
-
VBAで既に開いている別アプリケ...
-
PowerPointVBAでスライドマスタ...
-
VBAで Set wb = Sheets(1).Cop...
-
エクセルマクロエラー「'Cells'...
-
ある文字列が全て数字であるか...
-
VBAについてです。 初心者です...
-
VBScriptでファイルの日時順(降...
-
Excelでフィルタをかけると警告...
-
VBAからPDFファイルにパスワー...
-
VBで引数にDictionaryオブジェ...
-
このように書くべきですか? { ...
-
EXCEL VBA オートシェイプナン...
-
テキストボックス中の文字列の...
-
エクセルVBAでcode128のバー...
-
[VBA]CDOメッセージ送信エラー
-
オブジェクトが見つかりません
おすすめ情報