• ベストアンサー
  • 困ってます

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'オブジェクト どこを直せばいいのでしょうか? アドバイス願います。

共感・応援の気持ちを伝えよう!

  • 回答数2
  • 閲覧数1786
  • ありがとう数10

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

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

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 です。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

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

関連する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

  • VBAがうまく動きません。

    エクセルVBAで実行時は正確に動かないが、ステップインでは正常に作動するのはなぜですか? 入力シートに入力された情報を元にデータシートから抽出を行い、新規シートを開き、そこでリストにしたい情報のみを編集(不要なタイトル行などの削除)して、自動で貼り付けと名前の定義を行うマクロを作っています。 ステップイン[F8]や実行[F5]では正常に作動するのですが、実際に使用してみると、抽出データが貼り付けされていない状態(セルは空白)となりますが、名前の定義は抽出データと同じ行まで定義されているので、貼り付けのみ上手くいっていないように思われます。 下記が作成したコードです。情報が足りないようでしたら、申し訳ありません。 お手上げ状態となっていますので、お力添えいただけると幸いです。 Dim syurui as String Dim suuryou as Integer Dim target as Range Private Sub Worksheet_Change(ByVal target As Range) If Intersect(target, Range("D7")) Is Nothing Then Exit Sub Else Call 抜出 End If End Sub Sub 抜出() Worksheets("データ").Activate ’後に出てくる名前初期化でエラーを防ぐため仮定義 ActiveWorkbook.Names.Add Name:="番号", _ RefersTo:=Worksheets("データ").Range("K2") syurui = Worksheets("入力").Range("D9").Value Worksheets("データ").Select Set target = Worksheets("データ").Range("M2") With Worksheets("データ").Range("D1") .AutoFilter field:=4, Criteria1:=syurui .CurrentRegion.SpecialCells(xlVisible).Copy With Worksheets.Add .Paste ’不要な行を削除 .Rows(1).Delete .Range("A:D").Delete .Range("B:F").Delete ’抽出した情報を貼り付け&新規シート削除 .UsedRange.Copy target Application.DisplayAlerts = False .Delete Application.DisplayAlerts = True End With .AutoFilter End With ’抽出データの最終行を調べる suuryou = Worksheets("データ").Cells(65536, "M").End(xlUp).Row If suuryou = 1 Then Worksheets("入力").Activate Exit Sub Else Range("番号").Name.Delete ActiveWorkbook.Names.Add Name:="番号", _ RefersTo:=Worksheets(”データ").Range("M2:M" & suuryou) End If Worksheets("入力").Activate End Sub

  • 《エクセル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に存在するシート名は入っていると思います。 今の状態で、該当入力シートの一番下の行を探す時点で実行時エラーが出てしまうのですが、なぜでしょうか?

その他の回答 (1)

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

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

共感・感謝の気持ちを伝えよう!

関連するQ&A

  • コマンドボタンを押したときシート2のa行の空白セルを選択したいのですが

    コマンドボタンを押したときシート2のa行の空白セルを選択したいのですが以下のやり方では”RangeクラスのSelectメソッドが失敗しました。”のエラーが出てしまいます。どこがいけないのか教えてください。 Private Sub CommandButton1_Click() Worksheets("sheet2").Activate Range("a65536").End(xlUp).Offset(1).Select End Sub ちなみに、コマンドボタンはシート1にあります。 よろしくお願いします。

  • VBAで実行時エラー1004が出ます

    VBAで実行時エラー1004が出ます。 「Rangeメソッドは失敗しました。Worksheetオブジェクト」です。 あらゆる可能性を調べたのですが、分かりません。誰か教えて頂けますでしょうか? 下記コードの「Cells(m, 7) =・・・」の部分がエラーになりました。 Sub ボタン1_Click() Dim 現シート As Worksheet &#65374; 現シート.Activate Cells(m, 7) = WorksheetFunction.VLookup(現シート.Range(現シート.Cells(m, 4)).Select, 現シート.Range(現シート.Cells(4, 104), 現シート.Cells(15, 107)).Select, 4, False) &#65374; End Sub 何卒宜しくお願いいたします。

  • Excel2013にしたらVBAがすごく重くなった

    会社のPCがExcel2010からExcel2013に変更されたのですが、Excel2010の環境で作成していたVBAマクロの処理がもの凄く遅くなってしまいました。 Excel2010では10秒ほど待てば終わった処理が30分以上かかるようになってしまい、業務効率を上げるために作ったVBAが逆に非効率になってしまい困っております。 (フリーズしたような感じになりますが、長時間までは処理は終わり、エラーは出ておりません) Excel2013で重くなった箇所を調べていたら、下記コード部分の繰返し処理で重くなっているのが分かりました。 処理の概要は、「全体」シートの指定列の最終行のセルから指定された番号(12345)があるか1行ずつ調べていき、ヒットしたらその行を全体を切取り、「●●」シートの最終行に貼り付けていく単純なものです。 「全体」シート行数は8000&#65374;10000行あります。 ・重くなっている処理の箇所 ================================== Application.ScreenUpdating = False ActiveWorkbook.Worksheets("全体").Activate LastRow = Cells(Rows.Count, 1).End(xlUp).Row For i = 1 To LastRow If Cells(i, 5).Value Like "12345" Then Rows(i).Cut Sheets("●●").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0) End If Next i ================================== Excel2010で問題のなかった処理がExcel2013になって途端に重くなった原因自体も分かりませんが、問題点の回避方法や処理速度を改善する方法はありませんでしょうか。 よろしくお願いいたします。

  • VBA オブジェクトが必要です エラー424

    VBA初心者です。 初歩的な質問で申し訳ありません。 ユーザーフォームのコンボボックスにユーザーリストを読みこみプルダウンする構文です。 以下を実行すると 実行時エラー 424 オブジェクトが必要です という警告が出ます。 どこを直せばいいのかわかりません。 詳しい方教えて下さい。宜しくお願いします。 private sub userform_initialize() dim 最終行 as integer dim i as integer 最終行 = worksheets(゛meisai″).cells(Row.count,8).end(xlup).Row for i = 1 to 最終行 combobox1.addItem worksheets(″meisai゛).value next i 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を実行しても結果が反映されない??

    下記のVBAを作成しましたが結果が反映されません ※実際は反映されているのかもしれませんが思うような結果ではありません やりたいこととしてはボタンを選択すると 特定のシート[BBB]の[B2:D2]を シート[AAA]の最終行と同じ行番号までコピーすることです おかしい個所をご指摘いただきたいです ※同様の質問を他の形でさせていただきましたがうまくいかなかったため新しく組み直したものです --- Private Sub CommandButton_Click() Dim ws As Worksheet Set ws = Worksheets("BBB") Range("B2:D2").Select Selection.AutoFill Destination:=Range("B2:D" & Sheets("AAA").Range("A1").End(xlUp).Row) Range("B2:D" & Sheets("AAA").Range("A1").End(xlUp).Row).Select End Sub

  • Excelで最終行の空白を削除にする

    ExcelのVBAでつまづいています。 以下のようにコードを書きました。 Sub Auto_Close() Worksheets("Sheet1").Select 'シート1を開く If ActiveSheet.FilterMode = True Then ActiveSheet.ShowAllData End If 'フィルタをすべてチェックする Filename = Format(Now(), "yyyy-mm-dd-hh-mm-ss") ThisWorkbook.SaveAs Filename:="\\●●●●\●●●●\●●●●\●●●●\●●●●\" & Filename & ".xlsm" 'Excelデータをバックアップ ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Select '一番左下の空白セルに移動 ActiveWorkbook.Save '開いているセルを上書き保存 End Sub 次に開いたときにはA列最終行の空白がアクティブになっているはずなのですが、うまくいきません。 バックアップのコードを削除するとうまくいくのですが、なぜそうなるのか意味がわかりません。 どこがおかしいですか?

  • どこが間違ってますか? (エクセルVBAです)

    質問をご覧くださりありがとうございます。 どなたか助けていただけないでしょうか。 以下のコードの場合、B2セルをダブルクリックすればシート(1)が開くと思っていたのですが、B2以外のセルをダブルクリックしてもシート(1)が開いてしまいます。 どこが悪いのでしょうか。 詳しい方がいらっしゃいましたら、どうか教えてください。 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, cancel As Boolean) If Target = Range("B2") Then cancel = True Worksheets("シート(1)").Activate End If 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

  • データの値取得マクロ

    Sub Macro1() ''Worksheets("Sheet1").Activate ' addrw = Range("b65536").End(xlUp).Offset(1).Row Cells(addrw, 2).PasteSpecial end sub でB列の最終行を取得しその後、最終行の次のセルから追加のデータを貼り付けるマクロを作成しました。 このあと、追加のデータを貼り付ける前のB列の最終行の値と貼り付け後のB列の最終行の値を取得したいのですがどうすればいいでしょうか?