
excelVBAでファイル内の各シートを確認して、条件に合うシートのデータをコピーするところで、「実行時エラー'91'オブジェクト変数またはWithブロック変数が設定されていません。」というエラーが出ました。
確認したのですが、なかなか分かりません。どなたがご指導お願いできませんか。
コードは以下のとおりです。
Sub Tenki(theBook As Workbook, mySheet As Worksheet)
Dim K_Sheet As Worksheet
Dim DstRange As Range
For Each K_Sheet In theBook.Worksheets ’ここで、エラーが出ました!
If K_Sheet.Name <> "C" Then
Set DstRange = mySheet.Range("A" & _
mySheet.Range("A1").CurrentRegion.Rows.Count + 1)
K_Sheet.Range("B7:K48").SpecialCells(xlCellTypeVisible).Select
Range("B7:K48").Copy
DstRange.PasteSpecial Paste:=xlPasteValues
End If
Next
Application.CutCopyMode = False
End Sub
どうぞよろしくお願いします。
No.2ベストアンサー
- 回答日時:
theBookに値がセットされていないのでは?
Dim DstRange As Range
msgbox theBook.name 'これを追加して、ここで同じエラーが出るのであれば、theBookに値がセットされていない
For Each K_Sheet In theBook.Worksheets ’ここで、エラーが出ました!
他にも、んっと思うところもありますが
取り敢えず、エラーの部分のみ
以上参考まで
この回答への補足
早速のご回答、ありがとうございました。
hige_082さんのおっしゃったとおりです。セットするのが忘れた。
新しくセットして、うまく回したが、
hige_082さんの「んっと思うところもありますが」は
ちょっと気になるので、ぜひ教えていただけないでしょうか。
わがままですみません、よろしくお願いします。
No.4
- 回答日時:
#2です
>「んっと思うところもありますが」は
>ちょっと気になるので、ぜひ教えていただけないでしょうか。
私が、んっと思った所を含め、それ以上の回答を
#3さんがされていますので
#3さんの回答を参考にしてください
No.3
- 回答日時:
こんにちは。
サブルーチンにするまでのほどではないような気がします。
それに、この程度で、コピーする側も、貼り付けする側もサブルーチンの引数で指定するから、ややこしくなるのです。片方をActiveSheet にすれば、コピー元ブックだけになります。
全コードを書いていないから、書かれていない部分を想像するしかありませんが、サブルーチンに入れるためのコードのミスです。空のオブジェクトだからです。ブックの変数に、固有のブックを指定していません。
全体がかかれていないので、やむを得ず、サブルーチンを直すしかありませんが、以下のように一行入れればよいです。本来は不必要です。
If theBook Is Nothing Then Exit Sub '←この行を挿入
For Each K_Sheet In theBook.Worksheets ’ここで、エラーが出ました!
If K_Sheet.Name <> "C"は、大文字・小文字の違いがありますから、場合によっては、K_Sheet.Nameは、StrConv(K_Sheet.Name, vbUpperCase) <> "C" としたほうが安全です。
>K_Sheet.Range("B7:K48").SpecialCells(xlCellTypeVisible).Select
>Range("B7:K48").Copy
これでは、Select した瞬間に、エラーが発生する可能性がありますから、
K_Sheet.Range("B7:K48").SpecialCells(xlCellTypeVisible).("B7:K48").Copy
としたほうが良いような気がします。
余計なのかもしれませんが、
DstRange.PasteSpecial Paste:=xlPasteValuesのDstRange で、
Set DstRange = mySheet.Range("A" & _
mySheet.Range("A1").CurrentRegion.Rows.Count + 1)
コピーするには、行列のマトリックスで取得して張り付けるのですから、どこかに最終行の基準がある列があってもよいと思うのです。貼り付けるたびに、位置の確認で、CurrentRegion というのは、少し懲りすぎているように思うのです。これは、個人的な感想で、内容が部分的でしかないので、ここらは手が付けられません。もちろん、#1さんご指摘のように、A列の最終行を決めるなら、Rangeオブジェクトにする必要がありません。
ご回答ありがとうございました。自分自身の力不足も実感しました。引き続き、頑張りますが、お邪魔することがあると思います。ぜひまたよろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) vbaで列幅について 1 2022/11/15 08:31
- Visual Basic(VBA) 【VBAエラー】Nextに対するForがありません 対策について 5 2022/11/21 21:26
- Visual Basic(VBA) EXCELのVBAについて 2 2023/07/05 17:17
- Visual Basic(VBA) VBAが止まります。 1 2022/09/02 14:51
- Excel(エクセル) エクセル 値をコピペした時に、条件付き書式で塗られた背景色もペーストさせる 2 2023/04/05 17:21
- Visual Basic(VBA) 【ご教示ください】VBAの記述方法がわかりません。 2 2022/08/12 21:28
- Visual Basic(VBA) excel vbaでvlooupの変数がわかりません。 7 2022/05/30 09:35
- Visual Basic(VBA) 前回ご教授いただいたコードに覚えたてのループ処理で品名りんごAから順に20回for nextでループ 7 2023/01/13 22:01
- Visual Basic(VBA) 【VBA】ボタンに登録したマクロがエラーになる 4 2022/07/25 17:47
- Visual Basic(VBA) vbaのエラー対応(実行時エラー7:メモリが不足しています) 4 2023/04/24 00:20
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
実行時エラー 438になった時の...
-
実行時エラー -'-2147417848
-
【Excel VBA】マクロをボタンに...
-
なぜこんな初歩的なVBAのIf文で...
-
VBAがブレークモードになっ...
-
VBAでのエラー
-
マクロについて教えてください...
-
INSERT INTOステートメント構文...
-
ExcelVBAで、ユーザー定義型は...
-
【VBA】ボタンに登録したマクロ...
-
実行時エラー3001「引数が間違...
-
VBSで変数の宣言はできないので...
-
Outlook.ApplicationをCreateOb...
-
ADODB.Streamを使用してUTF-8を...
-
VBAで、定数式が必要ですのエラ...
-
AxMSFlexGridのset_TextMatrix...
-
マクロを作成したのですが、以...
-
エクセルエラー13型が一致しま...
-
なぜエラーになるのでしょうか...
-
VBAのエラー発生場所をメッセー...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
実行時エラー 438になった時の...
-
VBAがブレークモードになっ...
-
なぜこんな初歩的なVBAのIf文で...
-
ExcelVBA Range クラスの Page...
-
EXCEL VBAマクロ中断でデバッグ...
-
実行時エラー -'-2147417848
-
【Excel VBA】マクロをボタンに...
-
Outlook.ApplicationをCreateOb...
-
VBAでのエラー
-
マクロについて教えてください...
-
実行時エラー3001「引数が間違...
-
実行時エラー48発生時のDLL特定...
-
VB6+SQL サーバー 2000 で 実行...
-
エクセルエラー13型が一致しま...
-
VBS実行時エラー オブジェクト...
-
ADODB.Streamを使用してUTF-8を...
-
INSERT INTOステートメント構文...
-
VBAで、定数式が必要ですのエラ...
-
OLEDB.NETで接続できない
-
VBSで変数の宣言はできないので...
おすすめ情報