【问题标题】:xlCellTypeLastCell giving incorect valuexlCellTypeLastCell 给出不正确的值
【发布时间】:2019-09-08 02:45:19
【问题描述】:

我很难在 Excel VBA 中从 SpecialCells(xlCellTypeLastCell) 获得准确的值。以下代码应输出“TrackedItems”工作表中第一个空行的行号。工作表有8行,但代码输出25(应该输出9):

emptyRow = 1 + wb.Worksheets("TrackedItems").Cells.SpecialCells(xlCellTypeLastCell).Row
MsgBox emptyRow

在这种特殊情况下,this answer 将解决我的问题,因为电子表格不是稀疏填充的(没有空白单元格与非空白单元格混合)。但是,我多次使用xlCellTypeLastCell,并没有遇到这个问题,包括在数据 稀疏填充的情况下。是什么导致xlCellTypeLastCell 以这种方式行事?有什么方法可以让它正常运行,还是我必须依赖自定义编码的函数?我应该用这些函数替换我使用 xlCellTypeLastCell 的旧工作,还是它当前工作的事实意味着它以后不会中断(至少如果我不更改这些工作簿中的任何代码)?

【问题讨论】:

  • 您能否提供一些示例数据,因为听起来问题可能与您工作表中的数据结构有关。
  • 如果您在特定列中搜索第一个空行,它并不需要那么困难。或者正如@Ripster 上面所说的那样——了解数据结构可以帮助提供一些简单和替代的解决方案......
  • 顺便说一句,根据 MSDN:"xlCellTypeLastCell。已使用范围中的最后一个单元格" 表示“整个工作表的已使用范围,未引用范围”。此外,似乎是空的单元格不是。保留了一些单元格的信息,这就是您的问题。
  • 我会提供数据,但问题现在已经神奇地自行解决了。如果它再次启动,我一定会编辑我的问题。

标签: excel vba


【解决方案1】:

你可以试试这个:

emptyRow = range("A" & activesheet.rows.count).end(xlup).row

返回最后一行是否有数据?

【讨论】:

    【解决方案2】:

    第 24 行可能有格式。我知道我迟到了,但我只是遇到了这个问题。

    xlCellTypeLastCell 将为最后一个单元格提供格式,即使它是空的。

    你可能想要这个,改编自http://www.rondebruin.nl/win/s9/win005.htm

    Sub Lastcell(rowz&, colz&) ' -- get last cell in sheet
      Dim zRange As Range
      Set zRange = Cells.Find("*", [a1], xlFormulas, xlPart, xlByRows, xlPrevious, False)
      If zRange Is Nothing Then rowz = 1 Else rowz = zRange.row
      Set zRange = Cells.Find("*", [a1], xlFormulas, xlPart, xlByColumns, xlPrevious, False)
      If zRange Is Nothing Then colz = 1 Else colz = zRange.Column
    End Sub
    

    【讨论】:

      猜你喜欢
      • 2022-01-19
      • 2018-07-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多