我正在尝试编写一个 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
您可以通过设置来解决此问题单元格列表到Cells
中Columns(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
。