這就 每五分鐘 copy 一次
For i = 1 To 300 Step 5
Application.OnTime TimeSerial(8, 45 + i, 0), "copy_paste_data"
Next


你要的 應是這樣
For i = 0 To 18000 Step 10
Application.OnTime TimeSerial(8, 45 , i), "copy_paste_data"
Next


Sub copy_paste_data()
Sheets("data").Range("b2:j2").Copy

row2 = xxx
col2 = yyy
Sheets("data").Cells(row2, col2).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

End Sub

row2 col2 就是你要貼上的位置 想辦法 讓row2 每執行剪貼一次 就+1 就好了 就會一直往下貼了


light0935 wrote:
小弟想寫個EXCEL...(恕刪)
gary4024 wrote:
For i = 0 To 18000 Step 10
Application.OnTime TimeSerial(8, 45 , i), "copy_paste_data"
Next...(恕刪)


一口氣排程1800條指令,for next這個方法在這個問題中,不錯,很好用

可是我寫程式時,通常都用“連續呼叫副程式”的作法

application.ontime 放在 for next 裡的方式,我習慣不用,因為有缺點
當資料量很大時,會造成溢位錯誤,我試了,大約排程 30000~40000 條時,就會出錯
當然,除非是拿excel做極大量的資料處理,不然不會遇到這個問題

在正常情況下,您的方式,也是一個好選擇


先感謝gary4024大,您的方法我也會去嘗試寫寫看
gary4024 wrote:
這就 每五分鐘 copy...(恕刪)
light0935 wrote:
先感謝gary4024大,您的方法我也會去嘗試寫寫看...(恕刪)


剛剛幫您試好了,他的方法,用在您的資料量中,沒問題的

可放在workbook_open內,同時也可以解決時間的問題
因為不管什麼時候開excel,所有時間都會重排程一次

這2個功能一樣,但用他的程式碼就可以,比較短
我的寫法是考慮到資料量很大的情況
您的資料量很少,不會有問題的
(副程式不一樣喔,別混在一起了)
=============================================================
Private Sub Workbook_Open()
If Time > TimeValue("08:45:00") Then
copydata
else
Application.OnTime TimeValue("08:45:00"), "CopyData"
end if
End Sub
=============================================================
Private Sub Workbook_Open()
For i = 0 To 18000 Step 10
Application.OnTime TimeSerial(8, 45 , i), "copy_paste_data"
Next
End Sub
=============================================================

p.s 接著最後一筆的問題,一樣先保留,不難,但我希望您能先想想怎麼做…
感謝snare大幫忙測試,當然,小弟還是會自己嘗試寫寫看

但您提供的"連續呼叫副程式"的方法也很迷人,小弟一開始只有想到應該是要用迴圈的方式來處理,您提供的方法卻讓小弟有豁然開朗的感覺,寫程式真的是很靈活,還滿有趣的說
snare wrote:
剛剛幫您試好了,他...(恕刪)
Dear Sanre大

我依照gary4024大的方法寫出下列副程式,主程式測試過沒問題就不貼上來了

方案一:

01 Public RowCount1 As Integer
02 Sub Copy_Data()
03 Sheets("Sheet1").Range("A2:J2").Copy
04 RowCount1 = RowCount1 + 1
05 Sheets("Sheet1").Cells(5 + RowCount1, 1).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False '從第6行第1格開始
06 End Sub

測試沒問題,但row2跟col2代入的方式,我測了很多次都不成功,所以我調整成先宣告Public * As Integer的方式來代入,不知這樣會不會有什麼問題?.. 跟gary4024大的方法,在程式語言的邏輯上,差別在哪裡?..

方案二:

01 Public RowCount1 As Integer
02 Sub Copy_Data()
03 RowCount1 = RowCount1 + 1
04 Sheets("Sheet1").Range("A" & 5 + RowCount1 & ":J" & 5 + RowCount1).Value = Sheets("Sheet1").Range("A2:J2").Value
05 End Sub

我個人比較喜歡這樣的寫法,測試也沒問題,也嘗試想將第4行用Cells而非Range的方式來陳述,但就是試不成功,想請教您如何能改成Cells的方式陳述? 謝謝~


最後,重開Excel後要接著最後一筆資料的部分,小弟測好久還是測不出來.. 還是需要請您幫忙解惑,謝謝您~
light0935 wrote:
想請教您如何能改成Cells的方式陳述?
...(恕刪)


3、4行改這樣,rowcount改放到下面

3 Sheet1.Cells(2, 1).Resize(2, 10).Copy Sheet1.Cells(RowCount, 1)
4 RowCount = RowCount + 1

light0935 wrote:
重開Excel後要接著最後一筆資料的部分...(恕刪)


workbook_open() 內多加一行

RowCount = Application.WorksheetFunction.CountA(Range("b:b")) + 4

照您第一篇的格式,b2:j2 copy到 b5:j5
其它的,您再自行修正一下

謝謝您

我有先查到方式了,目前測試沒問題



Sheets(1).Range("A" & 5 + RowCount1 & ":J" & 5 + RowCount1).Value = Sheets(1).Range("A2:J2").Value

改成

Sheets(1).Range(Cells(5 + RowCount1, 1), Cells(5 + RowCount1, 10)).Value = Sheets(1).Range(Cells(2, 1), Cells(2, 10)).Value


重開Excel後要接著最後一筆資料的部分..我寫完測試完再上來報告,謝謝。

snare wrote:
3、4行改這樣,rowcount...(恕刪)
snare wrote:
3、4行改這樣,rowcount...(恕刪)


Dear Snare大

依您的建議寫好副程式如下 (因表格有異動,所以內容也隨著做了些調整,測試均正常)

01 Public i As Integer
02 Sub Copy_Data()
03 i = Application.WorksheetFunction.CountA(Range("A:A")) - 4
04 Sheets("跑檔").Range("A" & 5 + i & ":J" & 5 + i).Value = Sheets("跑檔").Range("A2:J2").Value
05 i = i + 1
06 Application.OnTime Now + TimeValue("00:00:05"), "Copy_Data"
07 If Time > TimeSerial(13, 45, 0) Then Application.OnTime Now + TimeValue("00:00:05"), "Copy_Data", , False
08 End Sub

關於要接著最後一筆資料的部分... 小弟依您的建議測試很久,改了很多次,在接著最後一筆資料後,都會出現幾行空格.. 原本是

i = Application.WorksheetFunction.CountA(Range("A:A")) + 4

看起來是隨著+n值的變化而影響,又試著理解+n的部分是因為隨著第4行 ("A" & 5 + i & ":J" & 5 + i) 內的值而影響結果,後來小弟將其改為"減4",也就是

i = Application.WorksheetFunction.CountA(Range("A:A")) - 4 測試就沒問題了

我的理解,因為資料是從第5行開始,所以需要寫成減4開始依序檢查儲存格("A:A")內有無"值"

總之,小弟的問題順利解決了,也藉此機會學習到很多,真的非常感謝您的幫忙,謝謝您~
light0935 wrote:
都會出現幾行空格.. ..(恕刪)


那是您忘了把5十 i,改成i
CountA可以改放到workbook_open
因為只需要計算1次
有問題再問吧
關閉廣告
文章分享
評分
評分
複製連結

今日熱門文章 網友點擊推薦!