2011-04-12 200 views
3

运行以下代码时,出现“对象变量或块变量未设置”错误消息。它在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“修复”问题。这与代码有什么关系?

+0

错误发生在哪条线上? – mwolfe02 2011-04-12 19:45:41

+0

我使用该信息更新了上面的代码。 – LFurness 2011-04-12 19:55:59

+3

ActiveCell是指Excel对象,因此您可能应该使用XL应用程序参考来限定它。例如:xlApp.Activecell – 2011-04-13 00:21:56

回答

1

,我相信你试图做一个无效的总和。也许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 
+0

这是一个整数 - ActiveCell是问题。搞砸的事情是[Microsoft在他们的文档中使用ActiveCell](http://support.microsoft.com/kb/141762)。非常感谢您的理解! – LFurness 2011-04-13 15:17:57

+0

太好了,@LCountee!很高兴知道它的工作。 – 2011-04-13 16:12:53

0

尝试改变

wsTest.Range("A11").Activate 

wsTest.Range("A11").Select 
+0

不,没有工作。同样的错误。 – LFurness 2011-04-12 20:20:05

+1

尝试在'intX ='行之前添加'Debug.Print ActiveCell.Address'。结果是什么? – mwolfe02 2011-04-12 20:53:57

+0

第一次运行代码时,如果没有发生错误,结果是$ A $ 11,这是正确的,因为我测试的文件只有一行数据。但是,第二次运行代码时,错误发生在'do直到isempty(activecell)'行并且'debug.print'从不运行。所以这很有趣,错误发生在第二次代码运行时,在任何第一次尝试访问活动单元格的行上。嗯。 – LFurness 2011-04-13 14:17:19

1

您需要定义纸张,像这样:由于在突出显示的行发生错误

Dim wsTest As Worksheet 

Set wsTest = Sheets("Sheet1") 
+0

难道它不会错误的行“wsTest.Range(”A11“)。激活”如果这是问题? – 2011-04-13 01:04:48

+0

@Doug,这是我实现他的代码时发生的错误,所以我添加了这些行并解决了问题。 – 2011-04-13 05:20:42

相关问题