vba错误:对象变量或未设置块变量
运行以下代码时,出现“对象变量或块变量未设置”错误消息。它在Access中并引用一个Excel电子表格。代码有什么问题?vba错误:对象变量或未设置块变量
wsTest.Range("A11").Activate
Do Until IsEmpty(ActiveCell)
intX = intX + wsTest.Cells(ActiveCell.Row, "L") 'error occurs on this line
intY = intY + wsTest.Cells(ActiveCell.Row, "I")
ActiveCell.Offset(1, 0).Select ' Step down 1 row to the next cell.
Loop
代码运行第一次,没有错误,只有第二次。关闭并重新打开Access“修复”问题。这与代码有什么关系?
,我相信你试图做一个无效的总和。也许wsTest.Cells(oCell.Row, "L")
返回的值不是整数,或者您应该使用wsTest.Cells(oCell.Row, "L").Value
来代替。
添加msgbox来检查单元格值会更容易找出问题的根源,正如我在下面添加的那样。
无论哪种方式,我建议你避免使用对ActiveCell的引用,因为它们不可靠。也许这段代码有助于避免这个错误(简单地用适当的单元对象替换ActiveCell)。
Dim oCell as excel.range
set oCell = wsTest.Range("A11")
Do Until Len(oCell.Value) = 0
msgbox(wsTest.Cells(oCell.Row, "L"))
intX = intX + wsTest.Cells(oCell.Row, "L") 'error occurs on this line
intY = intY + wsTest.Cells(oCell.Row, "I")
Set oCell = oCell.Offset(1, 0) ' Step down 1 row to the next cell.
Loop
这是一个整数 - ActiveCell是问题。搞砸的事情是[Microsoft在他们的文档中使用ActiveCell](http://support.microsoft.com/kb/141762)。非常感谢您的理解! – LFurness 2011-04-13 15:17:57
太好了,@LCountee!很高兴知道它的工作。 – 2011-04-13 16:12:53
尝试改变
wsTest.Range("A11").Activate
到
wsTest.Range("A11").Select
不,没有工作。同样的错误。 – LFurness 2011-04-12 20:20:05
尝试在'intX ='行之前添加'Debug.Print ActiveCell.Address'。结果是什么? – mwolfe02 2011-04-12 20:53:57
第一次运行代码时,如果没有发生错误,结果是$ A $ 11,这是正确的,因为我测试的文件只有一行数据。但是,第二次运行代码时,错误发生在'do直到isempty(activecell)'行并且'debug.print'从不运行。所以这很有趣,错误发生在第二次代码运行时,在任何第一次尝试访问活动单元格的行上。嗯。 – LFurness 2011-04-13 14:17:19
您需要定义纸张,像这样:由于在突出显示的行发生错误
Dim wsTest As Worksheet
Set wsTest = Sheets("Sheet1")
难道它不会错误的行“wsTest.Range(”A11“)。激活”如果这是问题? – 2011-04-13 01:04:48
@Doug,这是我实现他的代码时发生的错误,所以我添加了这些行并解决了问题。 – 2011-04-13 05:20:42
错误发生在哪条线上? – mwolfe02 2011-04-12 19:45:41
我使用该信息更新了上面的代码。 – LFurness 2011-04-12 19:55:59
ActiveCell是指Excel对象,因此您可能应该使用XL应用程序参考来限定它。例如:xlApp.Activecell – 2011-04-13 00:21:56