• ベストアンサー

エクセルマクロがエラーになります。

マクロの達人の皆様; 複数のブックをzenkokuというブックにまとめる必要があるのですが 下記の*のところで「オブジェクト不足」のエラーになってしまいます。本を読んでもファイル間のやりとりのサンプルが無く困っております。 まとめ方は各地域の先頭シートを全国のシートにどんどん追加する形でこんなコードです。 ---------------------------------- Sub bookipponka() Workbooks.Open Filename:="C:\全国.xls" Dim nm As Variant nm = ActiveWorkbook.Name Debug.Print nm Workbooks.Open Filename:="C:\東京.xls" Dim nm1 As Variant nm1 = ActiveWorkbook.Name *nm1.Worksheets(1).Copy Before:= _ nm.Worksheets(1)  以下 地域ファイルのOPEN、全国へ貼り付けの繰り返し ------------------------------------ 苦労の結果、奇跡的に動いたのですが、勘違いでファイルの保存もれをしてしまいました。 過程を記録していなかったので、どこをどう直したら動いたのか 再現出来ません。「Application.」が足りないような気がしてるのですが。ご指摘お願いします。 ついでといってはなんですが・・・ 今回はファイル名を直指定してますが、「あるフォルダの全部のエクセル」という形でループさせることが出来れば非常にありがたいです。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.2

>nm1.Worksheets(1).Copy Workbooks(nm1).Worksheets(1).Copy なら分かりますが、質問の書き方ではエラーになります 以下のマクロは閉じているBookはOpenしてシート1をコピー、開いているシートはそのままシート1をコピーするものです。 Sub bookipponka() Dim wb, Zenkoku As Workbook Dim buf As String Dim psw As Boolean Const fl As String = "C:\全国.xls" ←ここにフルパスで指定  Application.ScreenUpdating = False  On Error GoTo end0  Workbooks.Open Filename:=fl  Set Zenkoku = ActiveWorkbook  buf = Dir(Zenkoku.Path & "\*.xls")  Do While buf <> ""   If buf <> Zenkoku.Name Then    psw = False    For Each wb In Workbooks 'Bookが開いているか検査     If wb.Name = buf Then      psw = True      Exit For     End If    Next wb    If psw Then 'シートが既に開いているとき     Workbooks(buf).Worksheets(1).Copy _       before:=Zenkoku.Worksheets(1)    Else 'シートが開いていないとき     Workbooks.Open Filename:=buf     Workbooks(buf).Worksheets(1).Copy _       before:=Zenkoku.Worksheets(1)     Workbooks(buf).Close savechanges:=False    End If   End If   buf = Dir()  Loop end0:  Application.ScreenUpdating = True End Sub

noname#252806
質問者

お礼

回答ありがとうございます。 >Workbooks(nm1).Worksheets(1).Copy 明日試してみます。 >下のマクロは閉じているBookはOpenしてシート1をコピー、開いているシートはそのままシート1をコピーするものです。 ピンポン!です。 実は元のエクセルを直して、ファイルを開きっぱなしだと 警告が出てマクロを終了せざるを得なかったりと作業上 困っていたところです。「if psw]ですか・・勉強になります。 大量のため手作業では嫌になるような処理がマクロで一気に 動く様を見ていると、気持ちがいいですね。 ありがとうございました。前回も回答頂きましたが 又懲りずに恥ずかしい質問をすると思いますので今後もよろしく お願いします。 

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.1

パッと見た感じでは動いた事すら疑問に思いますので、何処を修正すべきかは答えられません。 フォルダ内のループは何通りか書き方がありますが、 下記のマクロを記述したブックを適当なフォルダに保存します。 実行すると、同じフォルダ内のExcelファイルを次々開いて、1枚目のシートをこのブックにコピーして行きます。 参考まで。 Sub Test() Dim myDir As String, myName As String, wb As Workbook myDir = ThisWorkbook.Path & "\" myName = Dir(myDir & "*.xls", vbNormal) Do While myName <> ""   If myName <> ThisWorkbook.Name Then    Set wb = Workbooks.Open(myDir & myName)    wb.Worksheets(1).Copy after:= _    ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count)    wb.Close   End If   myName = Dir Loop End Sub

noname#252806
質問者

お礼

>パッと見た感じでは動いた事すら疑問に思いますので// ごもっともです。見ようみまねでマクロをかじった 状態ですので笑ってやってください。 「あるブックのシートをコピーして、あるブックのシートにはりつける」という 中身は簡単なことですが構文?のエラーでひっかかりました。 でも昼間は勘でいじくりながらエラーをつぶしていったら 本当に動いたのですよ。 (ただし理論の裏づけが無いので、再現できません。) 頂いたコードはありがたく頂戴します。 これで明日の仕事がはかどります。 回答ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • ExcelでBookを開くPasswordにエラーを出さないには

    Sub Dim FileName As String FileName = "D:\集計表.xls" Dim Sheet_Name As String Dim Book_Name As String Workbooks.Open FileName:=FileName Sheet_Name = "Sheet1" Book_Name = ActiveWorkbook.Name Workbooks(Book_Name).Sheets(Sheet_Name).Select Range("A1").Select End Sub 上記の構文でBookを開く時に「Password」を要求して開くようにしています。 ただ、Passwordを間違えた時は「実行時エラー1004」とな、「デバック」するか「終了」するしかありません。 デバック」・「終了」をせずに再度Password入力に戻るにはどの様にすれば良いでしょうか。

  • エクセルのマクロ

    お世話になります。 Book1.xlsというファイルから、不特定のファイルを開き、一定の作業の後、閉じる場合のマクロについて伺います。 name1、name2のファイルを開き、vlookup関数を入力する場合のマクロの記載は、サイトを検索し、下記のようにすればできました。 Dim name1 As String Dim name2 As String sub macro1() 省略 Workbooks.Open Filename:=name1 Workbooks.Open Filename:=name2 Windows("Book1.xls").Activate Range("C6").Select ActiveCell.FormulaR1C1 = _ "=VLOOKUP(RC1,'[" & name1 & "]sheei1'!C1:C155,R1C,FALSE)" Range("C7").Select ActiveCell.FormulaR1C1 = _ "=VLOOKUP(RC1,'[" & name2 & "]sheei1'!C1:C155,R1C,FALSE)" (省略) ***************************** Windows("name1").Activate ActiveWindow.Close  Windows("name2").Activate ActiveWindow.Close ***************************** として、呼び出したファイルを(保存せず)閉じたいのですが、("name1")("name2")の部分の記載方法を教えてください。よろしくお願いします。

  • ブックの選択について

    ブックの選択について 以下のように、マクロのあるブック意外のブックを開いて からマクロのあるブックを選択しようとしてもできません。 具体的には一番下の Workbooks(thisBook).Select が正常に動きません。 なぜでしょうか? Dim myFName As String Dim macrobook As Object Dim thisBook As Workbook Set thisBook = ThisWorkbook myPath = ActiveWorkbook.Path ChDir myPath myFName = Dir("*S*.xls") Workbooks.Open Filename:=myFName Workbooks(myFName).Activate Worksheets(1).Select Workbooks(thisBook).Select

  • Excelマクロのエラー

    お世話になります。 マクロは、超初心者で只今、本やネットで勉強中なのですが、本の通りに作成しましたが、 エラーが出てしまいます。 急いでおりまして、大変お手数ですがご教示お願いできますでしょうか? Excel2007でマクロを作成中(実際に業務で使用する環境は2003です)。 2点あります。 (1)サブフォルダ内の全ブックを開く  ファイルは開くのですが、下記のエラーが出てしまいます。  C:¥...... "\web保存\"が見つかりません。ファイル名およびファイルの保存場所が  正しいかどうかを確認してください。 (2)開いたファイルをhtm保存する。  htm保存できるのですが、ファイル名が「●●●.xls.htm」  となってしまい、元のファイル名の.xlsの拡張子が付いたままです。  ファイル名を変えず、「●●●.htm」となるようにしたいです。 どうぞ宜しくお願い致します。 (1)サブフォルダ内の全ブックを開く Sub 全ブックを開く() Dim パス名 As String Dim ファイル名 As String パス名 = ThisWorkbook.Path & "\web保存\" ファイル名 = Dir(パス名 & "*.xls*") Do While ファイル名 <> " " Workbooks.Open パス名 & ファイル名 ファイル名 = Dir() Loop End Sub (2)開いたファイルをhtm保存する Sub htm保存() Dim wb As Workbook Dim wbname As String For Each wb In Workbooks wb.Activate If wb.Name <> ThisWorkbook.Name Then wb.SaveAs FileName:=ThisWorkbook.Path & "\" & wb.Name & ".htm", FileFormat:=xlHtml, CreateBackup:=False wb.Close savechanges:=False End If Next End Sub

  • エクセル マクロについて

    エクセルのマクロについて教えてください。 下記のようなマクロを実行した場合 どのような条件でフォルダ内のファイルを オープンしていくのでしょうか。 ファイルの名前や更新時間などでしょうか? また、名前や更新時間順でファイルを開いていくように するにはどうしたらよろしいでしょうか。 ご回答よろしくお願い致します。 以下マクロ 'オブジェクトを設定する Set ファイルシステム = CreateObject("Scripting.FileSystemObject") '読み込むファイルを1個指定する あるブック = Application.GetOpenFilename("Excelファイル(*.xls),*.xls") '親フォルダーを取得する Set 親フォルダー = ファイルシステム.GetFile(あるブック).ParentFolder '親フォルダー内の全ファイルに以下の操作をする For Each ファイル In 親フォルダー.Files 'ファイルを開く Workbooks.Open ファイル.Path 'ブック名を記憶する ブック名 = ActiveWorkbook.Name '開いたファイルの伝票(NO)のシートを「全データ」シートの後ろにコピーする ActiveWorkbook.Worksheets("伝票(NO)").Copy After:=ThisWorkbook.Worksheets("全データ") '開いたファイルを閉じる Workbooks(ブック名).Close Next                                                 以上

  • エクセルVBAでのエラー

    おはようございます。 昨日ここでいろいろ教えていただき、300のエクセルファイルから特定の範囲のデータ抽出方法を書いてみたのですが、セルが多すぎて実行できません、というエラーがでてしまいます。 これはどのように解消すればよろしいのでしょうか? Sub Test() Dim FPath1 As String, FPath2 As String Dim FName As String, myBook As String Const startROW As Long = 14, lastROW As Long = 20 Const startCOL As Long = 8, lastCOL As Long = 10 Const shtNAME As String = "sheet1" Application.ScreenUpdating = False FPath1 = "D:\MR5567\" FPath2 = "D:\New Microsoft Excel Worksheet\" Workbooks.Add myBook = ActiveWorkbook.Name FName = Dir$(FPath1 & "*.xls") Do While FName <> "" Workbooks.Open Filename:=FPath1 & FName ActiveWorkbook.Sheets.Select Sheets(1).Activate Sheets.Copy After:=Workbooks(myBook).Sheets(Sheets.Count) Workbooks(FName).Activate Application.DisplayAlerts = False ActiveWorkbook.Close FName = Dir$ Loop ActiveWorkbook.SaveAs Filename:=FPath2 & "Renketsu.xls", FileFormat:=xlNormal ActiveWorkbook.Close Application.ScreenUpdating = True End Sub

  • ワードのマクロからエクセルシートを開きデータを読み込む

    ワードマクロからエクセルシートのデータを読み込みたいのですが、マクロを実行すると「コンパイルエラー:変数が定義されていません。」というエラーが出てしまいます。変数xlUpで引っかかってるようなんですが、どのように定義すればよいですか? コードは以下です。 Dim Workbooks As Object Dim ecell As Integer Workbooks.Open FileName:="namesheet.xls" ecell = Workbooks("namesheet.xls").Worksheets(1).Range("B100").End(xlUp).Row よろしくお願いいたします。

  • Excel vba 実行エラー1004

    (1)アクティブブックの名前を取得してセルO2に貼り付けた。ex. 1234567b.CSV (2)VBAを使って1234567k.CSV におきかえた。 (3)(2)のセルに入力された内容でブックを開きたいが、エラー1004が出て開けない。 (4)開けたとして、そのブックのA1セルを 元のブックをアクティブにして D1に 貼り付けたい。 (5)またさっきのブックに戻ってF1セルを 元のブックをアクティブにして E1セルに貼り付けたい。 というようなVBAを組みたいと思っています。 現在(1)(2)はできましたが(3)でエラーが出たため止まっていますし、その後もわかりません。 Dim bb As String Dim kb As String bb = ActiveWorkbook.Name Cells(2, "O").Value = ActiveWorkbook.Name Cells(3, "O").Value = ActiveWorkbook.Name Range("O2").Formula = Replace(bb, "b.CSV", "k.CSV") kb = Range("O2") 'シート名を取得する Dim bbs As String bbs = Left(bb, 10) Cells(4, "O").Value = bbs Dim kbs As String kbs = Left(kb, 10) Cells(5, "O").Value = kbs 'コピーして貼り付ける kbn = Cells(2, 15) Workbooks.Open Filename:=kbn Range("F1").Select Range("F1").Copy として作ってるんですが、 Workbooks.Open Filename:=kbn でエラーが出てブックが開けません。 ご指導お願いします。

  • マクロボタンのシートをコピーしたいのですが。。。

    こんにちは。 たくさんあるファイルを一つのファイルにシート別にまとめるマクロを作成しました。 毎月同じことをするので、マクロボタンを作成したところ、作成したつきのボタンは正常に作動しますが、このシートを新しいBOOKにコピーして翌月分を作成したところ、マクロが消えてしまい、実行されません。 毎月のことなので、いちいち『前月のマクロをコピーして実行』などしないで、このボタンをコピーすればあとは押すだけ♪なんていう風にうまくいかないものでしょうか? かなり初心者な者で、上手な説明が出来ず申し訳ございません。 Sub 精算用5月() Dim fs As Variant Dim s As Variant Dim w As Workbook fs = Application.GetOpenFilename(Title:="select xls(s)", MultiSelect:=True) If Not IsArray(fs) Then Exit Sub For Each s In fs Set w = Workbooks.Open(Filename:=s) w.Worksheets(1).Copy after:=ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count) ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count).Name = Application.Substitute(w.Name, ".xls", "") w.Close savechanges:=False Next Worksheets(1).Range("A1").Formula = "=SUM(" & Worksheets(2).Name & ":" & Worksheets(Worksheets.Count).Name & "!A1)" End Sub 上記のマクロでボタンを作成しました。 よろしくお願いいたします。

  • エクセルのブック間ででデータをコピーするPG

    エクセル2000でブック間のデータのコピーをやっていての質問です。 あるディレクトリ内に「統合するファイル.xls」と「統合されるファイル.xls」があります。両方のファイルにはC列からG列、2行目以下に数字のデータが入っています。(C2~G2、C3~G3・・・・というように続きます) 「統合されるファイル」のC列からG列のデータをコピーして「統合するファイル」のデータの下に貼り付けるプログラムを作っています。プログラムは以下です。 Dim sBase As String Dim sMyPath As String Dim lLine As Long Dim lStartRow As Long Application.ScreenUpdating = False '統合するファイル名・ディレクトリ名取得 sBase = ActiveWorkbook.Name sMyPath = ActiveWorkbook.Path & "\" Workbooks.Open Filename:=sMyPath & "統合されるファイル.xls" lLine = Workbooks("統合されるファイル.xls").Worksheets("Sheet1").Cells(ActiveSheet.Rows.Count, 3).End(xlUp).Row '統合するファイルの最終行を抽出 lStartRow = 0 lStartRow = Workbooks(sBase).Worksheets("Sheet1").Cells(ActiveSheet.Rows.Count, 3).End(xlUp).Row '統合されるファイルからコピーして統合するファイルの最終行より下に貼り付け Workbooks("統合されるファイル.xls").Worksheets("Sheet1").Range(Cells(2, 3), Cells(lLine, 7)).Copy Destination:=Workbooks(sBase).Worksheets("Sheet1").Range(Cells(lStartRow + 1, 3)) Workbooks("統合されるファイル.xls").Close SaveChanges:=False Application.ScreenUpdating = True 現在、このプログラムを走らせると、コピーして貼り付けるところで「アプリケーション定義またはオブジェクト定義のエラーです」という警告が出てコピーされない状況です。 何が悪いのでしょうか?

専門家に質問してみよう