循环选择单元格时需要对象错误

Posted

技术标签:

【中文标题】循环选择单元格时需要对象错误【英文标题】:Object required error when looping through cells in selection 【发布时间】:2017-01-18 10:25:21 【问题描述】:

我在一些单元格中循环,在垂直选择中,在 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 循环中。

【问题讨论】:

它可能应该是For Each c In Selection.Cells(并且你应该尽可能避免使用Select。另外,请参阅这个文档:***.com/documentation/vba/7363/… 谢谢,但遗憾的是这并没有解决问题。 您是否更改了ProcessCells 中的单元格?因为您不能在For Each 循环中更改元素的值(我知道,这很痛苦……) 不,即使 ProcessCells 过程为空,我也会遇到同样的错误。 【参考方案1】:

你应该这样做:

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

【讨论】:

谢谢,使用“呼叫”修复了它。但是您提到我需要使用“呼叫”,因为括号中有一个参数。在While循环中不是同样的情况吗? 没有。在 while 循环中,您使用的是 XL 内置函数 - IsEmpty()。它需要括号中的参数。这是一个很好的参考 - ***.com/questions/1072075/… Nono,我的意思是我正在调用相同的过程,我也在 For 循环中调用:'ProcessCells' 但是我传递的是内置的 'Cells' 参数,而不是循环单元格。 我现在明白了。我想 Cell 是一个对象 msdn.microsoft.com/en-us/library/office/… ,因此 VBA 更加尊重它(一等公民等),并且关于 c 范围,它是 iEnumerable 的一部分,因此 VBA 稍后意识到它(尽管它在顶部声明)。

以上是关于循环选择单元格时需要对象错误的主要内容,如果未能解决你的问题,请参考以下文章

选择单元格时更改图像

在每个单元格都包含表格视图的表格视图中选择新单元格时,无法取消选择先前选择的单元格

UITableView 选择单元格时所有组件都更改了背景颜色

TableView - 选择单元格时的操作

为啥我的 Java 自定义单元格渲染器在选择行/单元格时不显示突出显示?

以编程方式选择表格单元格时缺少 UITableview 表格单元格分隔符