返回列表 上一主題 發帖

救助!執行階段錯誤 "1004",請內看 感謝了!

救助!執行階段錯誤 "1004",請內看 感謝了!

本帖最後由 icestormerss 於 2011-8-13 14:57 編輯

由於需要 將工作表 複製 但發現在複製到次數大約5到2 30次時(大都在20次左右)就會產生一個錯誤

錯誤:執行階段錯誤 "1004": class worksheet的copy方法失敗

一開始我以為是我寫錯.然後發現好像不是 我就好奇的實驗.只要我的工作表(要複製的)內容越多(像有比較圖)有時大約10次之內就會出現錯誤

隨者我把工作表內容越簡精它出錯的次數就越後面(完全空白的工作表我試過到600次都還不會出錯..)

然而,只要出了錯誤,我重開EXCEL後,錯誤不見了,再重行執行程式後問題一樣存在,只是會發生錯誤的次數,可能又變動(也許剛才第10次出錯,這次換20次)


不知有沒有高手能幫我解決這問題?

我只是想單純的複製工作表到最後一個位置去

原本寫的是
shtcount =worksheets.count
worksheets(1).copy after:=worksheets(shtcount)

-------------------------------------------------------------------------------------

別用copy,系統剪貼簿無法容納太多的資料。
改存到陣列中,寫入新的位置,就不會有這種現象了。

TOP

別用copy,系統剪貼簿無法容納太多的資料。
改存到陣列中,寫入新的位置,就不會有這種現象了。
oobird 發表於 2011-8-13 10:59



只有懂一點點陣列(就只知道把數字或文字寫入陣列再用迴圈取出之類而已..),,但完全不知要怎開始下手 改存到陣列中,寫入新的位置 能否寫一個範列呢 感恩~~!

TOP

其實還是看不懂你的問題。
看你的程式碼是複製到同一活頁簿,有何意義嗎?
For i = 1 To 100
Worksheets(Array("查詢股票")).Copy after:=Worksheets(2)
Next i
單一工作表複製100遍,為什麼要這樣?而且為什麼要Array("查詢股票")?看不出任何意義。

TOP

本帖最後由 icestormerss 於 2011-8-13 15:33 編輯
其實還是看不懂你的問題。
看你的程式碼是複製到同一活頁簿,有何意義嗎?
For i = 1 To 100
Worksheets ...
oobird 發表於 2011-8-13 14:58


用1到100 只是我用來測到底到在第幾張會出錯而已.我發現(今天的.)全都是在第48跟49張工作表時就一定出錯..

主要是要工作表複製後 再用WEB查詢(配合輸入股號,更新後(所以複製後的工作表內容會隨者股號而變動但基本格式是一樣的)存起來,
現在 全都是卡在那個問題上
(變成只要出錯..我就得關掉 重開 然後又要重新更新後才能再做後頭的工作)

不知我這樣說 懂嗎?怕我說的不夠清楚~~ 能不能請你寫一個簡單的範例 把工作表A 複製後 放入陣列中 ,再放到最後一個工作表之後? 感謝拉~~

TOP

回復 5# icestormerss

工作表複製,會包含格式、物件...等等
當工作表格式過於複雜或占用大量剪貼簿內容,影響到記憶體容量就會出錯
學海無涯_不恥下問

TOP

能不能請你寫一個簡單的範例 把工作表A 複製後 放入陣列中 ,再放到最後一個工作表之後?
  1. Sub yy()
  2. Dim a, i%
  3. a = Sheet1.UsedRange
  4. For i = 1 To 100
  5. With Sheets.Add(After:=Sheets(Sheets.Count))
  6. .Name = "w" & i
  7. .[a1].Resize(UBound(a), UBound(a, 2)) = a
  8. End With
  9. Next
  10. End Sub
複製代碼

TOP

能不能請你寫一個簡單的範例 把工作表A 複製後 放入陣列中 ,再放到最後一個工作表之後?
oobird 發表於 2011-8-13 18:11



感謝各位幫忙 我去試看看^^

TOP

本帖最後由 icestormerss 於 2011-8-13 19:56 編輯

又來麻煩各位了

剛才我去執行 它出現 在那一行出錯(我完全沒有改動 ,我開一個全新空白的 再把程式碼 貼上後執行)
請問 那個問題是什麼意思呢?

怪了.我剛才去把工作表刪除(不小心連SHEET2跟3(預設的)都刪了)神奇的事發生了 居然沒有錯誤而順利執行了...

Sub yy()
Dim a, i%
a = Sheet1.UsedRange
For i = 1 To 50
With Sheets.Add(After:=Sheets(Sheets.Count))
.Name = "w" & i
.[a1].Resize(UBound(a), UBound(a, 2)) = a  <<    執行階段錯誤 1004:應用程式或物物定義上的錯誤
                                       
End With
Next
End Sub

TOP

應該是你的sheet1工作表無任何數據。

TOP

        靜思自在 : 多做多得。少做多失。
返回列表 上一主題