2017-08-16 126 views
0

我正在編寫一個代碼,基本上是一個概念證明,以便在我看完它的操作後能夠在代碼中準確使用它。然而,儘管盡我所能,儘管我所有的在線搜索,我似乎無法確定爲什麼我的代碼返回1004錯誤,也不知道如何解決它。任何幫助,將不勝感激。爲什麼我的.Range函數返回1004運行時錯誤

Worksheets("Sheet1").Range("J3:J" & LastRow).Formula = "=J2+G2" 
Worksheets("Sheet1").Range("K3:K" & LastRow).Formula = "=K2+H2" 

Do While Worksheets("Sheet1").Range("J" & c).Value <> "" 
    c = c + 1 
Loop 

MsgBox c 

問題似乎是在範圍函數本身的調用,因爲當我刪除所述問題時,一切正常工作。

回答

0
  • 您不符合Worksheets("Sheet1")的上下文。它必須是「某處」,即在工作簿的背景下,例如ThisWorkbook.Worksheets("Sheet1")
  • 您從未啓動變量c。糟糕的做法。
  • 您也永遠不會初始化變量LastRow。再次,糟糕的做法。

當宏啓動時,你認爲這兩個變量應該有什麼值? Excel 應該如何知道你認爲如果你不告訴它?

變暗變量併爲其分配一個初始值。

總是Dim您的變量。另外,爲了避免這樣的填充,可以使用Option Explicit作爲任何模塊的第一行。這會在編譯之前對代碼進行完整性檢查並指出錯誤。它會執行好習慣聲明所有變量在使用之前,他們並拿起了很多其他的東西

enter image description here

比較,以

Option Explicit 

Sub stuff() 
Dim c As Long, LastRow As Long 
c = 1 
LastRow = 20 ' or use code to work out the last row 

ThisWorkbook.Worksheets("Sheet1").Range("J3:J" & LastRow).Formula = "=J2+G2" 
ThisWorkbook.Worksheets("Sheet1").Range("K3:K" & LastRow).Formula = "=K2+H2" 

Do While Worksheets("Sheet1").Range("J" & c).Value <> "" 
    c = c + 1 
Loop 

MsgBox c 
End Sub 
+0

我的C變量是一個全局變量,我讓它在另一個班級中起到類似的作用。但是,我看到我已經包含LastRow不知道它不是VBA的功能。另外,據我瞭解,「J3:J」是指J的整個列,沒有長度限制嗎?無論如何,添加「ThisWorkbook」。並刪除「LastRow」仍然給我的錯誤。再次感謝您爲此付出的時間 – Dylan

+0

我發現我的問題,VBA無法使用無限長度,我需要包含一個限制。感謝您的幫助,我得到了它的工作。 – Dylan