Board logo

標題: vba程式再跑時出現執行階段錯誤1004應用程式或物件定義上錯誤 [打印本頁]

作者: chairles59    時間: 2016-2-14 00:03     標題: vba程式再跑時出現執行階段錯誤1004應用程式或物件定義上錯誤

請教大大:
因為是新手請大大幫忙
這是哪裡出現問題呀
要如何更改

Public Sub 匯出收盤價()
Application.ScreenUpdating = False
Sheets("清單").Select
V = Range("A2").End(xlDown).Row
Dim a()
Dim b()
ReDim a(V - 1)
ReDim b(V - 1)
Sheets("收盤價網路").Select

For i = 0 To V - 1
a(i) = Cells(i * 10 + 8, 2)
b(i) = Cells(i * 10 + 13, 2)

Next

ChDir "C:\Users\michael\Desktop\108\focvs.xlsm"(目前改為ChDir "C:\Users\michael\Desktop\108")
Workbooks.Open Filename:="C:\Users\michael\Desktop\108\focvs.xlsm"

Sheets("清單").Select
For i = 2 To Range("A1").End(xlDown).Row
Sheets("清單").Select
k = Cells(i, 2)
If k = "" Then Exit For

Sheets(k).Select
h = Range("b3").End(xlDown).Row
Cells(h + 1, "b") = a(i- 2)
Cells(h + 1, "e") = b(i- 2)
Next
Windows("網路資料抓取.xlsm").Activate
Sheets("網路收盤價").Select
Application.CutCopyMode = True
Workbooks("focus. xlsm ").Save
Workbooks("focus. xlsm ").Close
Application.ScreenUpdating = True
MsgBox "更新完畢!", vb0XOnly, "通知"

End Sub

現目前跑到這裡
cells(h+1,"b")=a(i-2)
cells(h+1,"e")=b(i-2)出現執行階段錯誤1004應用程式或物件定義上錯誤

ps:我開一個檔案網路資料抓取工作表有清單及收盤價網路另一個focus工作表有清單及各公司的收盤價資料
chdir "c:\users\michael\desktop\108"
workbooks.open filename:="c:\users\michael\desktop\108\focus.xlsm"
網路資料抓取和focus檔案都存放在c:\users\michael\desktop\108檔案夾裡面
作者: c_c_lai    時間: 2016-2-14 08:59

本帖最後由 c_c_lai 於 2016-2-14 09:30 編輯

回復 1# chairles59
假設: B2 = 股價; B3 (含) 以下均為空白
  1.    h = Range("b3").End(xlDown).Row
  2.    ' h = 1048576

  3.    h = Range("b2").End(xlDown).Row
  4.    ' h = 1048576
複製代碼
所以
  1.    Cells(h + 1, "b") = a(i- 2)
  2.    Cells(h + 1, "e") = b(i- 2)
複製代碼
  1.    Cells(1048576 + 1, "b") = a(i- 2)
  2.    Cells(1048576 + 1, "e") = b(i- 2)
複製代碼
當然會出現執行階段錯誤1004應用程式或物件定義上錯誤
須改成:
  1.    h = Range("B" & Rows.Count).End(xlUp).Row
  2.    ' h = 2
複製代碼
或者是
  1. h = Range("b1").End(xlDown).Row
  2. ' h = 2
複製代碼
如此
  1.    Cells(2 + 1, "b") = a(i- 2)
  2.    Cells(2 + 1, "e") = b(i- 2)
複製代碼

作者: c_c_lai    時間: 2016-2-14 09:02

回復 1# chairles59
又發現你原先定義為
  1.    For i = 0 To V - 1
  2.        a(i) = Cells(i * 8 + 5, 2)      '  成交
  3.        b(i) = Cells(i * 8 + 9, 2)      '  總量
  4.    Next
複製代碼
目前你將它改成
  1.    For i = 0 To V - 1
  2.        a(i) = Cells(i * 10 + 8, 2)
  3.        b(i) = Cells(i * 10 + 13, 2)
  4.    Next
複製代碼
我不太明白你的用意。
接下來你自行來修正吧。
作者: c_c_lai    時間: 2016-2-15 07:05

回復 1# chairles59
本相關類似「提問」以後請在『Excel程式區』或是『Excel一般區』中提出發表,
而非在此  『管理公告』區裡提問,否則是無人留意而幫你釋疑的。
作者: chairles59    時間: 2016-3-5 20:27

回復 3# c_c_lai


    感謝大大的指點
因為是新人,又是剛學VBA所以有不對的地方請多包涵跟指教
以後我會去正確的地方發表
謝謝




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