2016-04-01 8 views
1

Ich habe ein Makro, das eine neue Arbeitsmappe öffnet und dann aktivieren (Fokus) auf die erste Arbeitsmappe.Workbooks.open Rückkehr vor dem Fokus (Excel 2010 und 2016)

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

Ich habe diesen Code bekam in Excel 2007 arbeiten, aber ich habe ein Problem mit der geöffneten Arbeitsmappe in Excel 2010 und später festgestellt. Das Problem tritt auf, weil Workbooks.Open vor Excel zu VBA zurückkehrt Aktivieren Sie die neue Arbeitsmappe [funktioniert problemlos mit Debugger].

Ich kann einen workarround macht ein Application.Wait (Now + TimeValue("0:00:01")) verwenden, aber ......

EDIT: Mein Code, die Arbeit 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 
+0

'DoEvents' zwischen den letzten zwei Zeilen? Sonst 'aber ....' was? –

+1

Schnelle Frage. Warum willst du es "aktivieren"? Nicht sicher, ob Sie [DIESE] (http://stackoverflow.com/questions/10714251/how-to-avoiding-using-select-in-excel-vba-macros/10718179#10718179) –

+0

Hi @ScottHoltzman, DoEvents hat nicht funktioniert :-( – Makah

Antwort

1

Ist das dosen't, was Sie wollen ? ()

Das wird die relevante Arbeitsmappe öffnen und es minimieren, wodurch Fokus auf Ihrer Hauptarbeitsmappe zurückgegeben wird.

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

nach dem aktuellen bearbeiten zu sehen.

MainWB.Activate 
Application.ScreenUpdating = actualScreenUpdate 

Sie aktivieren, wenn die ScreenUpdating = False? Setzen Sie es auf True und aktivieren Sie es dann :)

+1

Ich bin gespannt, ob Sie dies eine große Excel-Datei getestet haben. Ich vermute, das OP öffnet eine sehr große Excel-Datei und der Code bewegt sich schneller als die Datei öffnet. Allerdings habe ich dieses Problem nicht erlebt, da ich normalerweise feststelle, dass der Code in der Zeile "Workbooks.Open" stoppt, bis er tatsächlich geöffnet wird. –

+1

Ich habe im Moment keine große Datei: P Aber ich bezweifle, dass die nächste Zeile ausgeführt wird, bevor diese Zeile ausgeführt wird, da das Öffnen in Excel im Gegensatz zum Shell-Befehl stattfindet. Wenn Sie in diesem Fall den Shell-Befehl verwenden, wird der Code in die nächste Zeile verschoben. –

+0

@SiddharthRout Verwenden Sie Excel 2016? Kannst du meinen Code testen? – Makah

Verwandte Themen