返回列表 上一主題 發帖

vba程式再跑時出現執行階段錯誤1004應用程式或物件定義上錯誤

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檔案夾裡面

股票.rar (138.84 KB)

michael

本帖最後由 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)
複製代碼

TOP

回復 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
複製代碼
我不太明白你的用意。
接下來你自行來修正吧。

TOP

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

TOP

回復 3# c_c_lai


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

TOP

        靜思自在 : 人的眼睛長在前面,只看到別人的缺點,絲毫看不到自己的缺點。
返回列表 上一主題