2016-04-01 12 views
1

Yeni bir Çalışma Kitabı açan ve ardından ilk Çalışma Kitabına (odağı) etkinleştiren bir makro var.Workbooks.open odaktan önce döner (Excel 2010 ve 2016)

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

Ben Excel 2007 çalışma bu kodu var, ama daha sonra Excel 2010 ve açık çalışma kitabının ile bir sorunu karşılaştık. Sorun, Workbooks.Open Excel'den önce VBA'ya döndüğü için yeni çalışma kitabını etkinleştirir [hata ayıklayıcısını kullanarak iyi çalışır].

Ben Application.Wait (Now + TimeValue("0:00:01")) kullanarak bir workarround yapabilirsiniz ama ......

DÜZENLEME: 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

Son iki satır arasında 'DoEvents'? Aksi halde 'ama ....' ne? –

+1

Hızlı Soru. Neden onu aktif etmek istiyorsun? Gördüğünüzden emin değil [BU] (http://stackoverflow.com/questions/10714251/how-to-avoid-using-select-in-excel-vba-macros/10718179#10718179) –

+0

Merhaba @ScottHoltzman, DoEvents işe yaramadı :-( – Makah

cevap

1

iş kaplamaz Kodum istediğini bu mu ? (Denendi ve Test Edildi)

Bu, ilgili çalışma kitabını açacak ve en aza indirecek ve böylece ana çalışma kitabınıza odaklanacaktır.

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 

mevcut düzenle gördükten sonra DÜZENLEME

.

MainWB.Activate 
Application.ScreenUpdating = actualScreenUpdate 

ScreenUpdating = False ne zaman aktive oluyorsunuz? True'a ayarlayın ve daha sonra etkinleştirin :)

+1

Bu büyük bir Excel dosyasını test ettiyseniz merak ediyorum. OP'nin çok büyük bir excel dosyası açtığından ve kodun daha hızlı hareket ettiğinden şüpheleniyorum. Ancak, bu sorunu yaşamadım, genellikle kod açılıncaya kadar 'Workbooks.Open' satırında durduğunu fark ettim. –

+1

Şu anda büyük bir dosyam yok: P Ama bir sonraki satırın, Shell komutundan farklı olarak Excel'de "Open" gerçekleşmesi için çalıştırılmasından şüpheliyim. Böyle bir durumda Kabuk Komutu kullandığınızda, kod –

+0

@ SiddharthRout sonraki satıra geçmek Excel 2016 kullanıyor musunuz? Kodumu test edebilir misin? – Makah

İlgili konular