【问题标题】:Getting the number of rows in a table with Access VBA without using an Excel Reference在不使用 Excel 参考的情况下使用 Access VBA 获取表中的行数
【发布时间】:2015-12-01 01:27:51
【问题描述】:

我正在尝试从 MS Access 编辑 Excel 文件,而不使用 Excel 作为参考。我找到了一个答案 in this question 来解决这个问题。我没有使用对 Excel 的引用,而是使用对象。这似乎在大多数情况下都有效,但我没有从 Excel 中获得我需要的所有功能来计算表格上的行数。我的一个sn-p代码如下:

    Dim xlBook As Object
    Dim xlApp As Object
    Dim xlSht As Object
    Set xlApp = CreateObject("Excel.Application")
    Set xlBook = xlApp.Workbooks.Open("C:\Some\Location.xlsx")
    Set xlSht = xlBook.Sheets("SomeSheet")

    tableRows = xlSht.Cells(xlSht.Rows.Count, 2).End(xlUp).Row

tableRows = xlSht... 行出现错误,内容如下:

Run-time error '1004':

Application-defined or object-defined error

我尝试了许多不同的方法来解决这个问题,例如重写行、更改工作表名称。我似乎找不到关于这种情况的任何文档。如有任何帮助,我将不胜感激。

【问题讨论】:

  • 如果它在你的活动表上试试这个:activesheet.cells(activesheet.rows.count, 2).end(xlup).row我不止一次遇到同样的问题,不是引用你设置的变量,而是直接引用为我修复它的对象否则尝试activeworkbook.sheet("Somesheet").cells(activeworkbook.sheet("Somesheet".rows.count, 2).end(xlup).row 我知道它不漂亮,但它有效。至少它对我有用
  • 如果将xlUp 替换为-4162 会发生什么?
  • 我同意 HansUp ... xlUp 是 Excel 中定义的常量。如果您没有对对象库的引用并使用所谓的后期绑定,您必须自己声明/替换此常量。 PS:通常......模块顶部的 OPTION EXPLICIT 会为您提供明确的问题指示。
  • 正如 cboden 所说 - 你必须替换你的常量。我发现最简单的方法是打开 Excel,例如,在 VBE 即时窗口中输入 ?xlUp - 这将返回您需要的数字。
  • @HansUp,这就是问题所在。感谢您的帮助!

标签: excel ms-access vba


【解决方案1】:

如果不引用 Excel 类型库,Access VBA 不知道名为常量 xlUp 的 Excel。

您可以避免提供常量值 -4162 而不是常量名称的错误。或者在您的 VBA 代码中定义常量...

Const xlUp As Long = -4162

作为@cboden suggested,在代码模块的声明部分中包含Option Explicit。然后,当您从 VB 编辑器的主菜单运行 Debug->Compile 时,它​​会提醒您任何名称无法识别的类似问题。

【讨论】:

    猜你喜欢
    • 2013-10-27
    • 1970-01-01
    • 1970-01-01
    • 2014-04-16
    • 2022-12-03
    • 1970-01-01
    • 1970-01-01
    • 2015-07-16
    • 1970-01-01
    相关资源
    最近更新 更多