【问题标题】:Excel VBA Save sheet so it opens on last rowExcel VBA 保存工作表,使其在最后一行打开
【发布时间】:2014-04-07 10:08:56
【问题描述】:

这应该很简单,但到目前为止我完全是空白,我用谷歌搜索也没有找到答案。

我正在使用 VBA 创建一个新工作簿,我想保存该工作簿,以便当用户打开它时它会在包含数据的最后一行打开。这是我到目前为止所拥有的:-

   With ActiveWorkbook
        'Added a last row selection so the sheet will open at the bottom of the page - Ash 07/04/14
        LastRow = Range("A65536").End(xlUp).Select
        Rows(ActiveCell.Row).Activate
        .SaveAs str_DestFolder & str_File, FileFormat:=xlOpenXMLWorkbook, AccessMode:=xlShared
        .Close
    End With

不知何故这让我失望了,任何帮助将不胜感激!

【问题讨论】:

    标签: vba excel


    【解决方案1】:

    您可以在激活最后一行后添加以下行:

    ActiveWindow.ScrollRow = ActiveCell.Row
    

    所以你的完整代码是

        With ActiveWorkbook
            LastRow = Range("A65536").End(xlUp).Select
            Rows(ActiveCell.Row).Activate
            ActiveWindow.ScrollRow = ActiveCell.Row
            .SaveAs str_DestFolder & str_File, FileFormat:=xlOpenXMLWorkbook, AccessMode:=xlShared
            .Close
        End With
    

    【讨论】:

    • 完美!谢谢!我开始考虑将模块复制到新工作簿等,但这要简单得多。
    【解决方案2】:

    几个建议

    • 应在BeforeSaveOpen 事件中运行为下一次打开设置工作簿而运行的代码。
    • 最好运行代码以自动处理特定工作表(下面示例中的第一个工作表),而不是依赖它处于活动状态。
    • Excell 2007 及更高版本有 100 万行,因此请使用 Cells(Row.Count,"A").End(xlup)Find 而不是 Range("A65536").End(xlup)`。

    ThisWorkbook 模块的代码(保存时自动运行)

    Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    Dim ws As Worksheet
    Set ws = Sheets(1)
    Dim rng1 As Range
    Set rng1 = ws.Columns("A:A").Find("*", ws.[a1], xlValues, , xlByRows, xlPrevious)
    Application.Goto rng1
    ActiveWindow.ScrollRow = rng1.Row
    End Sub
    

    【讨论】:

    • 感谢@brettdj 的输入。我实际的完整代码正在做的是从一个工作簿中提取数据,创建一个新工作簿,然后将所有数据复制到第一个工作表中。这一切都在一个每 10 分钟运行一次并在每天午夜启动一个新工作簿的自动化作业上进行。如果我可以避免的话,我真的很想避免尝试将代码添加到这些新创建的工作簿中,幸运的是,在这种情况下,Davids 的回答对我来说非常有效 - 用户在查看新的数据时只想查看最后一小时左右的数据工作簿。顺便说一句,Cells(Row.Count,"A").End(xlup) 很好!
    • @LuckySevens 没有问题,很高兴听到你把它整理好了 :)
    【解决方案3】:
    LastRow = Wb.Worksheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Row
    Wb.Worksheets("Sheet1").Cells(LastRow, 1).Select
    With Wb
        Application.DisplayAlerts = False
        .SaveAs Filename:="YourFilePath",  AccessMode:=xlShared
        .Close
        Application.DisplayAlerts = False
    End With
    Set Wb = Nothing
    

    试试这个...

    【讨论】:

    • 谢谢你,我确信它工作得很好,大卫的回答只是一个更简单的解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-13
    • 2023-02-02
    • 1970-01-01
    • 1970-01-01
    • 2014-09-28
    • 1970-01-01
    相关资源
    最近更新 更多