|
▼菜実 さん:
>> 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
|
|