为什么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)) 结束
请注意单元格调用之前的时段。
发生错误时, upperLeft
和bottomRight
的值是多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将返回一个范围引用而不是数值。 因此,如果没有匹配,你将会得到一个对象错误。