在不使用Excel引用的情况下使用Access VBA获取表中的行数

在不使用Excel引用的情况下使用Access VBA获取表中的行数,excel,ms-access,vba,Excel,Ms Access,Vba,我正在尝试从MS Access编辑Excel文件,而不使用Excel作为参考。我找到了一个解决这个问题的答案。我没有使用Excel的引用,而是使用对象。这在很大程度上似乎是可行的,但我并没有从Excel中获得统计表上的行所需的所有函数。我的代码片段如下所示: Dim xlBook As Object Dim xlApp As Object Dim xlSht As Object Set xlApp = CreateObject("Excel.Application

我正在尝试从MS Access编辑Excel文件,而不使用Excel作为参考。我找到了一个解决这个问题的答案。我没有使用Excel的引用,而是使用对象。这在很大程度上似乎是可行的,但我并没有从Excel中获得统计表上的行所需的所有函数。我的代码片段如下所示:

    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

我已经尝试了许多不同的方法来解决这个问题,比如重写行,更改表名。我似乎找不到关于这个场景的任何文档。如果您有任何帮助,我将不胜感激。

如果没有对Excel类型库的引用,则名为constant
xlUp的Excel无法访问VBA

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

Const xlUp As Long=-4162

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

如果它在activesheet上,请尝试以下操作:
activesheet.cells(activesheet.rows.count,2)。end(xlup)。row
我曾经有过多次相同的问题,不是引用您设置的变量,而是直接引用为我修复的对象,否则请尝试
activeworkbook.sheet(“Somesheet”).cells(activeworkbook.sheet(“Somesheet”).rows.count,2).结束(xlup).row
我知道它不漂亮,但它可以工作。至少对我来说是这样。如果将
xlUp
替换为
-4162
,会发生什么?我同意HansUp…xlUp是Excel中定义的常量。如果您没有对对象库的引用并使用所谓的后期绑定,您必须自己声明/替换此常量。PS:通常情况下,模块顶部的显式选项会给您一个明确的问题指示。正如cboden所说,您必须替换常量。我发现最简单的方法是打开Excel,例如,在VBE即时窗口中键入
?xlUp
,这将返回您需要的数字。@HansUp,这就是e问题。谢谢你的帮助!