在选择中循环遍历单元格时,对象需要错误

时间:2017-01-18 10:25:22

标签: excel vba excel-vba

我循环浏览一些单元格,在垂直选择中,在Excel中,然后将该单元格作为参数传递给过程。

我这样做了,所以我没有在代码中有两次ProcessCells的内容,一次用于while循环,第二次在For循环中。

如果我尝试将单元格的值写出来,在for循环中,它可以工作。 如果我将ProcessCells过程的内容放在for循环中,它也可以。

但如果我尝试将其作为参数传递给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)

不同
  

c在选择中

错误发生在For循环中,但它不会在while循环中发生。

1 个答案:

答案 0 :(得分:3)

您应该如何做到这一点:

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 - Why Use Integer Instead of Long?

以下是一个很好的解释,何时将参数放在括号中以及何时使用call - How do I call a VBA Function into a Sub Procedure