Řeším tak, že rutinu, která má předcházet zavření, dám do samostatné procedury a z "BeforeClose" ji pak volám.citovat
Zaslal/a stochliny 8.3.2018 8:58
Ahoj všem. Mám jeden dotaz.
Při uzavírání excelového sešitu (2007) vyvstal požadavek na ukládání několika údajů do jiného sešitu, ze kterého tyto údaje většinou v jiném čase (nelze však vyloučit i současné použití, proto řešení přes pomocný sešit) čerpá jiný sešit (a mnohdy i uživatel). Vím, je to spíš na databázi, ale s tou ne každý pracuje...
Nicméně k jádru pudla. Napsal jsem si makro, kdy před uzavíráním (WB_BeforeClose) se "pomocný" sešit otevře, překopírují se příslušná data, uzavře se sešit a nahranými daty a následně se uzavře sešit původní. Pokud uzavírám sešit "křížkem", tak vše proběhne korektně. Potud je vše OK.
Měl jsem, ale napsánu rutinu v původním sešitu, kdy se uzavíral sešit tlačítkem. A zde nastává nějaká anomálie (alespoň pro mě). Do příslušné procedury se před uzavírám sešitu přesunu, ale v ní je příkaz k otevření jiného sešitu ignorován - k otevření nedojde... Následně pak při pokusu o zápis dat, skončí logicky makro chybou (9).
Neví někdo jak z toho ven?
Dík za jakýkoliv typ...
Přihládám výpis makra:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
'uložit změny v tabulce SeznamObj.xlsx
Dim Cislo As Long
Cesta = ThisWorkbook.Path & "\" & adrCis
Nazev = Cesta & "\" & sesitSeznObj
Stop
Workbooks.Open Filename:=Nazev 'otevřít soubor "SeznamObj"
DoEvents
Workbooks(sesitObj).Activate 'vybrat soubor "Objednavky"
Worksheets("2018").Select
Cislo = Worksheets("2018").Cells(Rows.Count, 1).End(xlUp).Row
Text = "A2:X" & Cislo
Stop
Workbooks(sesitSeznObj).Activate
Call OdemkniList("SeznamObj")
Workbooks(sesitObj).Worksheets("2018").Range(Text).Copy 'vybrat
Workbooks(sesitSeznObj).Worksheets("SeznamObj").Range("A2").PasteSpecial xlPasteValues 'kopie z objednávek
Call ZamkniList("SeznamObj")
Workbooks(sesitSeznObj).Close SaveChanges:=True 'zavřít soubor s uložením změn
End Sub
anyman napsal/a:
Chování zcela běžné. Zvláště po příkazu "Close" VBA neočekává plnění některých dalších příkazů.
Řeším tak, že rutinu, která má předcházet zavření, dám do samostatné procedury a z "BeforeClose" ji pak volám.
elninoslov napsal/a:
Cez druhú inštanciu Excelu to pôjde isto, len to pár sekúnd trvá. Nedešifroval som, čo v tom makre robíte (neznáme premenné), tak som si podobné vymyslel.Příloha: 39792_open-v-beforeclose.zip (21kB, staženo 3x)
Oblíbený formulář Faktura byl vylepšen a rozšířen.
Více se dočtete zde.
Používáte podnikový systém Helios iNuvio? Potřebujete pomoci se správou nebo vyvinout SQL proceduru? Více informací naleznete na stránce Helios iNuvio.