为什么Excel VBA给我一个dynamic范围的错误?

我试图创build一个使用Match函数的预算,但我甚至不能达到这一点,因为我试图创build的dynamic范围是返回错误:“应用程序定义或对象定义的错误”。

有问题的范围是rng

Sub Material() Dim wSheet As Worksheet Dim x, dwIndex, offSet, count, upperLeft, bottomRight, r, wall As Integer Dim rng As Range x = 0 For Each wSheet In Worksheets If wSheet.Name = "Drywall Pricing" Then dwIndex = wSheet.Index - 1 End If Next wSheet For i = 1 To dwIndex If Sheets(i).Range("K1").Value > 0 Then count = 9 offSet = 41 r = 27 For wall = 1 To count offSet = (offSet * wall) - (offSet * 1) upperLeft = (r + 16) + offSet bottomRight = (r + 27) + offSet rng = Sheets(i).Range(Cells(upperLeft, 0), Cells(bottomRight, 1)) Next wall End If Next i End Sub 

有没有人有任何线索variablesrng是无效的? 任何帮助都会吓坏,因为这太荒谬了。

提前致谢!

您需要先设置范围。

 Set rng = Sheets(i).Range(Cells(upperLeft, 0), Cells(bottomRight, 1)) 

试试: 设置 rng = ..

任何对象分配都需要SET关键字:-)

除了需要SET之外,你的Cells属性是不合格的,所以它们将从ActiveSheet返回一个Range。 根据你的代码,我想你想要:

 在工作表(i)
     设置rng = .Range(.Cells(upperLeft,0),.Cells(bottomRight,1))
结束 

请注意单元格调用之前的时段。

发生错误时, upperLeftbottomRight的值是多less?
这可以转化为现有的范围吗?

您还错误地声明了第二个语句中的大部分variables。

Dim x,y为整数

只将y声明为一个整数,将x作为变体。

我不确定CELLS的电话是对还是错,但是我想出了一个方法来使其工作。

这是我正在使用的:

 upperLeft = (ref + 16) + (offSet * wall) bottomRight = (ref + 27) + (offSet * wall) Set rng = Sheets(i).Range("A" & upperLeft & ":B" & bottomRight) 

上述公式发生错误。

感谢大家的快速回复。 我第一次使用stackoverflow,我认为这是我最喜欢的事情。

另外请注意,Match将返回一个范围引用而不是数值。 因此,如果没有匹配,你将会得到一个对象错误。