我在 Excel 中有一个命名范围,其中包含一些我想在子例程或函数中处理的数据,但是我很难弄清楚如何引用该范围的各个部分。我正在尝试使用
Cells
功能,但它似乎不起作用。
这是我的代码片段:
Sub sub1()
x = Range("Test")
For Each i In x
v = x.Cells(i, 1)
calculate(v)
Next i
End Sub
目前,命名范围“Test”被命名为A1:A18,计算函数尚未编写。使用 VBA 中的调试工具,程序在
v = x.Cells(i,1)
行抛出错误:“运行时错误 '424':需要对象”
我似乎遗漏了一些明显的东西。也许有一种方法可以将命名范围转换为数组?
一切都在 Siddharth Rout 的回答中;我将进行更详细的解释。
缺陷是 x 未声明,因此 VB 使用
Variant
。你需要x是一个Range
类型,所以你可以参考它的Cells
属性。因此你应该这样声明。
插入
Dim x as Range
作为 sub1
的第一行。然后,您必须使用 Set
关键字分配给 x : Set x = Range("test")
Set
是用于分配对象的语法。
此外,
Cells
属性是Range
的默认属性。因此不需要明确地写出来。
For each i in x
为 i 分配一个
Range
对象,它是范围 x 的第 i 个单元格。所以你可以在 i 上应用计算。
现在最后一件事:
Calculate
可以应用于单个单元格或范围。因此,x.Calculate 可以工作(不需要循环)。
这给出了:
Sub sub1()
Dim x as Range
Dim i as Range
Set x = Range("Test")
For Each i In x
i.Calculate
Next i
End Sub
或更简单:
Sub sub1()
Dim x as Range
Set x = Range("Test")
x.Calculate
End Sub
如果“计算”是用户函数:
Sub sub1()
Dim x as Range
Dim i as Range
Set x = Range("Test")
For Each i In x
Call CalculateMyPurpose(i)
Next i
End Sub
Sub CalculateMyPurpose(myCell as Range)
'Do something on myCelll
End Sub
注意:我建议您声明所有变量。这将确保它们具有您想要的类型。要强制执行变量声明,请将
Option Explicit
写入模块的第一行。
您不需要使用
Cells
:)
这是你正在做的事情(未经测试)吗?
Sub sub1()
Dim cl As Range, nmRange As Range
Set nmRange = Range("Test")
For Each cl In nmRange
calculate cl
Next cl
End Sub
'~~> Some sub
Sub calculate(rng As Range)
End Sub