【问题标题】:Find the last row/column in excel using access VBA使用访问VBA查找excel中的最后一行/列
【发布时间】:2023-03-26 00:40:01
【问题描述】:

我正在尝试从我的 Excel 工作表中由 access vba 处理的所有数据的开始到结束运行 for 循环。我试过了:

myWorksheet.Cells(Rows.Count, 4).End(xlUp).row

但它不起作用。我很困惑如何获得一个数字输出,以便它能够在我的循环中成功运行。请帮忙。另外,如果您可以分解答案的格式,那将真正对我有所帮助。谢谢

【问题讨论】:

  • myWorksheet.rows.count
  • xlUp 在 Excel = -4162。在访问 - 空。试试myWorksheet.Cells(myWorksheet.Rows.Count, 4).End(-4162).row
  • 我总是使用 worksheet.usedrange。 (后跟 .Rows.Count)。大多数时候,您只关心其中包含数据的行,而 UsedRange 是容纳所有数据的最小矩形。
  • 但它不起作用是什么意思?您是否创建了对Microsoft Excel 1x.0 Object Library 的引用(我的x16,您的可能不同)?你能分享你的完整代码吗? xlUp 对我有用,但你一定要使用 myWorksheet.Rows.Count

标签: excel vba loops for-loop


【解决方案1】:

我通常这样定义我的LastRow,“N”就是其中包含数据的列,您可以根据需要进行调整:

LastRow = ActiveSheet.Cells(Cells.Rows.Count, "N").End(xlUp).Row

我通常将它与Dim row_no As Long 配对并像这样在循环中使用它,这里的硬数字是我数据集的第一行。

For row_no = 5 to LastRow
   'Do the thing
Next

有办法以相反的顺序遍历循环,这在您删除行时更有意义,因为当您删除它时,它会与宏认为它所在的行混淆。即:您删除第 2 行,因此第 3 行移至第 2 行,但宏移至具有第 4 行数据的第 3 行。对于那些你会这样处理的人:

For x = LastRow To 5 Step -1
    'Do the thing
Next x

【讨论】:

    【解决方案2】:

    Access 没有常量 xlUp,它在 Excel 中的值为 -4162。在 Access 中,xlUp 是具有 Variant 类型和初始值 Empty 的未声明变量。要在 Access VBA 中使用正确的 End(xlUp),您可以编写 .End(-4162)

    myWorksheet.Cells(myWorksheet.Rows.Count, 4).End(-4162).row
    

    【讨论】:

    • 另一种选择是添加Const xlUp As Long = -4162
    • @BigBen 是的,反复使用就合适了
    • 添加对“Microsoft Excel x.xx Objec Libray”的引用时,xlUp 常量与 Excel 中的值相同。如果使用后期绑定,则该常量对 Access 没有任何意义。他必须展示整个代码。即使rows.count 不是完全限定的(如在您的代码中),该代码行也可能引发相同的错误。 Excel 接受缺少的工作表,但 Access 不接受。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-27
    相关资源
    最近更新 更多