对象在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函数调用到子过程中