【问题标题】:Force Refresh of "Last" Cell of the Worksheet强制刷新工作表的“最后一个”单元格
【发布时间】:2019-11-06 01:58:09
【问题描述】:

在 Excel 中按 Ctrl+End 会将您带到工作表最右下角的单元格。

如果您删除最后的行或列并保存工作簿,则最后一个单元格以及滚动条都会更新。

我记得有一个单行 VBA 命令可以运行,无需保存工作簿即可进行更新,但我不记得该命令是什么 - 你有什么想法吗?

【问题讨论】:

  • 尝试宏:ActiveSheet.UsedRange 但它通常不起作用
  • 在 Excel 2003 或 Excel 2010 中不起作用

标签: excel vba


【解决方案1】:

我发现了一些始终可以删除这些空白行的方法。您可以判断 Excel 使用的“已用范围”何时太大,当您使用右侧的滚动条时会添加额外的空白行,而当您滚动到底部时,它会超出实际数据的最后一行。这将导致在将表导入 SQL 时将额外的空白记录添加到表中。

摆脱它们:

  1. 选择最后一行数据下的整个第一行。点击 Ctrl + Shift + 向下箭头 以选择所有空白行。
  2. 从“主页”选项卡中选择“清除”,然后从“编辑”菜单中选择“全部清除”(白灰色橡皮擦的图片)。
  3. 右键单击并选择删除。
  4. 先转到单元格 A1,然后保存。
  5. Ctrl + Home 然后按 Ctrl + End (这应该会带您进入正确的最后一个单元格使用的范围(在空白行上方)。
  6. 再次点击保存。

【讨论】:

  • 这正是不应该做的事情。原始帖子中说明了保存文件的解决方法,问题是如何在不保存的情况下进行。
  • @MichaelS。抱歉,恕我直言,这是普通用户将活动单元格范围缩小到拥有真实用户数据的最简单的方法。我的用户也有同样的问题,MS 所说的唯一方法是将数据复制到另一个空白文件,保存,删除原始文件并重命名。如果工作簿有 N 个工作表,您必须将 N 个工作表复制到另一个文件,保存并重命名,所以这个解决方案要好得多,但并不完美。
  • 这适用于 Excel 2016 版本 2107 (16.0.14228.20204)。第 2 步应该改写:在“编辑”组/图标部分的“主页”选项卡上,单击“清除”下拉菜单按钮,然后在下拉菜单中单击“全部清除”。如果有大量空行要删除,“全部清除”将需要一段时间,并且 Excel 窗口标题栏可能会显示“未响应”,但它会起作用。如果在清除后,您收到有关使用过多内存的消息,请单击保存图标,关闭文件,然后重新打开它并继续从其他工作表中删除未使用的行。
【解决方案2】:

答案如下:

Sub x()
    ActiveSheet.UsedRange
End Sub

运行此命令,最后一个单元格将被重置。

【讨论】:

  • 在 Excel 2013 中不起作用 - 授予我一个带有隐藏功能和其他杂物的工作簿,因此可能存在冲突。
【解决方案3】:

当上述方法都不起作用时,试试这个。

选择未使用的行并更改行高。

现在删除行并保存。

宾果游戏!

【讨论】:

  • 这个在 Excel 2016 中非常适合我(在运行 ActiveSheet.UsedRange 时)并尝试清除 --> 清除所有事情都失败了)。谢谢!!! :)
  • 这就是为我解决的问题!!!我把头撞在墙上试图解决这个问题,这确实奏效了。非常感谢!
  • 谢谢,这是 Excel 错误中的奇迹,但您的解决方案有效 请记住,您需要通过单击第一行来选择行(不仅仅是单元格),然后向下滚动并单击最后一行编号。
  • 谢谢。我研究了为什么会这样。在原始 Excel 文件(构成 XLSX 的 XML)中,所有空白行(从第 1000 行到第 100 万行)每一行都设置了 customHeight="1" 属性。这会使本页中描述的所有其他方法停止工作。删除行会将它们替换为设置了 customHeight="1" 的新行,因此永远不会重置维度。改变行高可以清除这一点。在 元素(具有新行/列的默认值)中,还设置了 customHeight="1",因此新行遇到了同样的问题。绝对是微软的一个错误!
【解决方案4】:

这就是我所做的...因为 没有 上述工作(这一次,这是可悲的,因为这段代码运行得很漂亮,然后突然xlCellTypeLastCell 完全让我失望了。)这只有在你硬编码你想抓取最后一个单元格的区域的第一个单元格时才有效……例如,我将数据表粘贴到一张 12-40 列和 60-90 行的表格中……但是因为它是粘贴,它总是从单元格 A79 开始...

Worksheets("Data_Import").Activate
Range("A79").CurrentRegion.Select
A = Selection.Rows.Count - 1
B = Selection.Columns.Count - 1
Selection.Offset(A, B).Resize(1, 1).Select
Set DataEnd = Selection

我为不使用酷炫的特殊细胞而感到难过,但唉,如果它不起作用!然后我就无法使用它。 :C

附言- 你也可以扔一个

ActiveSheet.Cells(Rows.Count, 1).End(xlUp).CurrentRegion.Select

【讨论】:

    【解决方案5】:

    此解决方案适用于 Excel 2013,但也适用于最新版本的 Excel:

    • 选择要更改最后一个单元格的工作表,并删除所有未使用的行和列
    • 点击文件 - 选项 - 自定义功能区
    • 在主选项卡下,选中“开发人员”旁边的框,然后单击确定
    • 在现在出现的开发人员功能区上,单击 Visual Basic
    • 在左上角的 Microsoft Excel 对象下,单击要强制刷新工作表最后一个单元格的工作表名称
    • 在菜单中,单击运行 - 刷新,然后关闭 Visual Basic 窗口

    当您按下 Ctrl + End 时,您的最后一个单元格现在应该被刷新了。

    【讨论】:

      【解决方案6】:

      查看http://dmcritchie.mvps.org/excel/lastcell.htm#MakeLastCell,找到来自类似问题的链接。

      远不是被遗忘的一个班轮,但确实为我解决了问题。

      或者;

      1. 打开手动计算(以保留参考)。

      2. 创建新工作表。

      3. 复制旧工作表的单元格和名称。

      【讨论】:

        【解决方案7】:

        由于某种原因,代码 ActiveSheet.UsedRange 单独不适用于我在 Excel 2016 64 位上强制 Excel 重置上次使用的单元格。

        这对我有用。希望这会有所帮助。

        Rows(25:415).Clear   'deletes contents and formatting
        ActiveSheet.UsedRange   'resets last used cell
        

        【讨论】:

          【解决方案8】:

          我不知道为什么每个人都把它弄得这么复杂。只需按 Ctrl + PgDn。

          【讨论】:

          • 先选择你想要的最后一个单元格。
          猜你喜欢
          • 1970-01-01
          • 2014-08-28
          • 2015-08-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多