从Workbook_Open()运行时,Workbooks.Add不会激活新工作簿

时间:2019-08-13 14:46:30

标签: excel vba

打开工作簿时,我正在尝试运行宏。该宏应该使用Workbooks.Add创建一个新的工作簿,并以新的工作簿为活动结束。但是,无论尝试如何,我似乎都无法做到这一点。

我尝试过的最简单的尝试是以下操作(您可以自己尝试):

Private Sub Workbook_Open()
    Dim wb As Workbook
    Set wb = Workbooks.Add
    wb.Activate
End Sub

或者在模块本身内部:

Sub Auto_Open()
    Dim wb As Workbook
    Set wb = Workbooks.Add
    wb.Activate
End Sub

我尝试了各种操作,例如添加了以下代码行:

DoEvents

Application.Wait (Now + TimeValue("00:00:02"))

我还尝试使用If Then语句检查活动工作簿的名称,但这也不起作用。

最后,我单击的原始文件仍然是活动工作簿。宏完成运行后,如何使新创建的工作簿成为活动窗口?谢谢!

编辑:顺便说一句,请注意,如果您尝试在常规子程序中运行完全相同的代码,则其行为将与我想要的方式相同。在“在打开的工作簿上运行”子程序中运行时,它似乎似乎不起作用。

2 个答案:

答案 0 :(得分:1)

Application.Wait只是闲置了Excel应用程序,因此您将无法使用它。如果所有其他方法都失败了(目前我无法测试),则可以使用Application.OnTime安排一个过程,该过程将在创建新工作簿并将其激活后的1秒钟 Workbook_Open事件:

Option Explicit

Private Sub Workbook_Open()
Application.OnTime Now + TimeValue("00:00:01"), "addNewWb"
End Sub

Private Sub addNewWb()
Dim wb As Workbook
Set wb = Workbooks.Add
wb.Activate
End Sub

答案 1 :(得分:0)

我一直在竭尽所能。但是一种解决方法是添加一个MsgBox

Private Sub Workbook_Open()

        Dim wb As Workbook
        Set wb = Workbooks.Add
        wb.Activate

        MsgBox "New Book Added"

End Sub

在MsgBox上单击“确定”时,它将保留在“新创建的工作簿”上。