【问题标题】:vba error: object variable or with block variable not setvba 错误:对象变量或未设置块变量
【发布时间】:2011-04-12 19:40:37
【问题描述】:

运行以下代码时,我收到“对象变量或未设置块变量”错误消息。它在 Access 中,指的是 Excel 电子表格。代码有什么问题?

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 “修复”了该问题。这怎么可能和这段代码有关?

【问题讨论】:

  • 错误出现在哪一行?
  • 我用该信息更新了上面的代码。
  • ActiveCell 指的是一个 Excel 对象,因此您可能应该使用您的 XL 应用程序引用来限定它。例如:xlApp.Activecell

标签: ms-access vba excel


【解决方案1】:

您需要定义工作表,如下所示:

Dim wsTest As Worksheet

Set wsTest = Sheets("Sheet1")

【讨论】:

  • 如果这是问题所在,它不会在“wsTest.Range("A11").Activate" 行出错吗?
  • @Doug,这就是我在实现他的代码时遇到的错误,所以我添加了这些行并解决了问题。
【解决方案2】:

由于错误出现在突出显示的行中,我相信您正在尝试进行无效的求和。可能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

【讨论】:

【解决方案3】:

尝试改变

wsTest.Range("A11").Activate

wsTest.Range("A11").Select

【讨论】:

  • 尝试在intX = 行之前添加Debug.Print ActiveCell.Address。结果如何?
  • 第一次运行代码,没有报错时,结果是$A$11,这是正确的,因为我测试的文件只有一行数据。但是,第二次运行代码时,do until isempty(activecell) 行上出现错误,debug.print 永远不会运行。所以这很有趣,错误发生在第二次运行代码时,无论哪一行首先尝试访问活动单元格。嗯。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-10-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多