[[20190803183803]] 『同じマクロを Workbook_BeforeCloseにするとエラ=x(なぜ) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『同じマクロを Workbook_BeforeCloseにするとエラー9がでます』(なぜ)

いつもお世話になります
ファイル間でシートをコピーするマクロ
Option Explicit

Sub レース名コピー()

    Sheets("レース名1").Select
    Range("A1:K1001").Select
    Range("A6").Activate
    Selection.Copy
    Application.CutCopyMode = False
    Selection.Copy
    Workbooks.Open Filename:="G:\521-42.xlsm"
        Sheets("格付け 成績").Select
    Sheets("競走名").Select
    Range("A1").Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
    Range("B1").Select
    ActiveWorkbook.Save
    ActiveWindow.Close
    Range("A2").Select
End Sub

を作って動作確認をしたので
ファイルを閉じるときにできるように
Option Explicit

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Application.ScreenUpdating = False

    Sheets("レース名1").Select
    Range("A1:K1001").Select
    Range("A6").Activate
    Selection.Copy
    Application.CutCopyMode = False
    Selection.Copy
    Workbooks.Open Filename:="G:\521-42.xlsm"
    Sheets("競走名").Select
    Range("A1").Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
    Range("B1").Select
    ActiveWorkbook.Save
    ActiveWindow.Close
    Range("A2").Select
    ActiveWorkbook.Save
Application.ScreenUpdating = True
End Sub

としたのですが

    Sheets("競走名").Select
でエラー9が出てしまいます
なぜでしょうか

< 使用 Excel:Excel2010、使用 OS:Windows7 >


 恐らく記録したマクロをそのままThisWorkbookに移植してしまったのでしょう。

 ThisWorkbookに書かれたブックの指定のないシートオブジェクトは、ThisWorkbookが親オブジェクトとして
 扱われます。

 そのまま活かすなら ActiveWorkbook.Sheets("競走名").Select としてみてください。
(seiya) 2019/08/03(土) 19:33

個人的にはActive○○の操作が好きではないので、対象オブジェクトを明示することをおすすめしますが、それより、無駄なselect が気になります。

オブジェクト型の変数やWithステートメントを使うと、もう少し短くかけるとおもいますので、調べてみてはいかがでしょうか?
(テストしてないですが、整理するとこんな感じになりそうです。)

    Private Sub Workbook_BeforeClose(Cancel As Boolean)
        Dim srcRNG As Range
        Set srcRNG = ThisWorkbook.Sheets("レース名1").Range("A1:K1001")

        Application.ScreenUpdating = False

        With Workbooks.Open(Filename:="G:\521-42.xlsm")

            '▼コピペ
            srcRNG.Copy .Sheets("競走名").Range("A1")

            '▼開いたブック(貼付先シートがあるブック)を上書き保存して閉じる
            .Save
            .Close

        End With

        '▼自ブックを上書き保存
        ThisWorkbook.Save

        Application.ScreenUpdating = True
    End Sub

(もこな2) 2019/08/04(日) 13:13


返信遅くなりました
ありがとうございます
(なぜ) 2019/08/14(水) 21:55

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.