【问题标题】:Access/Excel: Method End of object Range failed?Access/Excel:方法结束对象范围失败?
【发布时间】:2017-06-16 04:48:21
【问题描述】:

我有一个处理和导入 Excel 工作簿的 Access db。它在历史上运行良好,但突然在所有工作簿上给我这个错误 - 即使是以前工作过的工作簿:

-2147417851: Method 'End' of object 'Range' failed 

导致问题的行是:

iLastCBRow = XlBook.Worksheets("4_CensusBlocks").Range("B16001").End(xlUp).Row

如果我在“立即”窗口中单步执行此行并输入

XlBook.Worksheets("4_CensusBlocks").Range("B16001").Value

它会正确返回该单元格的值。

我认为 Access db 可能已损坏,因此我重新创建了它。同样的问题。我还手动强制修复 Excel 工作簿。我什至卸载并重新安装了 Office。

现在在 Windows 7 上运行 Office 2016 64 位。

有人知道问题可能是什么吗?谢谢

【问题讨论】:

  • 试试iLastCBRow = XlBook.Worksheets("4_CensusBlocks").Range("B16001").End(-4162).Row
  • 在黑暗中射击:我相信您正在使用 LateBinding 从 Access 连接到 Excel。 xlUP 是 Excel 常量,因此 Access 无法识别它。
  • 谢谢 - 它确实知道 xlUp 因为我包含 Excel 对象引用。在即时窗口中输入 ?xlUp 返回 -4162。这段代码几个月来一直运行良好。我不知道可能发生了什么变化。
  • 你能从 Excel 运行那行吗?
  • 我没有看到代码有任何其他问题。

标签: vba excel ms-access


【解决方案1】:

看起来是因为文件中有超过 16001 行。第一条命令

iLastCBRow = XlBook.Worksheets("4_CensusBlocks").Range("B16001").End(xlUp).Row)

将 iLastCBRow 设置为起始行。

尝试使用

iLastCBRow = ActiveSheet.UsedRange.SpecialCells(xlLastCell).Row

改为

【讨论】:

  • 实际上不超过16000行。该表是一个数据输入表,人们可以在其中输入人口普查区列表;第 16001 行是“数据结束”行,在该行下方不能输入任何内容。我只是想通过从 END OF DATA 开始并向上查找他们输入数据的最后一行。 UsedRange 将无济于事,因为 Excel 认为使用了低至 16001 的所有内容(即使没有在所有内容中输入数据)。
  • 是的,但我假设您的命令要正常工作......它需要在第 16001 行和最后一行数据之间至少有一个空格。如果您的数据上升到第 16000 行,那么 .End(xlUp) 会将其一直带回到开头。
  • 另外......因为我现在知道第 16001 行是“数据结束”,那么 iLastCBRow = ActiveSheet.UsedRange.SpecialCells(xlLastCell).Row 命令将无法为您工作,除非您删除第 16001 行
  • 谢谢迈克。它必须在我的 PC 环境中出现,因为始终运行良好的旧版本 Access db 在以前处理得很好的旧 Excel 工作表上给出了相同的错误。
  • 抱歉,我无法帮助 Dave ...我需要查看更多代码才能找出问题所在。如果数据不超过 15999 行,上面的代码看起来不错。
【解决方案2】:

我仍然不明白为什么,但问题似乎在于使用 Excel 对象变量的早期绑定。一旦我到位

dim xl as object 
dim xlbook as object
set xl = createobject("Excel.Application")
set xlbook = xl.workbooks.open(filename)

不仅仅是

dim xlbook as excel.workbook
set xlbook = getobject(filename)

错误消失了。我一直只安装了 Office 2016,所以也许更新让 OLE 服务器认为我安装了多个 Office 或其他什么?不知道。

【讨论】:

    猜你喜欢
    • 2016-05-04
    • 1970-01-01
    • 2016-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多