| 
    
     |  | ▼菜実 さん: >>  Set i = Workbooks.Open(ThisWorkbook.Path & "AAA.xls").Worksheets("設定")
 
 見落としてました。
 .Path & "\AAA.xls"
 
 >>    Workbooks("AAA.xls").Close False
 
 >i.Close False のほうが良いです。
 
 → i.Parent.Close False
 ですね・・・失礼しました。
 
 自分だったら・・・
 
 1.データを持ってくる処理が、2種類あるのならSubを2つに分けて、
 メインのプロシジャからCallする。
 
 2.開く処理を少しでも早くするのなら、
 更新処理の前にファイルの最終更新日を取得して
 更新処理が必要か判定してから実行する。
 
 Option Explicit
 
 Sub Test()
 Dim myFile As String
 Dim ChkRng As Range
 Dim buf As Variant
 
 myFile = ThisWorkbook.Path & "\AAA.xls"
 
 'ファイルの最終更新日を保存して置くセル
 Set ChkRng = ThisWorkbook.Worksheets(1).Range("A1")
 
 buf = func_LastMod(myFile)
 If buf = "" Then
 MsgBox "ファイルが見つかりません"
 Exit Sub
 End If
 
 If ChkRng.Value = buf Then
 MsgBox "更新なし"
 Else
 MsgBox "データ更新開始"
 Call Exec1(myFile)
 ChkRng.Value = buf
 End If
 
 Set ChkRng = Nothing
 End Sub
 
 Private Sub Exec1(ByVal myFile As String)
 Dim Ws As Worksheet
 
 Set Ws = Workbooks.Open(myFile).Worksheets(1)
 MsgBox Ws.Parent.Name & "." & Ws.Name & "から処理"
 Ws.Parent.Close False
 End Sub
 
 'ファイルの最終更新日を取得するファンクション
 'ファイルが存在しない場合は、""を返す
 Private Function func_LastMod(ByVal myFile As String) As Variant
 Dim FSO As Object
 
 Set FSO = CreateObject("Scripting.FileSystemObject")
 If Dir(myFile) <> "" Then
 func_LastMod = FSO.GetFile(myFile).DateLastModified
 Else
 func_LastMod = ""
 End If
 
 Set FSO = Nothing
 End Function
 
 |  |