Stejně moc děkuji, aspoň se nám podařilo identifikovat, ve kterém místě se zádrhel nachází. Teď se alespoň mohu pokusit hledat odpověď. Předtím jsem netušil, kde je problém, i když odkrokovat si to ... no mělo mě to napadnout, než jsem sem vlezl
Předpokládal jsem, že když se ten problém vyskytuje už při otvírání, že zbytek kódu není potřeba... Neřeším přece, že by to bylo obecně pomalé.
Přikládám v texťáku
Ano, dlouho trvá už jen to otevření. Samotný zbytek kódu už běží rychle. Co může způsobit, že se xml najednou spouští dlouho?
r13:
nečekal jsem, že by krokování mohlo něco objevit, ale měl jste pravdu. Vypadá to, že se to tak moc zdrží při otvírání toho xml souboru. Otázka stále zní, proč se to ale chová jinak když je otevřený soubor rozpočet, který do toho nevstupuje a jinak když otevřený není.
Ten poslední řádek je to místo, kde se na dlouhou dobu makro zastaví a načítá xml. Pořád ale nechápu, proč by tu dobu měl ovlivnit otevřený další soubor.
Dim wsSeznam As Worksheet
Dim wbMakro As Workbook
Dim iFile As Integer
Set wsSeznam = Worksheets("seznam")
Set wbMakro = ThisWorkbook
konecradku = wsSeznam.Cells(Rows.Count, "A").End(xlUp).Row
Application.ScreenUpdating = False
'zkopirovani potrebnych sloupcu z xml souboru do noveho listu a jeho uprava
For iFile = 1 To konecradku
cesta = wsSeznam.Cells(iFile, 1).Value
If wsSeznam.Cells(1, 1).Value = "" Then
End
End If
Application.DisplayAlerts = False
Set xmlSoubor = Workbooks.OpenXML(cesta, , xlXmlLoadImportToList)
r13:
a) ten formát xls je tam historicky, původní sešity jsem zdědil a postupně hodně upravil. Nenarazil jsem na žádný problém s tímto formátem, proto tam pořád je. Při otvírání žádné upozornění nevyskakuje. Zkoušel jsem i ručně otevřít, otevře se jako každý jiný soubor.
b) Zpracovává se odděleně, protože soubor data má více využití ne jen pro sešit rozpočet.
eLCHa:
I tak děkuji za čas strávený nad mým dotazem. I vaše odpověď je pro mě dostatečná. Znamená to, že tam nenastává nějaká triviální očividná situace, která zkušeného okamžitě napadne a mně je neznámá. Chápu, že v takovém případě není co řešit.
Já vím, že je to střelba na slepo a těžko mi poradit. Beru to jen jako pokus, jestli se třeba náhodou netrefíme, protože sám na to nepříjdu, nedává mi to smysl. Přepočtem to být asi nemůže nebo ne tak jednoduše. Upřesním jak to probíhá a soubory pojmenuji, ať se to lépe popisuje. Ten funkční způsob je:
1. Otevřu generátor.xlsm a ten zpracuje xml a uloží soubor data.xls
2. Zavřu generátor
3. Otevřu rozpočet.xlsm a ten si otevře data.xls a pomocí makra si data načte k sobě na list.
A ty body 1 a 2 trvají těch cca 10 vteřin.
Ten nefunkční způsob (pomalý) je:
1. Otevřu rozpočet.xlsm
2. Otevřu generátor.xlsm a ten zpracuje xml a uloží soubor data.xls
3. Zavřu generátor
4. Načtu data na list do rozpočtu pomocí makra.
A už ten bod 2 trvá těch cca 5 minut.
Přitom ten rozpočet.xlsm do toho zpracování nijak nevstupuje. Data má u sebe na listu a dokud nepustím makra, nic nedělá.
Proto mě to tak mate, protože mi připadá, že by neměl být rozdíl, jestli mám otevřený další sešit, když do toho nijak nevstupuje. Ale rozdíl 10 vteřin vs 5 minut je ohromný a tak mi to vrtá hlavou. Není problém ten rozpočet pokaždé zavřít, ale na druhou stranu to někdy aktualizuji víckrát a je otravné rozpočet pokaždé zavřít a zas otevřít a když zapomenu, tak 5 minut je ztráta času
Budu rád, za každý nápad a moc děkuji
Dobrý den,
chtěl bych poprosit o hodně "obecnou" radu. Nejde mi o konkrétní řešení, ale spíše o navedení, na co se zaměřit.
Mám sešit s makry, který prochází složku s xml soubory, tyto soubory otevírá, zpracovává a zase zavírá. Výsledkem je xls soubor vstupních dat natáhnutých z těchto xml. Rychlost samozřejmě závisí na množství xml, ale obecně se pohybuji kolem 5-30 vteřin.
Pak mám druhý sešit, který tato data načítá a dál s nimi pracuje. Tyto dva sešity jsou na sobě tedy nezávislé. Jeden data generuje a druhý je používá.
V případě, že mám ale tyto dva sešity otevřené zároveň, trvá zpracování souborů xml souborů mnohem déle. Řádově minuty (5 min).
Nemůžu tyto sešity nasdílet, jsou to interní účetní data, ale pokud by někdo dokázal obecně říct, proč otevřený sešit, který zrovna není používán může zpomalit běh makra v jiném sešitu, hodně by mi to pomohlo.
Mám excel 2016, procesor i5-4590S 3 GHZ a 16GB RAM.
Díky
Zkusil jsem, ale nepomohlo to.
Myslím, že problém je v tom příkazu Call ZavriPristupy (ten jen zavře zdrojový excel bez uložení).
Odkrokoval jsem celé makro a formulář se na konci normálně správně zobrazil. Pak jsem to zkusil i tlačítkem a taky to najednou fungovalo. Formulář se zobrazil.
Otevíral jsem ribbon ze souboru doplněk. Když to fungovalo, nahrál jsem tedy doplněk do složky addin a nastavil načtení doplňku po otevření souboru (takže muj ribbon je ve všech excelech) a formulář se dál zobrazoval, ale bez načtených dat (listboxy byly prázdné). Zkusil jsem přehodit příkaz show hned za CSOB_Ribbon, který data načítá a za ním zůstal příkaz na zavření zdrojového excelu. Tím jsem dosáhl toho, že formulář po otevření hned zmizí. Když jsem poradí vrátil tak, že příkaz .show je na konci, tak se formulář zobrazí, ale prázdný
Zkoušel jsem jen odmazat vbmodaless.
Původně bylo volání formuláře v CSOB_Ribbon jako poslední položka (v tom formátu, jak je odstavec níže, tedy ještě s úpravou parametrů formuláře). Později jsem ho přidal přímo do tlačítka, viz níže
Public Sub CSOB_spust(control As IRibbonControl)
Application.ScreenUpdating = False
Call OtevriPristupy
Call CSOB_Ribbon
Call ZavriPristupy
Application.ScreenUpdating = True
Pristupy.MultiPage1.Value = 0
Pristupy.Show vbModeless
With Pristupy
.Height = 533
.Top = 40
.Left = Application.Width - Pristupy.Width - 10
End With
End Sub
vystup = Sheets(1).Range("B1") & Sheets(1).Range("C1") & "xxx"
mám jen jeden
Ahoj,
zpracovávám formulář vba a narazil jsem na problém, se kterým jsem se dříve nesetkal.
Popis kroků:
1. Otevřu zdrojový soubor.xlsx
2. Načtu z něj data do formuláře.
3. Zobrazím formulář
4. Zavřu zdrojový soubor.xlsx
Formulář je multipage (5 page) s pár tlačítky
Celé jsem to tvořil v excelu 2007. Makro volám z vlastního tlačítka ve vlastním ribbonovém pásu.
Teď ten problém. V excelu 2007 a 2010 mi to funguje naprosto bez problému, vše jak má. V excelu 2013 formulář jen problikne, ale nezobrazí se, resp. nezůstane viditelný (používám příkaz formular.show vbmodeless).
Stejně tak v 2007 dobře funguje příkaz, kdy stisk tlačítka zkopíruje text do schránky a maximalizuje prohlížeč chrome, zatímco 2013 funguje jen když je chrom na obrazovce (z lišty ho nevyvolá - používám příkaz Appactivate.
Nevíte někdo, kde by mohl být problém? Kdyby to nefungovalo vůbec, tak by mi to až tak překvapivé nepřišlo, ale že to nejde jen v konrétní verzi excelu, tomu nerozumím.
Na všech testovaných PC je win7. Excel 2013 jsem zkoušel na dvou PC, problém je na obou.
Jiné formuláře nám fungují ve všech verzích.
Díky za případné nápady
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.