< návrat zpět
MS Excel
Téma: EXCEL - VBA - otevření souboru brání samotný scr
Zaslal/a pada 12.8.2017 16:05
Ahoj, mám naprogramované makro, které pracuje ještě s externím programem SAP. Makro se mi postará o to, že z programu vyexportuje data a po chvilce se sám od sebe otevře excel s daty.. jenže problém je, že makro mám nastavené tak, že má počkat 10vteřin na otevření (excel se běžně otevírá 1-2vteřiny), ale když používám příkaz Application.Wait Now + TimeValue("00:00:10"), tak se nic neděje a makro pak proběhne dál, ale s chybou. Makro totiž při svém běhu blokuje pamět nebo něco, co brání excelu se spustit. Nenapadá někoho jak excel donutit, aby počkal 10vteřin, ve kterých se soubor excel musí otevřít?
pada(12.8.2017 16:14)#037241 Pro představu uvádím kód, měl by čekat na otevření excelu, ale ten se otevře až po doběhnutí makra.
Application.Wait Now + TimeValue("00:00:04")
On Error Resume Next
Set SesitAUTO_ADR_SU = Workbooks("AUTO_ADR_SU.xlsx")
OtevrenySesitAUTO_ADR_SU = Not SesitAUTO_ADR_SU Is Nothing
If OtevrenySesitAUTO_ADR_SU = True Then
'možný kod při otevřeném sešit
Else 'když není otevřen
Application.Wait Now + TimeValue("00:00:04")
Set SesitAUTO_ADR_SU = Workbooks("AUTO_ADR_SU.xlsx")
OtevrenySesitAUTO_ADR_SU = Not SesitAUTO_ADR_SU Is Nothing
If OtevrenySesitAUTO_ADR_SU = True Then
'možný kod při otevřeném sešit
Else 'když není otevřen
Application.Wait Now + TimeValue("00:00:02")
Set SesitAUTO_ADR_SU = Workbooks("AUTO_ADR_SU.xlsx")
OtevrenySesitAUTO_ADR_SU = Not SesitAUTO_ADR_SU Is Nothing
If OtevrenySesitAUTO_ADR_SU = True Then
'možný kod při otevřeném sešit
Else 'když není otevřen
MsgBox "Excel nebyl spuštěn do 10ti vteřin."
Exit Sub
End If
End If
End If
citovat
anyman(12.8.2017 23:26)#037242 se sám od sebe otevře...
nechápu, ale např:
Dim SesitAUTO_ADR_SU As Workbook, wCas As Double
wCas = Now + TimeValue("00:00:10")
On Error Resume Next
While SesitAUTO_ADR_SU Is Nothing And Now < wCas
Set SesitAUTO_ADR_SU = Workbooks("AUTO_ADR_SU.xlsx")
DoEvents
Wend
On Error GoTo 0
If Not SesitAUTO_ADR_SU Is Nothing Then
'kod pri otevreném sešitu
Else
'když není otevren
End If
Set SesitAUTO_ADR_SU = Nothing
citovat
pada(13.8.2017 0:35)#037243 děkuji za kód, ale je také bohužel nefunkční. Tím, že se otevře excel myslím to, že script v programu SAP vytvoří report, který SAP vygeneruje do XLSX, když se dělají ruční reporty v SAP, po vygenerování se samo od sebe otevře okno s excelem. Právě proto si myslím, že excel blokuje SAP a excel čeká až skončí úplně celé makro a ihned po skončení se otevře excel, který generoval SAP. V tom vašem kodu se také nic nestalo, proběhlo tedy Else 'když není otevřen - vkládal jsem tam msgbox, abych věděl co z toho se stalo.
citovat
anyman(13.8.2017 1:28)#037244 No, v SAPu se nevyznám, ale pokud platí, že
"a excel čeká až skončí úplně celé makro a ihned po skončení se otevře excel", dojde k události "Workbook_Deactivate"? A nebo zkus "OnTime".
citovat
pada(13.8.2017 8:57)#037246 DÍÍÍÍÍKY!! Deactivate nezabralo, ale OnTime ano, sice musím překopat kód a bude se dělit na víc procesů, ale hlavní je, že to funguje :), ještě jednou děkuju, trávil jsem nad tím několik hodin a úplně zbytečně :/..
citovat