VBAで実行時エラー 1004が発生する

このQ&Aのポイント
  • Excel2013でVBAを使用している際に、実行時エラー1004が発生します。
  • 特定のシートをアクティブにして、そのシートのA行の最終行の一つ下にデータを追加し、上書き保存して閉じる処理を行いたい場合、エラーが発生します。
  • エラーの内容は、Worksheetsメソッドの失敗によるものであり、このエラーを解決する方法についてアドバイスをいただきたいです。
回答を見る
  • ベストアンサー

VBAで実行時エラー 1004 がでる

Excel2013です。以下のコードでエラーがでます。 どのシートがアクティブでもデータを閉じる時に特定のシート(sheet1)のA行の最終行の一つ下をアクティブにし上書き保存して閉じるようにしたいです。 以下記述したコードです。 Sub Auto_Close() Worksheets(1).Activate Range("A60000").End(xlUp).Offset(1).Select 'Aセル60000から最終行のセルの一つ下に下がる ActiveWorkbook.Save End Sub 閉じるときは問題ないのですが、開いたときにエラーがでます。 以下エラー文です。 実行時エラー 1004 'Worksheets'メソッドは失敗しました'_Global'オブジェクト どこを直せばいいのでしょうか? アドバイス願います。

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

  • ベストアンサー
  • mar00
  • ベストアンサー率36% (158/430)
回答No.2

A_No.1です。 間違えました。 Sub Auto_Close() Dim myRow As Long Worksheets(1).Activate myRow = Cells(Rows.Count, "A").End(xlUp).Row Range("A" & myRow).Offset(1).Select ActiveWorkbook.Save End Sub です。

oimoita
質問者

お礼

ご回答ありがとうございます。 いただいたコードで問題なく実行することができました。 どこが原因だったのかが自分でわかっていないのが気持ち悪いですが後でよく調べたいと思います。

その他の回答 (1)

  • mar00
  • ベストアンサー率36% (158/430)
回答No.1

こちらで試してみましたがエラーはでないようですが。 Sub Auto_Close() Worksheets(1).Activate Cells(Rows.Count, "A").End(xlUp).Row.Offset(1).Select 'Aセル60000から最終行のセルの一つ下に下がる ActiveWorkbook.Save End Sub としてはどうでしょうか。

関連するQ&A

  • VBA 実行時エラー 1004 の表示が出る

    下記のVBAを作成していてエラーが出てしまいます やりたいこととしてはボタンを選択すると 特定のシート[AAA]の最終行を取得して 別シート[BBB]の2行目をシート[AAA]との最終行までコピーすることです --- Private Sub CommandButton_Click() Sheets("AAA").Range("A1", Cells(Rows.Count, 1).End(xlUp)).Offset(, 1).Resize(, 3).Formula = Sheets("BBB").Range("B2:D2").Formula End Sub

  • このコードですが、うまく実行できません!

    EXEL 2002 です。 最終シートに 「約40行」 ぐらいのデータがあり、   その各行の列に、 約20個の数値のセルがあり、    その各セルの数値が 3 以上だったら、 「.Offset(38, 0)」セルを赤色にする。 を、全部の 「約40行」 に実行したいと思っております。 下記コードなのですが、 うまくできません、 3行目がエラーとなります。 何卒、ご教示よろしくお願い致します。 ------------------------- Sub 数値3以上なら上方セルを赤色にする() Dim r As Range With Worksheets(Worksheets.Count) For Each r In .Range("A40", .Range("A65536").End(xlUp)) If r.Offset(0, 1).Resize(, r.Offset(0, 1).Range("IV40").End(xlToLeft)).Cells.Value >= 3 Then r.Offset(38, 0).FormatConditions(1).Interior.ColorIndex = 3 '赤に塗りつぶす End If Next r End With End Sub

  • 既存のVBAコードにエラー処理の追加をしたいのですが

    たびたび申し訳ないです。 エクセル2003ですが、シート2のデータをシート1のA列にある日付と1行目にある製品名とで検索をかけて当てはまるセルにシート2のデータを転記する(下記記載)コードがあります。当てはまるセルがないときはシート2の対応するセルが赤く反転するエラー処理がなされています。 以前こちらで教えていただいたのですが、このコードに更に下記のようにシート1の当てはまるセルが入力済みならば上書きしますかと言う Worksheets("Sheet1").Cells(trgR, trgC) <>""Then If MsgBox("上書きしますか", vbQuestion + vbOKCancel) = vbOK Then Worksheets("Sheet1").Cells(trgR, trgC) = .Cells(idxR, 3) このようなコードをさらに付け加えたいのですが、どのようにすればいいかご教授願います。1週間いろいろやってみたのですがうまくいきません。赤く反転するエラー処理もそのまま生かしておきたいのです。長い質問で申し訳ありませんがよろしくお願いいたします。 元のコードです。 Private Sub CommandButton1_Click() Dim LastR, idxR As Long, trgR, trgC With Worksheets("Sheet2") LastR = .Range("A65536").End(xlUp).Row trgR = Application.Match(.Cells(1, 1), Worksheets("Sheet1").Range("A:A"), 0) For idxR = LastR To 3 Step -1 trgC = Application.Match(.Cells(idxR, 1), Worksheets("Sheet1").Range("1:1"), 0) If IsNumeric(trgR) And IsNumeric(trgC) Then Worksheets("Sheet1").Cells(trgR, trgC) = .Cells(idxR, 3) Else .Cells(idxR, 1).Interior.ColorIndex = 3 End If Next idxR End With End Sub

  • VBA 実行エラーの原因

    次のコードは、アクティブブックのSheet2を、Book222のSheet1の後ろにコピーします。 とあって、実際Book111、Book222を開いて実行するも、 実行時エラー9:インデックスが有効範囲にありませんがでます。 どこが悪いかさっぱりわかりません。教えてください。 Sub Sample05() Worksheets"Sheet2").CopyAfter:=Workbooks"Book222").Worksheets("Sheet1") End Sub

  • エクセルVBA の変数を使うべきでしょうか?

    はじめまして。エクセル初心者です。 書籍やサイトで勉強させてもらっていますが、VBAがなかなか難しくてすぐに壁にぶつかってしまいます。少々困ってしまい、詳しい方のアドバイスを頂ければと質問を投稿させていただきました。 どうか宜しくお願い致します。質問ですが、 以下のようなコードで、sheet5のB列の任意のセルをダブルクリックした場合、sheet5のBCD列の同じ行のセル値がsheet1の指定した列に入力されるという処理を作りました。 これで一応目的の動作はするのですが、数が増えると「コンパイルエラー・プロシージャが大きすぎます」というメッセージがでてしまいます。列や行には規則性があるので、もしかしたら変数というものを使ってコードを書き直せばいいのかなと思いネットで調べてみたのですが、今のところさっぱり理解できません。 申し訳ありませんが、分かりやすくご教授いただけないでしょうか。バージョンは2003を使っています。 また、下のコードですと、sheet5のBCDいずれかのセルに空白があった場合、sheet1の列に入力されるときに入力される行がずれてしまいます。今は空白を何かで埋めて対処しているのですが、この問題の解決策も教えて頂けると助かります。どうか宜しくお願い致します。 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Excel.Range, cancel As Boolean) If Target.Address = "$B$2" Then Worksheets("sheet1").Range("B" & Rows.Count).End(xlUp).Offset(1).Value = Target.Value Worksheets("sheet1").Range("H" & Rows.Count).End(xlUp).Offset(1).Value = Worksheets("sheet5").Range("B2") Worksheets("sheet1").Range("K" & Rows.Count).End(xlUp).Offset(1).Value = Worksheets("sheet5").Range("C2") Worksheets("sheet1").Range("M" & Rows.Count).End(xlUp).Offset(1).Value = Worksheets("sheet5").Range("D2") Worksheets("sheet1").Activate cancel = True End If If Target.Address = "$B$3" Then Worksheets("sheet1").Range("B" & Rows.Count).End(xlUp).Offset(1).Value = Target.Value Worksheets("sheet1").Range("H" & Rows.Count).End(xlUp).Offset(1).Value = Worksheets("sheet5").Range("B3") Worksheets("sheet1").Range("K" & Rows.Count).End(xlUp).Offset(1).Value = Worksheets("sheet5").Range("C3") Worksheets("sheet1").Range("M" & Rows.Count).End(xlUp).Offset(1).Value = Worksheets("sheet5").Range("D3") Worksheets("sheet1").Activate cancel = True End If If Target.Address = "$B$4" Then Worksheets("sheet1").Range("B" & Rows.Count).End(xlUp).Offset(1).Value = Target.Value Worksheets("sheet1").Range("H" & Rows.Count).End(xlUp).Offset(1).Value = Worksheets("sheet5").Range("B4") Worksheets("sheet1").Range("K" & Rows.Count).End(xlUp).Offset(1).Value = Worksheets("sheet5").Range("C4") Worksheets("sheet1").Range("M" & Rows.Count).End(xlUp).Offset(1).Value = Worksheets("sheet5").Range("D4") Worksheets("sheet1").Activate cancel = True End If   ・     ・   ・     ・   ・     ・ End Sub

  • VBA実行時、エラーがでる

    Sub 登録() ActiveSheet.Range("A1:EZ1").Copy ChDir "\\顧客管理" Workbooks.Open Filename:="\\顧客管理\顧客管理A.xls" Sheets("顧客データー").Select Worksheets("顧客データー").Range("A1").PasteSpecial Paste:=xlPasteValues ActiveWorkbook.Save ActiveWindow.Close Range("A1").Select End Sub 上記のコードがあります。顧客管理Aというbookにデーターを取り込むというコードですが、時々顧客管理Aのbookを開いたままの状態で上記マクロを実行してしまいエラーが出てしまいます。もし顧客管理Aのbookを開いたままのじょうたいで上記マクロを実行した場合、顧客管理Aのbookが閉じるまで上記コードの3行目以降の処理を待機し、顧客管理Aのbookが閉じたら上記コードの3行目以降の処理を実行するという事は可能でしょうか?

  • vbaマクロ 実行時エラー '91'について教えてください

    下記のマクロで、ファイル指定保存をする時に "実行時エラー91 オブジェクト変数またはWithブロック変数が設定されていません”がでます。 やりたいのは、選択したセルの1番目をファイル名として 保存をしたいのですが、うまくいきません。 どうしたらよいのでしょうか? Sub Macro1() Dim セル As Object Dim i As Long  i = 1  For Each セル In Selection   Worksheets("Sheet2").Cells(1, i).Value = セル     i = i + 1  Next ActiveWorkbook.SaveAs Filename:="D:\TEST\" & セル & ".xls" End Sub

  • 印刷後のVBAの実行 (2)

    Private Sub Workbook_BeforePrint(Cancel As Boolean)   If ActiveSheet.Name = "Sheet1" Then     If Range("D6").Value = "" Then       Cancel = True       MsgBox ("名前を入力してください")       Range("D6").Select       Exit Sub     End If   Else     If ActiveSheet.Name = "Sheet2" Then       If Range("C11").Value = "" Then         Cancel = True         MsgBox ("受付時間を入力してください")         Range("C11").Select         Exit Sub       End If     Else              Exit Sub     End If   End If   ActiveSheet.Range("A70:Y70").Copy   If Worksheets("Sheet3").Range("A1").Value = "" Then     Worksheets("Sheet3").Range("A1").PasteSpecial Paste:=xlPasteValues   Else     Worksheets("Sheet3").Range("A65536").End(xlUp).Offset(1, 0).PasteSpecial _       Paste:=xlPasteValues   End If   Application.CutCopyMode = False   ActiveSheet.Range("A1").Select End Sub 先日、上記のコードを回答者の方から教えてもらい、とても助かっていますが sheet1のD5に「不要」という文字が入っていた場合、 sheet3への貼り付け(23~30行目の作業)をキャンセルして、最後にsheet1のA1を選択するようにはどの様にしたらいいでしょうか?

  • 《エクセル2000VBA》これで実行時エラー '1004'が出るのはなぜでしょう?

    こんにちは。VBAの実行時エラーで困っています。 内容を抜粋したものが、下記のものになります。 If Worksheets(sname1).Range("M6") <> Empty Then MsgBox (sname1) MsgBox (Worksheets(sname1).Range("M6")) '該当入力シートの一番下の行を探す Worksheets(sname1).Range("M65536").End(xlUp).Offset(1).Select sname1はシート名の変数です。 2つのMsgBoxが間違いなく表示されますので、sname1に存在するシート名は入っていると思います。 今の状態で、該当入力シートの一番下の行を探す時点で実行時エラーが出てしまうのですが、なぜでしょうか?

  • VBA 実行時エラーで、"プロパティまたはメソッド

    ・Sheet1(コード) Private Sub CommandButton1_Click() Call aaa End Sub ・Module1(コード) Sub aaa() Dim wb As Workbook Dim ws As Worksheet Workbooks.Open ("c:\test.xls") Set wb = Workbooks("test.xls") Set ws = wb.Worksheets("Sheet1") wb.ws.Range("A2").Value = "CCC" End Sub wb.ws.Range("A2").Value = "CCC"の部分で 以下の実行エラーが出ます。 ------------------------------------------------------------------------ 実行時エラー'438': オブジェクトは、このプロパティまたはメソッドをサポートしていません。 ------------------------------------------------------------------------ Set wb = Workbooks("test.xls") Set ws = wb.Worksheets("Sheet1") の部分で特にエラーも出ないので、オブジェクトの取得は成功していると 思うのですが、WorkSheetオブジェクトのwsからRangeメソッドを呼ぶことが できません。 動かない原因と対策を教えてください!!

専門家に質問してみよう