Discussion:
如何另存新檔
(时间太久无法回复)
笨笨魚
2006-03-23 10:26:38 UTC
Permalink
小弟
想從目前已開啟的檔案copy目前所開啟的工作表資料
到指定的excel檔案裡
並在該檔案裡開啟一個新的工作表以儲存所copy資料後
將該工作表重新命名
以目前的日期做為該工作表名稱
然後儲存.關閉
該如何做呢
請幫小弟改一改好嗎
Sub yy()
Sheet1.Copy
ActiveWorkbook.SaveAs Filename:=ThisWorkbook.Path & "\" &
ActiveSheet.Name
ActiveWorkbook.Close
End Sub
--
請多多指教
笨笨魚
2006-03-23 11:40:27 UTC
Permalink
這是小弟目前能力所能達成的程式碼
請各位高手幫小弟改一改
感謝您
Sub xx()
ActiveSheet.Name = Format(Date, "yyyy-mm-dd")
Sheet1.Copy
ActiveWorkbook.SaveAs Filename:=ThisWorkbook.Path & "\" &
ActiveSheet.Name
ActiveSheet.Name = Format(Date, "yyyy-mm-dd")
ActiveWorkbook.Close
End Sub
--
請多多指教


"笨笨魚" 來函:
Post by 笨笨魚
小弟
想從目前已開啟的檔案copy目前所開啟的工作表資料
到指定的excel檔案裡
並在該檔案裡開啟一個新的工作表以儲存所copy資料後
將該工作表重新命名
以目前的日期做為該工作表名稱
然後儲存.關閉
該如何做呢
請幫小弟改一改好嗎
Sub yy()
Sheet1.Copy
ActiveWorkbook.SaveAs Filename:=ThisWorkbook.Path & "\" &
ActiveSheet.Name
ActiveWorkbook.Close
End Sub
--
請多多指教
笨笨魚
2006-03-23 13:31:20 UTC
Permalink

小弟寫到這兒執行起來還是有點問題
各位高手幫幫忙
幫小弟改一下
Sub yy()
ActiveSheet.Name = Format(Date, "yyyy-mm-dd")
With Range("A1").QueryTable
.RefreshPeriod = 740
.Refresh BackgroundQuery:=False
End With
ActiveSheet.Copy
Workbooks.Open Filename:=ThisWorkbook.Path & "\95年3月.xls"
ActiveWorkbook.Sheets.Add
ActiveSheet.Paste
ActiveSheets.Name = Format(Date, "yyyy-mm-dd")
ActiveWorkbook.SaveAs File
ActiveWorkbook.Close
End Sub
--
請多多指教


"笨笨魚" 來函:
Post by 笨笨魚
這是小弟目前能力所能達成的程式碼
請各位高手幫小弟改一改
感謝您
Sub xx()
ActiveSheet.Name = Format(Date, "yyyy-mm-dd")
Sheet1.Copy
ActiveWorkbook.SaveAs Filename:=ThisWorkbook.Path & "\" &
ActiveSheet.Name
ActiveSheet.Name = Format(Date, "yyyy-mm-dd")
ActiveWorkbook.Close
End Sub
--
請多多指教
"笨笨魚" 來函:
Post by 笨笨魚
小弟
想從目前已開啟的檔案copy目前所開啟的工作表資料
到指定的excel檔案裡
並在該檔案裡開啟一個新的工作表以儲存所copy資料後
將該工作表重新命名
以目前的日期做為該工作表名稱
然後儲存.關閉
該如何做呢
請幫小弟改一改好嗎
Sub yy()
Sheet1.Copy
ActiveWorkbook.SaveAs Filename:=ThisWorkbook.Path & "\" &
ActiveSheet.Name
ActiveWorkbook.Close
End Sub
--
請多多指教
chijanzen
2006-03-23 15:31:37 UTC
Permalink
你好:

應該符合你想要的

Sub yy()
Dim wbk As Workbook
Dim shet As Worksheet
ActiveSheet.Name = Format(Date, "yyyy-mm-dd")
With Range("A1").QueryTable
'.RefreshPeriod = 740
.Refresh BackgroundQuery:=False
End With
ActiveSheet.Cells.Copy
Set wbk = Workbooks.Open(Filename:=ThisWorkbook.Path & "\95年3月.xls")
Set sht = ActiveWorkbook.Sheets.Add
sht.Paste
sht.Name = Format(Date, "yyyy-mm-dd")
wbk.SaveAs ThisWorkbook.Path & "\95年3月-1.xls"
wbk.Close
End Sub
--
天行健,君子以自強不息
地勢坤,君子以厚德載物

http://www.vba.com.tw/plog/


"笨笨魚" 來函:
Post by 笨笨魚

小弟寫到這兒執行起來還是有點問題
各位高手幫幫忙
幫小弟改一下
Sub yy()
ActiveSheet.Name = Format(Date, "yyyy-mm-dd")
With Range("A1").QueryTable
.RefreshPeriod = 740
.Refresh BackgroundQuery:=False
End With
ActiveSheet.Copy
Workbooks.Open Filename:=ThisWorkbook.Path & "\95年3月.xls"
ActiveWorkbook.Sheets.Add
ActiveSheet.Paste
ActiveSheets.Name = Format(Date, "yyyy-mm-dd")
ActiveWorkbook.SaveAs File
ActiveWorkbook.Close
End Sub
--
請多多指教
"笨笨魚" 來函:
Post by 笨笨魚
這是小弟目前能力所能達成的程式碼
請各位高手幫小弟改一改
感謝您
Sub xx()
ActiveSheet.Name = Format(Date, "yyyy-mm-dd")
Sheet1.Copy
ActiveWorkbook.SaveAs Filename:=ThisWorkbook.Path & "\" &
ActiveSheet.Name
ActiveSheet.Name = Format(Date, "yyyy-mm-dd")
ActiveWorkbook.Close
End Sub
--
請多多指教
"笨笨魚" 來函:
Post by 笨笨魚
小弟
想從目前已開啟的檔案copy目前所開啟的工作表資料
到指定的excel檔案裡
並在該檔案裡開啟一個新的工作表以儲存所copy資料後
將該工作表重新命名
以目前的日期做為該工作表名稱
然後儲存.關閉
該如何做呢
請幫小弟改一改好嗎
Sub yy()
Sheet1.Copy
ActiveWorkbook.SaveAs Filename:=ThisWorkbook.Path & "\" &
ActiveSheet.Name
ActiveWorkbook.Close
End Sub
--
請多多指教
笨笨魚
2006-03-23 16:10:40 UTC
Permalink
對不起高手
可能小弟沒把意思解釋清楚
小弟建立a檔與b檔2個檔案
分別設立於同一磁區的aa與bb.2個檔案夾裡
小弟希望
開啟a檔案的sheet1工作表每天到預定時間就下載更新資料
每次更新完資料就於b檔案裡插入一工作表,工作表名稱為當天日期
並將a檔案所更新資料複製到該工作表裏--
請多多指教


"chijanzen" 來函:
Post by chijanzen
應該符合你想要的
Sub yy()
Dim wbk As Workbook
Dim shet As Worksheet
ActiveSheet.Name = Format(Date, "yyyy-mm-dd")
With Range("A1").QueryTable
'.RefreshPeriod = 740
.Refresh BackgroundQuery:=False
End With
ActiveSheet.Cells.Copy
Set wbk = Workbooks.Open(Filename:=ThisWorkbook.Path & "\95年3月.xls")
Set sht = ActiveWorkbook.Sheets.Add
sht.Paste
sht.Name = Format(Date, "yyyy-mm-dd")
wbk.SaveAs ThisWorkbook.Path & "\95年3月-1.xls"
wbk.Close
End Sub
--
天行健,君子以自強不息
地勢坤,君子以厚德載物
http://www.vba.com.tw/plog/
"笨笨魚" 來函:
Post by 笨笨魚

小弟寫到這兒執行起來還是有點問題
各位高手幫幫忙
幫小弟改一下
Sub yy()
ActiveSheet.Name = Format(Date, "yyyy-mm-dd")
With Range("A1").QueryTable
.RefreshPeriod = 740
.Refresh BackgroundQuery:=False
End With
ActiveSheet.Copy
Workbooks.Open Filename:=ThisWorkbook.Path & "\95年3月.xls"
ActiveWorkbook.Sheets.Add
ActiveSheet.Paste
ActiveSheets.Name = Format(Date, "yyyy-mm-dd")
ActiveWorkbook.SaveAs File
ActiveWorkbook.Close
End Sub
--
請多多指教
"笨笨魚" 來函:
Post by 笨笨魚
這是小弟目前能力所能達成的程式碼
請各位高手幫小弟改一改
感謝您
Sub xx()
ActiveSheet.Name = Format(Date, "yyyy-mm-dd")
Sheet1.Copy
ActiveWorkbook.SaveAs Filename:=ThisWorkbook.Path & "\" &
ActiveSheet.Name
ActiveSheet.Name = Format(Date, "yyyy-mm-dd")
ActiveWorkbook.Close
End Sub
--
請多多指教
"笨笨魚" 來函:
Post by 笨笨魚
小弟
想從目前已開啟的檔案copy目前所開啟的工作表資料
到指定的excel檔案裡
並在該檔案裡開啟一個新的工作表以儲存所copy資料後
將該工作表重新命名
以目前的日期做為該工作表名稱
然後儲存.關閉
該如何做呢
請幫小弟改一改好嗎
Sub yy()
Sheet1.Copy
ActiveWorkbook.SaveAs Filename:=ThisWorkbook.Path & "\" &
ActiveSheet.Name
ActiveWorkbook.Close
End Sub
--
請多多指教
chijanzen
2006-03-24 00:48:01 UTC
Permalink
你好:
請參考
'Thisworkbook

Private Sub Workbook_BeforeClose(Cancel As Boolean)
'檔案關閉時取消 OnTime 的設定
On Error Resume Next
'取消前一個 08:40:00 執行 OnTime 的設定
Application.OnTime EarliestTime:=TimeValue("08:40:00"), _
Procedure:="zz", Schedule:=False
End Sub

Private Sub Workbook_Open()
'檔案一開啟時執行 settime 程序
settime
End Sub


'Module
Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Sub zz()
Dim wbk As Workbook
Dim shet As Worksheet
With Sheet1.Range("A1").QueryTable
.Refresh BackgroundQuery:=False
End With
Sheet1.Name = Format(Date, "yyyy-mm-dd")
'待等10秒讓更新作業完成
DoEvents
Sleep 10000
Sheet1.Cells.Copy
Set wbk = Workbooks.Open(ThisWorkbook.Path & "\95年3月.xls")
Set sht = wbk.Sheets.Add
'選擇性貼上=> 值
sht.Cells.PasteSpecial Paste:=xlPasteValues
sht.Name = Format(Date, "yyyy-mm-dd")
wbk.Save
wbk.Close
'5 秒後執行 settime 程序(若電腦未關機,則於隔日08:40:00 執行)
Application.OnTime Now + TimeValue("00:00:05"), "settime"
End Sub

Sub settime()
'於 20:05:00 執行 zz 程序
Application.OnTime TimeValue("08:40:00"), "zz"
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
笨笨魚
2006-03-24 01:23:01 UTC
Permalink
請問高手
小弟所寫的程式碼
哪裡有誤呢
方便指導嗎
或者建議小弟加強哪一部分的概念呢
看哪一部分章節呢
--
請多多指教


"chijanzen" 來函:
Post by chijanzen
請參考
'Thisworkbook
Private Sub Workbook_BeforeClose(Cancel As Boolean)
'檔案關閉時取消 OnTime 的設定
On Error Resume Next
'取消前一個 08:40:00 執行 OnTime 的設定
Application.OnTime EarliestTime:=TimeValue("08:40:00"), _
Procedure:="zz", Schedule:=False
End Sub
Private Sub Workbook_Open()
'檔案一開啟時執行 settime 程序
settime
End Sub
'Module
Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Sub zz()
Dim wbk As Workbook
Dim shet As Worksheet
With Sheet1.Range("A1").QueryTable
.Refresh BackgroundQuery:=False
End With
Sheet1.Name = Format(Date, "yyyy-mm-dd")
'待等10秒讓更新作業完成
DoEvents
Sleep 10000
Sheet1.Cells.Copy
Set wbk = Workbooks.Open(ThisWorkbook.Path & "\95年3月.xls")
Set sht = wbk.Sheets.Add
'選擇性貼上=> 值
sht.Cells.PasteSpecial Paste:=xlPasteValues
sht.Name = Format(Date, "yyyy-mm-dd")
wbk.Save
wbk.Close
'5 秒後執行 settime 程序(若電腦未關機,則於隔日08:40:00 執行)
Application.OnTime Now + TimeValue("00:00:05"), "settime"
End Sub
Sub settime()
'於 20:05:00 執行 zz 程序
Application.OnTime TimeValue("08:40:00"), "zz"
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
笨笨魚
2006-03-24 00:30:01 UTC
Permalink
上一封寫的不是很完整
但又不知才能進入修改
所以重寫
對不起高手
可能小弟沒把意思解釋清楚
小弟建立"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
chijanzen
2006-03-24 01:59:01 UTC
Permalink
你好:

個人並不建議寫 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
笨笨魚
2006-03-24 07:56:04 UTC
Permalink
好詳盡喔
感激您
請問高手
你是從書中得到這一些知識
還是經驗中獲得呢
--
請多多指教


"chijanzen" 來函:
Post by chijanzen
個人並不建議寫 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
笨笨魚
2006-03-24 08:01:07 UTC
Permalink
請問高手您這些些法
是來自excel vba書中還是經驗?

若將"a"檔案裡的sheet1於vba設定為隱藏但不關閉該excel檔
高手你的程式碼還會執行嗎
--
請多多指教


"chijanzen" 來函:
Post by chijanzen
個人並不建議寫 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
Loading...