关闭工作簿后关闭另一个工作簿

时间:2018-08-23 06:41:24

标签: excel vba excel-vba

我有一个代码,当我打开模板工作簿(template.xlsm)(在 Workbook_Open 事件上触发)时,它会打开另一个工作簿(source.xlsx)

代码:

Private Sub Workbook_Open()
 Application.Screenupdating= False
 Set w = workbooks
 w.open filename:="link", Updatelinks:=true , readonly:=true
 activewindow.visible=false
 thisworkbook.activate
 application.screenupdating=True
end sub

但是,我希望源工作簿在打开时仅在后台运行,而在关闭模板文件时将其关闭。

Private sub workbook_aftersave()
 Workbook("source.xlsx").Close SaveChanges:=False
End Sub

2 个答案:

答案 0 :(得分:1)

您想使用Workbooks集合(Workbooks("source.xlsx")),而不是Workbook对象(Workbook("source.xlsx"),这会引发错误)。另外,您可以尝试使用Workbook_AfterSave事件,而不是尝试在Workbook_BeforeClose事件上将其关闭:

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    On Error Resume Next 'In case the Workbook is already closed
    Workbooks("source.xlsx").Close SaveChanges:=False
End Sub

{EDIT} 而且,因为我可以,这也是您的Workbook_Open代码的整理版本:

Private Sub Workbook_Open()
    Application.ScreenUpdating = False
    Dim wsSource As Workbook
    Set wsSource = Workbooks.Open(Filename:="SomeDirectory\source.xlsx", UpdateLinks:=True, ReadOnly:=True) 'Change the filename to where your "source.xlsx" is stored
    DoEvents 'Wait for it to finish opening
    wsSource.Windows(1).Visible = False
    ThisWorkbook.Activate
    Application.ScreenUpdating = True
End Sub

答案 1 :(得分:-1)

尝试使用

Application.Visible = False 

将其放置在要隐藏的工作簿上的Workbook_Open代码中,然后使用True将其重新关闭。