我在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':需要对象”
似乎有一些明显的东西我不见了。也许有办法将命名范围转换为数组?
答案 0 :(得分:3)
一切都在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
可以应用于单个单元格或Range。因此,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
如果“Calculate”是用户函数:
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
写为模块的第1行。
答案 1 :(得分:1)
您无需使用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