Excel 工作簿_BeforeClose()在第一部分工作,但不关闭工作簿
我有两本工作簿:工作簿A和工作簿B。Excel 工作簿_BeforeClose()在第一部分工作,但不关闭工作簿,excel,vba,Excel,Vba,我有两本工作簿:工作簿A和工作簿B。 一旦调用工作簿A的Workbook\u BeforeClose()函数(通过关闭工作簿),我将尝试打开工作簿B。 此步骤正在运行(因此工作簿B已打开)。但打开工作簿B后,工作簿A仍保持打开状态,必须再次手动关闭(这次不再调用Workbook\u BeforeClose()函数) 我遇到了两个问题: 调用Workbook\u BeforeClose()函数后,工作簿A未关闭 打开的工作簿B以奇怪的格式打开(缺少Excel菜单栏和标题栏(用于最小化和关闭窗口)
一旦调用工作簿A的
Workbook\u BeforeClose()
函数(通过关闭工作簿),我将尝试打开工作簿B。此步骤正在运行(因此工作簿B已打开)。但打开工作簿B后,工作簿A仍保持打开状态,必须再次手动关闭(这次不再调用
Workbook\u BeforeClose()
函数)
我遇到了两个问题:
Workbook\u BeforeClose()
函数后,工作簿A未关闭工作簿.Open()
函数与其他工作簿一起使用时,这种情况从未发生过
另外,Workbook\u BeforeClose()
函数工作正常,只调用了logEntry子函数(noWorkbooks.Open()
)
代码如下:
Private子工作簿\u关闭前(取消为布尔值)
将wbA设置为工作簿
Application.DisplayAlerts=False
Application.ScreenUpdating=False
'工作簿A(要关闭的工作簿)是Active工作簿
设置wbA=ActiveWorkbook
'Sub将一些数据添加到Log.txt(此时可以正常工作)。
呼叫登录
'仅当工作簿A为只读时才打开工作簿B
'(我将完整路径替换为,但原始路径正确。工作簿B打开)
如果wbA.ReadOnly=True,则
工作簿。打开文件名:=,只读:=真
如果结束
Application.DisplayAlerts=True
Application.ScreenUpdating=True
端接头
我试图在工作簿B打开后添加
wb.Close()
,但这导致了一个错误,因为Workbook\u BeforeClose()
函数再次被此函数调用。此方法的问题是,您的代码正在尝试退出的同一excel应用程序中打开工作簿B
。因此工作簿A
在退出函数时从不关闭
请使用以下代码在新的excel应用程序中打开工作簿B
如果wbA.ReadOnly=True,则
Set app=New Excel.Application
app.Visible=True
app.Workbooks.Open文件名:=“”,只读:=True
如果结束
请同时启用Application.DisplayAlerts=True
和Application.screenUpdatement=True
以查看到底发生了什么,以及在关闭工作簿时是否有任何警报?我现在已经同时启用了这两个功能。唯一显示的警报是,当打开工作簿B时,Excel要求启用Makros。允许后,工作簿B正在建立(以提及的奇怪格式)工作簿A在手动关闭之前一直保持打开状态。没有其他可观察到的警报。工作簿B打开的原因之一是格式奇怪,可能是由于ReadOnly:=True
参数。我正在尝试复制此问题,但我使用的是Mac,因此有点困难。欢迎使用so!尝试使用Application.enablevents=True
在代码的最开始处,或者在打开新工作簿之前的一行?我删除了ReadOnly:=True并尝试启用事件(在开始处和之前的一行)。我单独和一起进行了测试,但问题仍然存在。此外,没有显示其他警报或消息。