Excel:在下次启动时重新打开最近关闭的工作簿

时间:2015-04-27 19:46:18

标签: excel vba exit-code startupscript

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

3 个答案:

答案 0 :(得分:0)

你可以做的是你可以创建另一个工作簿,这将是你的开放式工作簿。然后你可以使用

的一些代码
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

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

答案 1 :(得分:0)

如果需要,您可以调整此功能,出于工作目的,我已经使用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

答案 2 :(得分:0)

在打开文件的那部分,我想建议对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!