[[20190828100006]] 『参照元(コピー元)ファイルのみ閉じる方法に付き』(長州力) ページの最後に飛ぶ

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

 

『参照元(コピー元)ファイルのみ閉じる方法に付きまして』(長州力)

お世話になります。

初歩的なことをお尋ねします。下記のように

(1)ダイアログボックスから、A1に関するファイルを開き
 Sheet1のD1からF2までをコピーして、現マクロのD8へ貼り付けます。
(2)次にそのA1に関するファイルを閉じて、次にA2に関するファイルを開き
 Sheet1のD1からF2までをコピーして、現マクロのD11へ貼り付けます。

このとき、A1に関するファイルを閉じる、同様にA2に関するファイルを閉じる
場合、Workbooks.Closeですとマクロファイルも閉じられてしまうのですが、
A1、A2のファイルだけ閉じるには、どのようなコードを使ったら
宜しいでしょうか。宜しくお願い致します。

Sub Sample()
'

    Dim ws As Worksheet

    Set ws = ActiveSheet

    Dim OpenFileName As String

    MsgBox "A1のファイルを選んでください!"
    OpenFileName = Application.GetOpenFilename("Microsoft Excelブック,*.xls?")
    Workbooks.Open OpenFileName
    Sheets("Sheet1").Range("D1:F2").Copy
    ws.Range("D8").PasteSpecial Paste:=xlPasteValues

    Workbooks.Close 'コピー元のファイルを閉じる(←この部分)

    MsgBox "A2のファイルを選んでください!"
    OpenFileName = Application.GetOpenFilename("Microsoft Excelブック,*.xls?")
    Workbooks.Open OpenFileName
    Sheets("Sheet1").Range("D1:F2").Copy
    ws.Range("D11").PasteSpecial Paste:=xlPasteValues

    Workbooks.Close 'コピー元のファイルを閉じる(←この部分)
'    '
    ActiveWorkbook.Save '本マクロファイルを上書き保存する

End Sub

< 使用 Excel:Excel2016mac、使用 OS:Windows10 >


 こんな感じでどうですか?

Sub Sample()

    Dim ws As Worksheet
    Dim OpenFileName As String

    Set ws = ActiveSheet

    MsgBox "A1のファイルを選んでください!"
    OpenFileName = Application.GetOpenFilename("Microsoft Excelブック,*.xls?")
    With Workbooks.Open(OpenFileName)
        .Sheets("Sheet1").Range("D1:F2").Copy
        ws.Range("D8").PasteSpecial Paste:=xlPasteValues
        .Close
    End With

    MsgBox "A2のファイルを選んでください!"
    OpenFileName = Application.GetOpenFilename("Microsoft Excelブック,*.xls?")
    With Workbooks.Open(OpenFileName)
        .Sheets("Sheet1").Range("D1:F2").Copy
        ws.Range("D11").PasteSpecial Paste:=xlPasteValues
        .Close
    End With

    ActiveWorkbook.Save '本マクロファイルを上書き保存する

 End Sub

(渡辺ひかる) 2019/08/28(水) 10:26


渡辺ひかる様

どうも有り難うございました。
.Closeを追加するだけでよかったのですね。
こうした細かいところがまだ分からなくて、とても助かりました。
また宜しくお願い致します。
(長州力) 2019/08/29(木) 10:49


 Closeを追加するということだけではないです

 Closeを追加するということは、対象のオブジェクトがなければならず、

 質問者さんの元のコードでは、それが取得できていません
(暗黙的に ActiveWorkbookにはなっていますが)

 通常は、開いた時点でオブジェクト変数に代入するか
 ( Set ws = ActiveSheet は書いてありますよね)
 今回のように With を使って、メソッド、プロパティを使えるようにするか です。

 その辺をよく理解してください

(渡辺ひかる) 2019/08/29(木) 11:02


了解しました。
どうも有り難うございます。
(長州力) 2019/08/30(金) 10:49

コメント返信:

[ 一覧(最新更新順) ]


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