Excel 工作簿_BeforeClose()在第一部分工作,但不关闭工作簿

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和工作簿B。
一旦调用工作簿A的
Workbook\u BeforeClose()
函数(通过关闭工作簿),我将尝试打开工作簿B。
此步骤正在运行(因此工作簿B已打开)。但打开工作簿B后,工作簿A仍保持打开状态,必须再次手动关闭(这次不再调用
Workbook\u BeforeClose()
函数)

我遇到了两个问题:

  • 调用
    Workbook\u BeforeClose()
    函数后,工作簿A未关闭
  • 打开的工作簿B以奇怪的格式打开(缺少Excel菜单栏和标题栏(用于最小化和关闭窗口)
  • 当我将
    工作簿.Open()
    函数与其他工作簿一起使用时,这种情况从未发生过

    另外,
    Workbook\u BeforeClose()
    函数工作正常,只调用了logEntry子函数(no
    Workbooks.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并尝试启用事件(在开始处和之前的一行)。我单独和一起进行了测试,但问题仍然存在。此外,没有显示其他警报或消息。