VBA If Then 语句在 For Each 循环中返回错误

VBA If Then 语句在 For Each 循环中返回错误

我正在尝试编写一个 VBA 代码,使用嵌套在 For Each 循环中的 If Then 语句检查指定范围的指定列中的每个元素。此代码正在尝试测试较大项目的子例程。

我的命名范围是“Nregion”

我的代码如下:

Private Sub CommandButton1_Click()

Dim singlecell As Range
Dim listofcells As Range

Set listofcells = Range("Nregion").Columns(2)

For Each singlecell In listofcells
If singlecell.Value > 4 Then singlecell.Value = "Big"
Next

End Sub

命名区域填充了随机数。当我运行宏时,我得到了一个运行时错误 13:类型不匹配。当我选择调试时,它会突出显示“then”之前的 If Then 语句的一半。

If singlecell.Value > 4 Then

当我使用固定范围或整个命名范围作为 For Each 循环的目标时,此例程运行良好,但当我尝试仅检查命名范围的单个列时返回错误。有人知道这是为什么以及如何解决它吗?

答案1

您可以通过设置来解决此问题单元格列表CellsColumns(2)。是的,它们都是范围对象,但是 Columns 和 Columns.Cells 具有不同的属性。

Set listofcells = Range("Nregion").Columns(2).CELLS

最简单的解释是,你原来说的是For each column in columns并且column不具有column.value属性。你需要For each cells in columns.cells,因为cells.value是合法属性,而cells是单个单元格。这种错误通常发生在 ,Rows但同样的原则也适用于Columns

相关内容