Z Vašeho popisu mi vychádza, že vy nepotrebujete tie súbory otvárať, ani importovať pre zobrazenie. Vy potrebujete na tých súboroch iba urobiť presne stanovené výpočty, a iba konečné výsledky týchto výpočtov zobraziť.
Nastavil som to tak, že v adresári s týmto zošitom sa musí nachádzať podadresár "CSV", v ktorom sú všetky *.csv súbory. V tomto zošite som vytvoril nový list "Final", kde sa nakoniec uložia výsledky vo Vami požadovanej forme (názov súbor a súčet).
Testoval som to na 50000 kópiách csv súboru, ktorého náhľad ste poslal. U mňa to pracuje 11,2 sekundy.
Makro má nastavenú klávesovú skratku Ctrl+M. Prípadne si ho nastavte na nejaké tlačítko.
PS: Ak Vám nejde nahrať príloha, tak ju zabaľte do RAR alebo ZIP.
1. Chýba Vám tam "End If" - nezkopírovali ste to poriadne.
2. Odstránil som Vám tam zbytočné neustále adresovanie Sheetov, selektovanie, odomykanie... Otestujte to.
3. Nerozumiem ale tomu, prečo sa má zapisovať aj firma, v ktorej nič nevyplníte do evidencie ? To ste mal asi na mysli tým, že sa Vám zapisuje iba dátum (to je inak zmenené dátum + čas). To by sa malo ošetriť podmienkou ešte.
Navrhoval by som riešenie od pepe74287
http://wall.cz/index.php?m=topic&id=24292&page=1#post-24295
skombinovať so vzorcom čo som Vám dal do tabuľky. Žiaľ mne sa to nedarí funkčne skombinovať. Niekto iný Vám to snáď bude vedieť urobiť ...
EDIT: Najnovšia verzia :
List3 na 4 riadky
List4 na 3 riadky
Všimol som si, že 4. riadok odspodu v List1 máte hodnotu ako DÁTUM ! Pretože je tam 19.2 namiesto 19,2 (bodka/čiarka). To robí galibu pri kopírovaní.
Iba toto
If Not IsEmpty(Bunka) Then .Value = Bunka.Offset(0, 1).Value 'Ak zmenu nevyvolalo vymazávanie, tak zapíš hodnotu z bunky vpravo od zmenenej
zmeňte na toto:
If Not IsEmpty(Bunka) Then
.Value = Bunka.Offset(0, 1).Value 'Ak zmenu nevyvolalo vymazávanie, tak zapíš hodnotu z bunky vpravo od zmenenej
.Offset(0, 1).Value = Date 'a pripíš aktuálny dátum
End If
Nie som uz pri Pc a na zajtra mam uz asi plan, ale tak narychlo z tabletu:
Urobte si napr dalsi prepinac2, a riadok so zapisom Today do bunky. obdobne ako sme to roboli doteraz. Z tablet a v polospanku vam nedokazem pomoct. Jedina zajtra ked budem ready, a inak ste to mohli supnut tam kde sme riesili tento problem 1x.
TO by som určite do prevádzky bez vyskúšania na konkrétnej tlačiarni nerobil. Každá tlačiareň má iné nastavenie. Ak dáte 600 dpi a tlačiareň bude na 300, bude stránka sploštená, treba nastaviť okraje na konkrétny typ tlačiarne a obsahu dokumentu. Napr. moja tlačiareň potrebuje vľavo, vpravo 0,5 cm, dole 1,2 cm (netlačiteľný okraj). Nevieme či má Vaša tlačiareň podávač na tie lístky A6, alebo budú vsúvané do podávača na A4 do rohu (alebo inde). Na ležato, na stojato. Ak na A4 a potom strihať/rezať, tak skúsiť dať 4 stránky na 1 A4, ... Neviem, ako to urobiť na konkrétne zariadenie, bez toho zariadenia, a bez vizuálneho výsledku a vizuálnych požiadaviek.
EDIT: V hore uvedenom kóde ak nastavím Landscape, tak je každý list na 1 stránku, ale ak dám Portrait, tak je na 1 stránku iba prvý list, ostatné sú na 2 stránky. Bez ohľadu na 300 či 600 dpi.
No ja som to samozrejme čítal. Dal som to tak do pľacu pre všetkých na nejaký ten pokus, pretože mne to vytlačí na normálnej tlačiarni, ale ak to dám do PDF cez PDFCreator, tak mi to neviem prečo rozdelí na jedno PDF prvý list, a ostatné listy do druhého PDF. Preto som to dal na vyskúšanie ostatným.
PS: Pre tých čo to nepoznajú, tak PDFCreator je vyrtuálna tlačiareň do PDF. Tvári sa ako tlačiareň, ale pritom ukladá to čo chcete vytlačiť do PDF. Je to dobré na pokusy bez nákladov... Export do PDF je niečo iné.
Treba vyskúšať:
Sub Tlac()
' tisk tiskárna
Dim ws As Worksheet
For Each ws In ActiveWindow.SelectedSheets
Application.PrintCommunication = True
ws.PageSetup.PrintArea = "$A$1:$BC$38"
Application.PrintCommunication = False
With ws.PageSetup
.PaperSize = 70
.Orientation = xlPortrait
.BlackAndWhite = True
.FitToPagesWide = 1
.FitToPagesTall = 1
.PrintQuality = 600
End With
Next ws
Application.PrintCommunication = True
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, IgnorePrintAreas:=False
End Sub
Týmto finančným veciam vôbec nerozumiem, ale keď pozerám na tie vzorce, hneď ma napadá:
-Vo všetkých listoch sa v stĺpci D počíta s tým, že sa začína 1. Januára, neznámeho roku. Každý riadok sa vkladá počet dní mesiaca. No ale keď to má byť také presné, tak nemôžeme opomenúť na 29 dňový február, a vysokú pravdepodobnosť, že sa úver nebude čerpať presne od 1.1.XXXX.
-V poslednom liste je už počítané stále iba s 30 dňami.
To je len taká poznámka, pretože fakt netuším, ako tieto finančné výpočty fungujú, možno to tak proste má byť. A makrom by sa takáto tabuľka snáď dala vytvoriť
Keďže Mapa znakov vo Win udáva vľavo dole HEX kód, tak sa môže použiť ten:
ChrW(&HF8) 'To "&H" je značka pre HEX kód, a to "F8" je skrátené "00F8" z Mapy znakov
Worksheets("Sheet1").Shapes(1).OLEFormat.Object.Text = ChrW(248) & " niečo"
Samozrejme je vhodné si .Shapes(1) premenovať
EDIT:
Prvok si premenuj tak , že mu nastav makro na toto:
Sub Premenuj()
Dim o As Object
Set o = ActiveSheet.Shapes(Application.Caller)
o.Name = "tbPriemer"
End Sub
a klikni na prvok. Potom tomu prvku makro zruš. A už sa volá "tbPriemer". Ja mám medzi prvkami rád poriadok, a ja chcem určovať ako sa ktorý volá, najmä ak ich je viac rovnakých.
Potom to zameníš za:
Worksheets("Sheet1").Shapes("tbPriemer").OLEFormat.Object.Text = ChrW(248) & " niečo"
Vyskúšajte reset Excelu, pri vypnutom Exceli, v Regedit premenujte kľúč:
HKEY_CURRENT_USER\Software\Microsoft\Office\15.0\Excel
na
HKEY_CURRENT_USER\Software\Microsoft\Office\15.0\Excel.old
Excel si tento kľúč vytvorí znovu "čistý".
Spustite Excel, vyskúšajte. Bez problémov to môžete vrátiť naspäť tak, že ten novovytvorený kľúč zmažete, a "Excel.old" premenujete naspäť na "Excel".
PS: To "15.0" v kľúči je Office 2013, pre 2007 bude menšie (neviem z hlavy, možno 13.0) číslo.
V podmienenom formátovaní 5ikon, nieje možné použiť relatívne odkazy, potrebné na adresáciu bunky, ktorú práme formátujeme, tak ako je to pri normálnom podmienenom formátovaní. Nejde použiť ani zástup pomocou ROW()/COLUMN() spolu s INDEX, ani Definovaný názov. Vždy to naraz ovláda celú oblasť. Preto som vymyslel nasledovný spôsob:
- Najskôr si prvý krát pripravíme podmienené formátovanie pre každú bunku zvlášť, priloženým makrom.
- Nezabudneme na potrebné úpravy rozsahov v OnChange, aj pre NewData, aj pre OldData.
- V OnChange som urobil malú fintu, aby som získal po zmene pôvodné data, a tie nakopíroval do OldData.
Funguje to tak ako popisujete. Pri zmene z oblasti, sa prenesú všetky do tej doby staré data na OldData, a "vybaví" sa pre každú bunku zvlášť formátovanie.
Áno, bol som si takmer istý, že presne tomuto nebudete rozumieť
Pole UF je pole zadaných dát od užívateľa. Tieto dáta sa potom zložia do reťazcov pre filter. Pretože asi bude jednoduchšie, ak budete mať na výber zvlášť znamienka, a hodnoty zadáte aké potrebujete. Keďže sa teda každý jednotlivý filter skladá z 2 stĺpcov (znamienko, data), ale jednotlivý filter je len 1 stĺpec, potrebujeme si vypočítať ktorá časť poľa UF (8 stĺpcov) patrí k práve spracovávanej časti filtra (4 stĺpce)
UF(y, (x - 1) * 2 + 1) vráti znamienko
UF(y, (x - 1) * 2 + 2) vráti dáta filtra
x - je vodorovná súradnica (dosaďte si čísla 1 až 4 a zistíte ako to funguje)
y - je zvislá súradnica
If x = 4 Then dat = CStr(CDbl(UF(y, (x - 1) * 2 + 2))) Else dat = UF(y, (x - 1) * 2 + 2)
Ak spracovávame dátum (X = 4) tak CDbl prevedie dátum na číslo, a CStr to číslo prevedie na string. Ak je X <> 4 tak dostaneme hodnotu rovno z UF.
FF(y, x) = IIf(IsEmpty(UF(y, (x - 1) * 2 + 1)), IIf(IsEmpty(UF(y, (x - 1) * 2 + 2)), Empty, "=" & dat), UF(y, (x - 1) * 2 + 1) & IIf(IsEmpty(UF(y, (x - 1) * 2 + 2)), Empty, dat))
FF je pole hotových reťazcov pre filter, a tie reťazce vypočítame cca takto:
JePrázdneZnamienko = IsEmpty(UF(y, (x - 1) * 2 + 1))
JePrázdneFilterData = IsEmpty(UF(y, (x - 1) * 2 + 2))
Empty = prázdna bunka/reťazec
Ak JePrázdneZnamienko=True tak
------ ak JePrázdneFilterData=True tak vráť Empty
------ ak JePrázdneFilterData=False tak vráť "=" & dat
ak JePrázdneZnamienko=False tak
------ vráť znamienko &
----------------------- ak JePrázdneFilterData=True tak Empty
----------------------- ak JePrázdneFilterData=False tak dat
To som samozrejme nedal zbrucha, ale najskôr som si pri návrhu vytvoril pomocné premenné, ktoré som po zfunkčnení, odstránil a nahradil rovno tým, čo reprezentujú. Urobil som to len kvôli o niečo kratšiemu kódu.
No a zabezpečuje to to, že aj keď nezadáte do znamienka nič ale dáta áno, vloží sa namiesto ničoho "=" + dáta. Ak zadáte znamienko, ale nezadáte dáta, vloží sa len znamienko (pre prípad testu nevyplneného údaju), ak nieje ani znamienko ani data, nevloží sa nič (Empty), ak sú oboje, vložia sa oboje spolu.
PS: Ak to bude pre Vás ľahšie pochopiteľné, tak Vám to vrátim do stavu s pomocnými premennými.
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.