< návrat zpět

MS Excel


Téma: Otevřený sešit zpomaluje makro rss

Zaslal/a 16.5.2022 10:56

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

Zaslat odpověď >

Strana:  1 2   další »
icon #052712
eLCHa
Obecná rada je dost problém, protože je to čistá střelba, ale z toho co jste napsal:
Pak mám druhý sešit, který tato data načítá a dál s nimi pracuje
Znamená, že se na něj odkazuje vzorci? Pokud ano, tak máme podezřelého - po každém zápisu dochází k přepočtu. Pokud je to ono, vložte na začátek makra kód Dim iCalc As Long
iCalc = Application.Calculation
Application.Calculation = xlCalculationManual
a na konecApplication.Calculation = iCalc. Tím zabráníte přepočtu po každém vložení. Pokud vám kód spadne po vypnutí, nezapomeňte ručně přepnout přepočet na automatický.citovat
#052713
avatar
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ěkujicitovat
#052715
avatar
a) Prečo generátor ukladá vo formáte xls a nie xlsx?
(je spracované upozornenie, že rozpočet otvára súbor starého typu xls?)
b) Musí to byť spracovávané zvlášť generátorom a zvlášť rozpočtom?
Skúsil by som presunúť makrá do jedného súboru, ktorý by to spracovával kompletne, prípadne na dve fázy trebárs dvomi tlačidlami a ak by problém trval naďalej, krokovaním by som hľadal, kde nastáva problém.citovat
icon #052716
eLCHa
No asi takhle. Trefovat se nebudu, chcete-li pomoct, vložte přílohy a někdo se na to koukne.

Na Vašem místě bych to ale zkusil - nic tím nezkazíte a třeba to pomůže (i když Vám to nedává smysl).

Další možností je (a za mně lepší možností), že si ten generátor otevře svou vlastní skrytou instanci excelu a pracuje v ní. Pak to bude nezávislé, i když jsou oba otevřené.citovat
#052719
avatar
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.citovat
#052720
avatar
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)
citovat
#052721
avatar
ukáž zvyšok kódu až po "Next iFile"citovat
#052722
avatar
Ono to totiž vyzerá, že ten cyklus rieši toľko otvorení a spracovaní, koľko je riadkov v aktuálnom hárku.
Krokoval si aj vo vnútri cyklu iFile?
Dlho trvalo už len otvorenie prvého súboru?
Ošetrenie na otvorenie xls tam máš (DisplayAlerts=False)citovat
#052723
avatar
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?citovat
#052724
avatar
Prehliadol si požiadavku o zaslanie pokračovania kódu po riadok s príkazom Next iFilecitovat

Strana:  1 2   další »

Uživatelské menu

Nejste přihlášen(a)
avatar\n

Menu

On-line nástroje

Formulář Faktura

Formulář Faktura IV

Oblíbený formulář Faktura byl vylepšen a rozšířen.
Více se dočtete zde.

Aktivní diskuse

Automaticke vlozenie riadku aj v druhom Zosite

elninoslov • 11.8. 20:35

ADO DBF/FoxPro

Barth • 11.8. 17:50

Automaticke vlozenie riadku aj v druhom Zosite

danis • 11.8. 17:28

Macro pro leteckou dopravu

Jiří497 • 11.8. 17:15

Macro pro leteckou dopravu

Nosal • 11.8. 13:00

Macro pro leteckou dopravu

Jiří497 • 11.8. 11:45

Macro pro leteckou dopravu

Nosal • 11.8. 8:14