对象在select中循环单元格时所需的错误
我正在通过一些垂直selectExcel中的单元格循环,然后将该单元格作为parameter passing给过程。
我这样做了,所以我没有两次在代码中的ProcessCells的内容,一次为while循环,第二次在For循环中。
如果我尝试获取写出的单元格的值,在for循环中,它的工作原理。 如果我把ProcessCells过程的内容放在for循环中,它也可以工作。
但是,如果我尝试将它作为parameter passing到ProcessCells,我得到一个错误
'所需对象'
这里是代码,如果你想检查出来:
Sub loopThroughCells() Dim c As Range Dim autoSelect As String Dim X, Y As Integer autoSelect = Cells(3, 2).Value If StrComp(autoSelect, "Y") = 0 Then Y = 5 X = 4 While Not IsEmpty(Cells(Y, X).Value) ProcessCells (Cells(Y, X)) Y = Y + 1 Wend Else For Each c In Selection ProcessCells (c) Next c End If End Sub Sub ProcessCells(ce As Range) End Sub
怎么
细胞(N,M)
不同于
cselect中
?
错误发生在For循环中,但在while循环中不会发生。
这是你应该怎么做的:
Option Explicit Sub TestMe() Dim c As Range For Each c In Selection Call ProcessCells(c) Next c End Sub Sub ProcessCells(ce As Range) End Sub
你应该引用call
,因为你有一个括号的论点。 或者像这样,如果你不喜欢这个call
:
Option Explicit Sub TestMe() Dim c As Range For Each c In Selection ProcessCells c Next c End Sub Sub ProcessCells(ce As Range) End Sub
再加上你的代码的小版本。 让你的声明是这样的:
Dim X as Long, Y As long
在你的代码中,X被声明为一个变体,整数比较慢,比long小 – 为什么使用Integer而不是Long?
这里有一些很好的解释何时将参数放在括号中以及何时使用call
– 如何将VBA函数调用到子过程中