2017-03-31 152 views
-1

我目前擁有下面的代碼。我需要將它從單元格S1運行到單元格S5000以及它們之間的所有內容。我所做的是爲每個單元格編寫1到5000的代碼,但是當我將代碼粘貼到工作表時,我收到了消息「編譯錯誤:過程過大」。是否有解決方法,以便我可以將每個單元格的代碼運行到5000甚至更多(如果需要)?將VBA代碼編譯爲長錯誤

謝謝你的幫助!

Sub CopyPriceOver() 
Application.ScreenUpdating = False 


If Range("S1") = 1 Then 
Range("S1").Select 
Range("S1").Select 
Call ScheduleCopyPriceOver 

ElseIf Range("S2") = 2 Then 
Range("L2").Select 
ActiveCell.FormulaR1C1 = "ready" 
Range("L1").Select 
Call ScheduleCopyPriceOver 

ElseIf Range("S3") = 3 Then 
Range("L3").Select 
ActiveCell.FormulaR1C1 = "ready" 
Range("L1").Select 
Call ScheduleCopyPriceOver 

. 
. 
. 
. 

ElseIf Range("S5000") = 5000 Then 
Range("5000").Select 
ActiveCell.FormulaR1C1 = "ready" 
Range("L1").Select 
Call ScheduleCopyPriceOver 


Else 


Call ScheduleCopyPriceOver 
End If 
+0

使用循環?目前還不清楚你到底想要達到什麼目的。 – SJR

+1

看循環1到5000,然後說'如果range(「s」&x).value = range(「s」&x).row然後range(「L」&x).value =「ready」並且如果L1等選擇是該過程使用激活的單元格,則將範圍作爲ScheduleCopyPriceOver中的參數。 –

+0

「程序太大」意味着:程序非常大,VBA的解析器甚至不會採用它。編寫結構化代碼,程序不應該超過屏幕,最大限度。避免編寫無用的'.Select'和'.Activate'宏代碼,並關閉'ActiveCell'和'Selection';學會使用循環和適當的控制流程。瀏覽[VBA文檔](http://stackoverflow.com/documentation/vba/topics),瞭解它是如何完成的。 –

回答

1

您可以使用類似下面的內容。但是,我不知道'ScheduleCopyPriceOver'是什麼,因此取消註釋該行。你的第一個例子使用了'S'列,但是你使用了'L'列。他們都應該是'L'?

Dim lRow As Long 
Dim ws  As Worksheet 

Set ws = ThisWorkbook.Sheets("Sheet5") 
Application.ScreenUpdating = False 

For lRow = 1 To 5000 
    If ws.Cells(lRow, 12) = lRow Then 
     ws.Cells(lRow, 12).Select 
     'Call ScheduleCopyPriceOver 
    End If 
Next lRow 
+0

此外,如果您的範圍會有所不同,請查閱如何查找工作表上最後一次使用的行,然後參考而不是'5000' –