< návrat zpět

MS Excel


Téma: Nedostatek systémových prostředků. rss

Zaslal/a 5.1.2017 12:52

Ahoj, chtěl jsem se zeptat, zda jde v průběhu makra vyčistit paměť, tak abych dostal dostatek systémových prostředků.

Mám sice PC kde je 16GB ramka, ale v průběhu makra vyhodí PC hlášku na nedostatek systémových prostředků.

Děkuji

https://ctrlv.cz/qfSX

Jméno
Kontrola
Text
  b i u s img code url hr   1 2 3 4 5 6 7 8 9 10

Strana:  1 2   další »
#034194
avatar
Možná bych se spíše zaměřil na optimalizaci makra ;-).
Co tam provádíš tak náročného?
P.citovat
icon #034195
avatar
Pavlus, pán kolega píše makrá s 35k riadkov, používa "tabulky", ktoré nie sú tabuľkami atd. Proste peklo. Pán kolega má rád veľké veci :)citovat
#034198
avatar
Jak jinak Al mě bude vždy kritizovat, už jsem si zvykl.

Vše potřebné v příloze, jen jsem odebral 40 listů abych to zabalil a mohl vložit sem.

Al - těším se na další reakci.
Příloha: rar34198_plany-kovo.rar (195kB, staženo 42x)
citovat
#034199
avatar
SAVEcitovat
#034201
avatar
Děkuji Anonym za nakopnutí, pomohlo uložení sešitu před přeskočením na další list.

Děkujicitovat
icon #034206
avatar
Radku, neber si to tak. Ja občas napíšem niečo uštipačné, ale ten sarkazmus nie je samoúčelný. Môžem to napísať i bez uštipačného podtónu samozrejme.
Nedávno sa ťa kolega Pecháček pýtal, či ti je známy pojem tabuľka. Ty si odvetil, že samozrejme áno, a zrejme v snahe podporiť uvedené tvrdenie pripojil nejaký súbor, ktorý obsahoval spústu listov. Prezradím ti sladké tajomstvo: v tom súbore sa nenachádzala jediná tabuľka.
Predtým si sa hrdil tým, že si napísal makro s 35k riadkov. Ja som tomu nedokázal veriť, tak si mal potrebu svoje tvrdenie dokázať. Áno, to makro malo 35k riadkov, ale iba z jedného jediného dôvodu: bolo proste úplne špatne napísané (neznamená, že nie je funkčné). Bohužiaľ, funkčný kód a dobre napísaný kód nie je to samé.
Na dobre mienenú kritiku reaguješ zbytočne podráždene, na druhej strane mne môže byť vlastne jedno, že tie tvoje postupy sú na míle vzdialené od dokonalosti, takže sa budem snažiť tvojich príspevkov si nevšímať, patlaj sa v tom ďalej sám.citovat
#034215
avatar
To Al,

neber si to osobně, ale mám toho v práci opravdu hodně.
A navíc mě vedení bombarduje úkoly jako jsou tvorba maker, ve kterých zde nesahám nikomu ani po prsty u nohou, natož po kotníky.

Proto jsem rád za každou dobrou radu, kterou tu dostanu a z každé se snažím poučit.(ne vždy to pochopím napoprvé)

Nicméně jsem již starší člověk, který má již spoustu věci za sebou a to, že se o mě v každém příspěvku otíráš mi nepřijde až tak jako legrace, ale spíše mi to připadá, že si zde honíš ego (bez urážky prosím), namísto toho, aby jsi pomohl.

Pokud bych se nechtěl něco naučit, tak abych byl soběstačný, zadával bych problematiky, které tu zveřejňuji, někomu kdo má několikaletou praxi s programováním ve VBA a nebudu si nad tím lámat hlavu a ještě mi zůstane čas pro práci, kterou mám hlavně dělat.

Pokud tedy do budoucna pomůžeš, budu rád. Pokud ne, budu se hold muset spolehnout na někoho jiného, kdo bude vstřícný a má pochopení pro amatéry jako jsem já.

Děkujicitovat
#034220
avatar
@Radek-Klepáček.
Že nie si expert v exceli, tu neriešime.
Ale mal by si pouvažovať nad tým, či je tvoja otázka(zadanie) dosť zrozumiteľné aj iným. A bez prílohy v *.xls sa ťažko dá porozumieť pri rôznej znalosti problematiky. Ty ako keby si predpokladal, že my vidíme tvoje excelovské listy.citovat
#034222
avatar
OK, dám si na to pozor.
Děkujicitovat
#034229
Jeza.m
Asi bych se úplně vyhnul tomu vyjímání listů a opětovnýmu vkládání. Skoro to vypadá že je vyjímáte jen proto aby nebyly obsaženy ve smyčce "For Each sh In ThisWorkbook.Sheets", což je zbytečné, dá se to ošetřit i jinak.

Sub ProjdiKaždýList(x As Boolean)

'Projde všechny listy
For Each sh In ThisWorkbook.Sheets
Select Case sh.Name
Case Is = "Kapacitní střediska", "Kapacitní skupiny", "Zatížení kapacit", "Skluzy dodavatelu"

Case Else
OdKdyUrgent False, sh.Name
End Select
Next
x = True

End Sub


v části kde je voláno "OdKdyUrgent False, sh.Name"
jsem přidal parametr sh.name, což znamená že funkci OdKdyUrget bude předána i tato informace.

Tu je pak třeba nadefinovat i ve funkci.
a pak na řádku Set ws = ... už není třeba odkazovat se na selection, ale na konkrétní list, čímž se vyhnete zbytečnému přepínání listů.

Sub OdKdyUrgent(x As Boolean, nazev As String) 'Od kdy je urgentem

Dim ws As Worksheet
Dim lr As Long
Set ws = Sheets(nazev)


No a pak doporučuji používat na začátku kódu
Application.ScreenUpdating = False
na konci pak
Application.ScreenUpdating = True

Dále hlouběji v kódu máte
Columns("B:B").NumberFormat = "m/d/yyyy"
Columns("A:B").Select

With Selection
.HorizontalAlignment = xlCenter
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With

Range("A1").Select

což nechápu, že najednou už nepracujete s deklarovaným ws.
např.
ws.Columns("B:B").NumberFormat = "m/d/yyyy"
With ws.Columns("B:B")


na konci pak máte
Range("A1").Select
což bych úplně vynechal.

M@citovat

Strana:  1 2   další »

Uživatelské menu

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

Menu

Formulář Faktura

Formulář Faktura IV

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

Helios iNuvio

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.

On-line nástroje