Walter需要始终在屏幕上的相同位置并以特定的窗口大小打开特定的Excel工作簿。他想知道是否有一种方法可以让Excel在关闭工作簿时记住此位置和大小信息,以便在下次打开该工作簿时使用它。

一种相对简单的解决方案是将您的工作簿(或通常为工作簿)放置在屏幕上所需的位置,然后将其保存为工作区。通过显示功能区的“视图”选项卡并单击“保存工作区”工具来执行此操作。但是,应注意,此方法仅在Excel 2007和Excel 2010中有效-尽管您仍可以打开工作区,但已从Excel 2013中删除了创建工作区的功能。

对于在所有现代版本的Excel中都适用的解决方案,您需要使用宏。您可以设置一个宏,该宏在您关闭工作簿时自动运行,而另一个在您打开工作簿时运行。关闭时运行的一个可以保存定位信息,然后打开时运行的可以检索该信息,并使用它来定位工作簿的显示位置。

但是,问题是在哪里保存定位信息。一种解决方案是将其简单地写到存储工作簿的同一文件夹中的文本文件中。这是下面的一对宏中采用的方法。

Private Sub Workbook_BeforeClose(Cancel As Boolean)

Dim fileName As String     Dim myWindow As Window

Set myWindow = ActiveWindow     fileName = "config.txt"

Open fileName For Output As #1     With myWindow         Write #1, .Top         Write #1, .Left         Write #1, .Height         Write #1, .Width     End With     Close #1 End Sub
Private Sub Workbook_Open()

Dim inputStr As String     Dim fileName As String     Dim myWindow As Window

Set myWindow = ActiveWindow     fileName = "config.txt"

If Dir(fileName) <> "" Then         Open fileName For Input As #1         With myWindow             .WindowState = xlNormal             Line Input #1, inputStr             .Top = inputStr             Line Input #1, inputStr             .Left = inputStr             Line Input #1, inputStr             .Height = inputStr             Line Input #1, inputStr             .Width = inputStr         End With         Close #1     End If End Sub

关闭工作簿时运行的宏将四个定位位置(.Top,.Left,.Height和.Width)保存到名为config.txt的文件中。然后在下次打开工作簿并设置工作簿窗口的适当属性时读取此文件。

如果由于某种原因缺少config.txt文件,则工作簿将在其默认位置打开。

如果您在使用定位信息的文件夹中只有一个工作簿,则此方法非常有用。如果您有多个,则每个都将覆盖config.txt文件,并且最终可能无法在需要的地方打开工作簿。

对于某些人来说,更好的方法可能是将定位位置存储在工作簿本身中的命名参考中。这是以下宏中采用的方法。

Private Sub Workbook_BeforeClose(Cancel As Boolean)

On Error Resume Next     With ThisWorkbook         With .Names             .Add Name:="WinTop", RefersToR1C1:="=1"

.Add Name:="WinLeft", RefersToR1C1:="=1"

.Add Name:="WinWidth", RefersToR1C1:="=1"

.Add Name:="WinHeight", RefersToR1C1:="=1"

End With         On Error GoTo 0         .Names("WinTop").RefersTo = ActiveWindow.Top         .Names("WinLeft").RefersTo = ActiveWindow.Left         .Names("WinWidth").RefersTo = ActiveWindow.Width         .Names("WinHeight").RefersTo = ActiveWindow.Height     End With End Sub
Private Sub Workbook_Open()

With ThisWorkbook         ActiveWindow.Top = Val(Mid(.Names("WinTop").RefersTo, 2))

ActiveWindow.Left = Val(Mid(.Names("WinLeft").RefersTo, 2))

ActiveWindow.Width = Val(Mid(.Names("WinWidth").RefersTo, 2))

ActiveWindow.Height = Val(Mid(.Names("WinHeight").RefersTo, 2))

End With End Sub

使用这种方法,您可以轻松地将工作簿转移到所需的任何位置,并且宏负责保存和重用工作簿窗口的位置信息。

注意:

如果您想知道如何使用此页面(或_ExcelTips_网站上的任何其他页面)中描述的宏,我准备了一个特殊页面,其中包含有用的信息。

_ExcelTips_是您进行经济高效的Microsoft Excel培训的来源。

本技巧(10091)适用于Microsoft Excel 2007、2010、2013、2016、2019和Office 365中的Excel。