Board logo

標題: 救助!執行階段錯誤 "1004",請內看 感謝了! [打印本頁]

作者: icestormerss    時間: 2011-8-13 10:05     標題: 救助!執行階段錯誤 "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)

-------------------------------------------------------------------------------------
作者: oobird    時間: 2011-8-13 10:59

別用copy,系統剪貼簿無法容納太多的資料。
改存到陣列中,寫入新的位置,就不會有這種現象了。
作者: icestormerss    時間: 2011-8-13 11:19

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



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

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

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


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

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

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

回復 5# icestormerss

工作表複製,會包含格式、物件...等等
當工作表格式過於複雜或占用大量剪貼簿內容,影響到記憶體容量就會出錯
作者: oobird    時間: 2011-8-13 18:11

能不能請你寫一個簡單的範例 把工作表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
複製代碼

作者: icestormerss    時間: 2011-8-13 19:39

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



感謝各位幫忙 我去試看看^^
作者: icestormerss    時間: 2011-8-13 19:54

本帖最後由 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
作者: oobird    時間: 2011-8-13 19:59

應該是你的sheet1工作表無任何數據。
作者: icestormerss    時間: 2011-8-13 20:12

本帖最後由 icestormerss 於 2011-8-13 20:36 編輯

oobird 大 請問 有法子把WEB查詢內的連結一起COPY過去?
剛才的是可以運作了但變成只有純文字 WEB查詢的功能郤消失了 感謝你花時間幫我^^[attach]7412[/attach]

我把檔案上傳  程式是可以跑也很順利不過變成純文字後 就失去WEB查詢功能了說 不知你有沒有什麼法子可以可以連同WEB 查詢功能也一起併COPY過去?
作者: oobird    時間: 2011-8-13 20:43

  1. Sub NN()
  2. Sheets("sheet1").UsedRange.Copy
  3. For i = 1 To 100
  4. With Sheets.Add(After:=Sheets(Sheets.Count))
  5. .Name = "w" & i
  6. ActiveSheet.Paste
  7. End With
  8. Next
  9. End Sub
複製代碼

作者: icestormerss    時間: 2011-8-13 21:06

本帖最後由 icestormerss 於 2011-8-13 21:18 編輯

回復 12# oobird


有了可以連同WEB查詢功能都COPY過去了.不過..出現1個新問題(原本另一個問題好了)


1:如果代碼是在A5輸入(輸入後按下ENTER,進行更新)
剛COPY過去的工作表雖然也有WEB查詢功能在但郤不是連結在同一工作表內的A5而是連結在SHEET1中的A5格


:收回第二個問題 ,再我存檔後重開 可以正常自動按目標格(A5)內的資料數字變動而自動更新了^^



OOBIRD大 針對第一個問題有法子嗎^^?
作者: oobird    時間: 2011-8-13 21:17

看不懂。如果代碼是在A5輸入(輸入後按下ENTER,進行更新)~這段程式在哪裡?你應該修改這段程式呀。
作者: icestormerss    時間: 2011-8-13 21:24

本帖最後由 icestormerss 於 2011-8-13 21:33 編輯
看不懂。如果代碼是在A5輸入(輸入後按下ENTER,進行更新)~這段程式在哪裡?你應該修改這段程式呀。
oobird 發表於 2011-8-13 21:17



這樣說好了 如果A5格 我輸入2374 正常來說 WEB查詢會自動更新(這我有設好了)
按以前我直接用COPY過去後 新的工作表上的WEB查詢連結會自動連結在新的工作表上的A5 而不是在原本(SHEET1)上的A5

換言之.以前我用COPY在複製後 二個工作表各自有各自的WEB 查詢功能
(在SHEET1上的A5輸入數字只會更新SHEET1的,在W1上的A5輸入數字也只會更新W1的)
但現在郤會變成 W1上的連結到SHEET1上的A5(當SHEET1上的A5格數字變動時二張工作表會一起更新到同一家公司上)

當然這部份可以手動改,不過WEB查詢不止一個 如果每一個COPY過去的都要一個一個WEB 查詢改它 ,就麻煩了說

不知我這樣說 會不會說不明白呢^^

我剛才試者用巨錄看能不能錄到手動點擊 [WEB查詢區]>參數上 以下列儲存格做為參數值來源
結果根本錄不到說~~

http://jinnsblog.blogspot.com/2008/10/excel-query-dynamically-update-data.html <<自動更新的WEB 查詢 我是看這裡學的
作者: icestormerss    時間: 2011-8-14 10:02

回復 15# icestormerss


昨晚花幾小時在那查看看網路資料及測試
發現真的好像都是固定次數就會出錯
複製前張數--複製中出錯的張數
2---------------105
3---------------103
4---------------102
5----------------99   
6----------------99   
7----------------98   
8----------------96   
9----------------95   
10---------------93   
另外我發現 如果用的是 :
worksheets(1).copy
就算是到了200張workbooks也不會出錯呢..

然後我就想到.不然.先用worksheets(1).copy 後再用 MOVE的方法移回來,結果錯誤換成104:MOVE 方式失敗..(大約是100張)

我在想會不會是對於在一定時間內(打開-關閉EXCEL)寫入同一workbook 內的有次數限制? 不然為什麼 用worksheets(1).copy 到200也不會出錯?

另外OOBIRD大的程式碼現在都很順利可以執行.但還是卡在同一個問題 WEB查詢的參數連結格 沒法連在自己工作表上說 不知有人有法子嗎??
(原本是想說不然就複製過去後再用程式去改他的連結.但發現(我先用巨集錄)根本錄不到,我也完全不知怎下手寫)
作者: oobird    時間: 2011-8-14 10:32

還是沒說到重點
如你sheet1的a5是2317,你用任何方法copy,每個新的表上都是2317,不可能改變成別的。
而你點擊a5時會自動更新,這是Worksheet_SelectionChange事件,你要貼上來別人才有可能幫你改的。
作者: icestormerss    時間: 2011-8-14 11:08

本帖最後由 icestormerss 於 2011-8-14 11:09 編輯
還是沒說到重點
如你sheet1的a5是2317,你用任何方法copy,每個新的表上都是2317,不可能改變成別的。
而 ...
oobird 發表於 2011-8-14 10:32


SORRY 忘了附檔 我再弄一次
[attach]7444[/attach] <<這是根據OOBIRD大的提供的程式碼執行的

在SHEET1的B1是參數來源格(WEB 查詢功能)
只要數字變動在右下的E8(右擊可以打開參數>以SHEET1!$B$1格為參數值來源)會整個自動更新

然而 如果是採用worksheets(1).copy after:worksheets(worksheets.count)方式
SHEET1的B1數字變動只會更新SHEET1上的E8
當W1的B1數字變動也只會更新W1上的E8

使用PASTE方式的做法 也都會有WEB查詢
只是變成W1工作表的E8也是連結到SHEET1的B1(但我需要的是連結在W1上的B1)


而且用巨集的方式沒法錄到手動改參數來源格,我也不知能不能透過VBA改寫

再次感謝你撥時間回覆^&^
作者: oobird    時間: 2011-8-14 11:31

Sub Macro2()
For i = 1 To 200
    Sheets("Sheet1").Copy After:=Sheets(Sheets.Count)
   ActiveSheet.Name = "w" & i
   Next
End Sub
我這樣200次也沒問題呀?
作者: icestormerss    時間: 2011-8-14 11:35

Sub Macro2()
For i = 1 To 200
    Sheets("Sheet1").Copy After:=Sheets(Sheets.Count)
   ActiveShee ...
oobird 發表於 2011-8-14 11:31



   -_-!!..難不成是我主機不夠力?怪了 我用上頭的跑法 很快就出問題了說
作者: icestormerss    時間: 2011-8-14 12:02

本帖最後由 icestormerss 於 2011-8-14 12:07 編輯

M剛才我單純在工作表上只有一個WEB查詢連結時我去執行程式 結果要到25X才會出錯
錯誤:
執行階段錯誤 1004:
是應用程式或物件定義上的錯誤
請問這是什麼問題(也是用剛才上傳的檔跑的)只是改成次數300

剛發現一些新的問題 我去試看看..感謝OOBIRD大 花時間幫我呀!




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)