你好:
個人並不建議寫 VBA 程式碼時使用ActiveSheet,ActiveWorkbook..等
因為出錯的機率很高,建議使用變數來引用 工作表(工作簿) 物件
這樣可提高執行效率且防止錯誤的發生
Sub yy()
With Range("A1").QueryTable
'第一個問題:你這樣作只會自動更新 QueryTable 的資料,
'但是隔天並不會執行 yy 程式,這也是為什麼要用 OnTime 方法的原因
.RefreshPeriod = 1440
.Refresh BackgroundQuery:=False
End With
'因一天有24小時1440分鐘故設定間隔1440分鐘下載更新資料一次
'第二個問題:不建議使用 ActiveSheet,應直接使用工作表名稱
ActiveSheet.Name = Format(Date, "yyyy-mm-dd")
'將目前已開啟之檔案工作表名稱變更為本日日期
'Sheet1.Cells.Copy
ActiveSheet.Copy
'將目前工作表複製
'第三個問題:建議使用變數來引用95年3月.xls 檔案
'Set wbk = Workbooks.Open(ThisWorkbook.Path & "\95年3月.xls")
Workbooks.Open Filename:=ThisWorkbook.Path & "\95年3月.xls"
'打開與目前檔案同路徑之"95年3月"之檔案
'第三個問題:不建議使用 ActiveWorkbook ,因為上面以建立了wbk 物件
'所以直接使用 wbk.Sheets.Add
'新增工作表也是ㄧ樣 Set sht = wbk.Sheets.Add
ActiveWorkbook.Sheets.Add
'將目前檔案新增一個工作表(即於"95年3月"檔案中新增1工作表)
'第四個問題:如果直接用Paste,會出現一個問題,就是他會連 QueryTable 物件也會ㄧ起複製到新的工作表
'這樣座並不正確,所以我使用 選擇性貼上=> 值的方法來取得文字資料
'sht.Cells.PasteSpecial Paste:=xlPasteValues
ActiveSheet.Paste
'將之前所做的複製貼上於目前的工作表(即將a檔案貼到"95年3月"檔案的新增工作表上)
'sht.Name = Format(Date, "yyyy-mm-dd")
'wbk.Save
ActiveWorkbook.Save '儲存目前檔案
'wbk.Close
ActiveWorkbook.Close '關閉目前檔案
'以下程序ㄧ定要執行,這樣才會在隔天執行相同的程序(原則是電腦不能關機,Excel 不能關閉)
'5 秒後執行 settime 程序(若電腦未關機,則於隔日08:40:00 執行)
'Application.OnTime Now + TimeValue("00:00:05"), "settime"
End Sub
--
天行健,君子以自強不息
地勢坤,君子以厚德載物
http://www.vba.com.tw/plog/
"笨笨魚" 來函:
上一封寫的不是很完整
但又不知才能進入修改
所以重寫
對不起高手
可能小弟沒把意思解釋清楚
小弟建立"a"檔與"95年3月"檔2個檔案
分別設立於同一磁區的同一檔案夾裡
小弟希望
開啟a檔案的sheet1工作表每天到預定時間就下載更新資料
每次更新完資料就於"95年3月"檔案裡插入一工作表,工作表名稱為當天日期
並將a檔案所更新資料複製到該工作表裏
且a檔案之工作表名稱也以當日日期為工作表名稱
小弟將寫程式碼的想法加註,請各位高手指導指正
Sub yy()
With Range("A1").QueryTable
.RefreshPeriod = 1440
.Refresh BackgroundQuery:=False
End With
因一天有24小時1440分鐘故設定間隔1440分鐘下載更新資料一次
ActiveSheet.Name = Format(Date, "yyyy-mm-dd")
'將目前已開啟之檔案工作表名稱變更為本日日期
ActiveSheet.Copy
'將目前工作表複製
Workbooks.Open Filename:=ThisWorkbook.Path & "\95年3月.xls"
'打開與目前檔案同路徑之"95年3月"之檔案
ActiveWorkbook.Sheets.Add
'將目前檔案新增一個工作表(即於"95年3月"檔案中新增1工作表)
ActiveSheet.Paste
'將之前所做的複製貼上於目前的工作表(即將a檔案貼到"95年3月"檔案的新增工作表上)
ActiveWorkbook.Save'儲存目前檔案
ActiveWorkbook.Close'關閉目前檔案
End Sub