首页 文章

Workbooks.open在焦点前返回(Excel 2010和2016)

提问于
浏览
1

我有一个宏打开一个新的工作簿,然后激活(焦点)到第一个工作簿 .

Code:
Set mainWorkbook = ActiveWorkbook
Set bdWorkbook = Workbooks.Open(FileName:="Another.xlsm", ReadOnly:=True)
mainWorkbook.Activate

我已经在Excel 2007中使用了此代码,但我在Excel 2010及更高版本中遇到了打开工作簿的问题 . 出现此问题是因为Workbooks.Open在Excel激活新工作簿之前返回到VBA [使用调试器工作正常] .

我可以用 Application.Wait (Now + TimeValue("0:00:01")) 做一个workarround,但......

EDIT: My code that dosen't work in Excel 2016

Sub Sample()
    Dim path As String

    path = "A_PATH_FROM_MY_SERVER"

    actualScreenUpdate = Application.ScreenUpdating
    Application.ScreenUpdating = False

    Set MainWB = ActiveWorkbook
    Workbooks.Open fileName:=path, UpdateLinks:=False, ReadOnly:=isReadOnly
    Set bdWB = ActiveWorkbook
    DoEvents

    MainWB.Activate
    Application.ScreenUpdating = actualScreenUpdate

    With Sheets(MY_BD_SHEET)
        bdWB.ActiveSheet.UsedRange.Copy .[A1]
        '....
    End With
End Sub

1 回答

  • 1

    这是你想要的吗? ( Tried And Tested

    这将打开相关的工作簿并将其最小化,从而将焦点重新放在主工作簿上 .

    Sub Sample()
        Dim wbThis As Workbook, wbThat As Workbook
    
        Set wbThis = ThisWorkbook
        Set wbThat = Workbooks.Open("C:\Users\Siddharth\Desktop\Sample.xlsx")
    
        DoEvents
    
        Application.WindowState = xlMinimized
    
        ' OR
    
        ActiveWindow.WindowState = xlMinimized
    End Sub
    

    EDIT

    看到你当前的编辑 .

    MainWB.Activate
    Application.ScreenUpdating = actualScreenUpdate
    

    你正在激活 ScreenUpdating = False ?将其设置为 True 然后激活它:)

相关问题