VBAでマクロを組もうとしています。
作ろうとしているのは、フォルダを指定すると、そのフォルダの中に入っているワークブック全てのシートから特定の名前のシートだけ、別のブックにコピーされるというものです。
(例 1というフォルダの中にあ、い、うの3つのワークブックが入っているとすると、その3つのワークシートからAという名前のシートのみコピーされて、えという名前のワークブックにまとめられる。)
プログラムに関して初心者のため手探りで組んでみたのですが、「オブジェクト変数が…」というエラーが出てしまいます。
どこに原因があるのか教えていただけませんか。
コピペしたため改行など変かもしれません。
すみません。
Sub Sample()
Dim sFile As String
Dim sWB As Workbook, dWB As Workbook
Dim dSheetCount As Long
Dim sSheetCount As Long
Dim n As Integer
Dim i As Long
Const SOURCE_DIR As String = "C:\Users\A
Const DEST_FILE As String = "C:\Users\B.xls"
Dim sWork As Worksheet
Dim dWork As Worksheet
Dim tmp As Variant
Application.ScreenUpdating = False
sFile = Dir(SOURCE_DIR & "*.xls")
'SOURCE_DIR=「A」ファイルでその中に入ってるブックの名前を sFile とする
'フォルダ内にブックがなければ閉じる
If sFile = "" Then Exit Sub
'コピー先のブックを作成。dWBという名前のブックを加える。
Set dWB = Workbooks.Add
'dWBのシート数を取得。コピー先のシート数を表すときはdSheetCountを使う。
'コピー元のシート数はsSheetCountを使う。
dSheetCount = dWB.Worksheets.Count
sSheetCount = sWB.Worksheets.Count
Do
'コピー元のブックを開く
Set sWB = Workbooks.Open(Filename:=SOURCE_DIR & sFile)
'コピー元のファイルに「りんご」という文字があるか確認する。
'もし文字があったらコピー先のブックにコピーする。
'コピー元のワークシート数の何番目なのか表記はnで表す。
'コピー元のワークシートのことをsWorkと表す。
'コピー先のワークシートのことをdWorkと表す。
Set sWork = sWB.Worksheets
Set dWork = dWB.Worksheets
For n = 1 To sWB.Worksheets.Count
If InStr("sWork(sSheetsCount).name", "りんご") <> 0 Then
sWork("りんご").Copy After:=dWB.Worksheets(dSheetCount)
'コピー先のシート名をコピー元のブックの名前に置き換える
'コピー先のシート数+1の数だけシートを確認して、
'「りんご」という文字があったものだけ置き換える。
For i = 1 To dSheetCount + 1
If InStr("dWork(i).name", "りんご") <> 0 Then
'置き換える名前はコピー元のブック名を_で区切った(1)にあたるものにする。
tmp = Split("sWb.Name", "_")
dWork(i).Name = tmp(1)
End If
Next
End If
Next
'コピー元ファイルを保存しないで閉じる。
'ワークブック"Book1.xls"を保存しないで閉じる
'Sub CloseWorkbook()
'Workbooks("Book1").Close SaveChanges:=False
'End Sub
sWB.Close SaveChanges:=False
'次のブックのファイル名を取得
sFile = Dir()
Loop While sFile <> ""
'コピー先ブック作成時にあったシートを削除
Application.DisplayAlerts = False
For i = dSheetCount To 1 Step -1
dWB.Worksheets(i).Delete
Next i
Application.DisplayAlerts = True
'コピー先ブックを保存して閉じる
dWB.SaveAs Filename:=DEST_FILE
dWB.Close
Application.ScreenUpdating = False
End Sub
No.2
- 回答日時:
>sSheetcountのところに、Set sWB=ActiveWorkbook と追加したところ、無事にそこの部分を通ることができました!
そりゃ通るだろうけど、間違ってます。
その後の
'コピー元のブックを開く
で初めてsWBは定義されるから、その後に移動しないと
いけません。
そもそも、変数の名前がどうしてそのアルファベットなのか
意識してますか?
Source (コピー元の)WorkBookと Destination(コピー先の)
WorkBookというつもりです、多分ね。
>dWBについてもdSheetcountとしているので、ActiveWorkbookとおこうとしたのですが
何をいってるのかな?
Set dWB = Workbooks.Add ’ブックを新規作成してdWBにセットしてますよね。
dSheetCount = dWB.Worksheets.Count ’その新規ブックのシート数を代入してます。
てことで、ActiveWorkbookの出る幕は考えられないです。
でも、何を記述したんでしょうね?
「オブジェクトはこのプロパティ、またメソッドをサポートしていない」と出てしまいました。
が、気にはなります。
なるほど…まだまだ理解が足りていないのだと実感しました。
おそらくSetを別のところに書いてしまったためだと思われます。
削除し書き直したところ、なんとか動かすことができました。
ありがとうございました。
No.1
- 回答日時:
全部は見てませんが
sSheetCount = sWB.Worksheets.Count ①
sWBに何も設定していないでいきなり使ってるから。
具体的なブック名をセットしないといけない。
sWBが今のアクティブブックの意味で使いたいなら
set sWB=ActiveWorkbookと言う文が①の前に必要。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・チョコミントアイス
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・あなたの習慣について教えてください!!
- ・ハマっている「お菓子」を教えて!
- ・高校三年生の合唱祭で何を歌いましたか?
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・家の中でのこだわりスペースはどこですか?
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excel 関数を使ってデータと一...
-
エクセルの選択範囲以外を削除...
-
EXCELのVBAでシートコピーをし...
-
Excel シートのコピーの際、ペ...
-
EXCELで別のブックから式をコピ...
-
Excel Selectは使わない? VBA
-
【エクセル】プルダウン設定の...
-
【Excel】数式をそのまま他のシ...
-
VBAで任意のファイルを読み出し...
-
エクセルの1シートの内容を複...
-
エクセルでシートを「移動また...
-
アクセスの画面をプリントスク...
-
Excelの行をコピーして貼り付け...
-
EXCEL2007でシートをコピーする...
-
エクセルのワークシートをUSBメ...
-
エクセルシートを別のエクセル...
-
【Excel VBA】シートコピー時、...
-
【VBA】コピー&複数個所のペー...
-
エクセルVBAですが教えてくださ...
-
VBAでエラーメッセージが出ない...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルの選択範囲以外を削除...
-
Excel 関数を使ってデータと一...
-
EXCELのVBAでシートコピーをし...
-
Excelの行をコピーして貼り付け...
-
EXCELで別のブックから式をコピ...
-
エクセルでシートを「移動また...
-
Excel 数式の保護をしたセルを...
-
エクセルのワークシートをUSBメ...
-
Excel シートのコピーの際、ペ...
-
エクセルシートを別のエクセル...
-
エクセルの1シートの内容を複...
-
【VBA】コピー&複数個所のペー...
-
【Excel VBA】シートコピー時、...
-
ページの設定を別シートにコピ...
-
VBA シートをコピー後、ボタン...
-
【エクセル】プルダウン設定の...
-
PDFファイルをコピーしてエクセ...
-
ExcelVBAで、ユーザーフォーム...
-
エクセルのページをシートごと...
-
シートが保護されていないのに...
おすすめ情報
回答ありがとうございます!
sSheetcountのところに、Set sWB=ActiveWorkbook と追加したところ、無事にそこの部分を通ることができました!
dWBについてもdSheetcountとしているので、ActiveWorkbookとおこうとしたのですが、「オブジェクトはこのプロパティ、またメソッドをサポートしていない」と出てしまいました。
dWBや他の部分についてはなにも書かなくていいということなのでしょうか?