【问题标题】:Excel: re-open most recently closed workbooks on next startupExcel:在下次启动时重新打开最近关闭的工作簿
【发布时间】:2015-07-06 10:19:20
【问题描述】:

我通常同时处理多个工作簿(5、6、7+),这通常会阻止我重新启动计算机 b/c 我不想经历保存、关闭然后重新打开工作簿的麻烦我最近在工作。 我想知道 Excel 是否有办法记住我在退出程序之前打开了哪些工作簿(一次所有工作簿),然后可以选择在下次 Excel 启动时打开所有这些工作簿;本质上,这将是“会话恢复”。要在顶部添加樱桃,最好在启动时有一个清单提示我选择要打开的工作簿,以防我不想打开所有工作簿。任何帮助将不胜感激!

【问题讨论】:

  • 您在寻找 vba 解决方案还是 vanilla excel 的一部分?
  • Workbook_Open() + Application.RecentFiles + FileSystemObject 检查上次修改日期或最近的文件 = 我懒得写完整的解决方案。
  • @FairlyLegit:我认为 VBA 是解决此问题的唯一方法,我对此非常满意。我只是不知道从哪里开始。

标签: excel vba exit-code startupscript


【解决方案1】:

您可以做的是创建另一个工作簿,这将是您的打开关闭工作簿。然后你可以使用一些类似于

的代码
Dim wb as Workbook
Dim TotalNum as Long
For Each wb in Application.Workbooks
    TotalNum = TotalNum + 1
    Range("A" & TotalNum) = wb.FullName
    If wb.Name <> ActiveWorkbook.Name Then
        wb.close
    End If
Next wb

此代码将写出您在工作簿上打开的每个文件的位置。请注意,它还会关闭您打开的每个工作簿。如果您不希望它这样做,请删除 wb.close 行。

以下代码将打开由前面代码写入工作表的所有工作簿。

Dim wb as Workbook
For i = 1 to Range("A" & Rows.Count).End(xlUp).Row
    Set wb = Workbooks.Open(Range("A" & i))
Next i

我将如何使用它是制作一个空白工作簿并在其上放置两个命令按钮。一个是“保存打开的工作簿”按钮,另一个是“打开保存的工作簿”按钮。然后只需单击“保存打开的工作簿”按钮,保存当前工作簿,重新启动计算机,打开放置两个按钮的工作簿,然后单击打开按钮。这应该可以解决问题。

【讨论】:

  • “SaveOpenWorkbooks”宏无法正常工作。它打开序列中的第一个 wkbk (i=1),但第二个 wkbk (i=2) 失败。错误消息:运行时错误“1004”:“找不到。检查文件名的拼写,并验证文件位置是否正确。如果您尝试从最常用的列表中打开文件最近使用的文件,请确保该文件没有被重命名、移动或删除。 调试时,我看到在第一个“Set wb”命令之后,我有一个不相关的加载项被调用并运行,可能找不到'"的原因。'
【解决方案2】:

如果你愿意,你可以调整这个功能,我已经使用 Brad 的评论来完成我的工作,我没有太多时间来调整它以适应一般情况

Private Function offer_recent_IF_SPEC() As Workbook
Dim file As Variant, ans As Boolean
Set offer_recent_IF_SPEC = Nothing
For Each file In Application.RecentFiles
 If file.Name Like "*_COMPLETE_*" Then
    ans = False
    ans = Application.InputBox(Prompt:="IF SPEC document is not opened, do you wish to open " & file.Name & " ?", Title:="IF_SPEC to open", Default:=False, Type:=4)
    If ans Then
        Workbooks.Open file.Name, UpdateLinks:=0
        'Debug.Print Mid(file.Name, InStrRev(file.Name, "\") - 1)
        Set offer_recent_IF_SPEC = Workbooks(Mid(file.Name, InStrRev(file.Name, "\") + 1))
        Exit For
    End If
 End If
Next file
    If Not ans Then
        MsgBox "You do not have opened GBL_COMPLETE excel", vbCritical, "GBL_COMPLETE not opened"
        End
    End If
End Function

【讨论】:

    【解决方案3】:

    我想建议对 FailyLegit 代码进行修改,在您打开文件的部分:

    Dim wb As Workbook
    Dim sWorkbook, sWorksheet As String
    
    sWorkbook = ThisWorkbook.Name
    sWorksheet = ActiveSheet.Name
    
    For i = 1 To Workbooks(sWorkbook).Worksheets(sWorksheet).Range("A" & Rows.Count).End(xlUp).Row
        Set wb = Workbooks.Open(Workbooks(sWorkbook).Worksheets(sWorksheet).Range("A" & i))
    Next i
    

    当宏打开列表的第一个文件时,它会失去焦点,在最近打开的文件上搜索对下一个文件的引用,而不是列表。 这解决了它。

    感谢代码 FairlyLegit!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-10
      • 1970-01-01
      相关资源
      最近更新 更多