Ja do toho nechcem rýpať, to v žiadnom prípade, ale ak tam mal zostať aj posledný deň z predošlého mesiaca, tak u mňa teda neostane. Chybu to nehodí, ale ani posledný deň tam nieje. Je tam iba 01, teda prvý deň, čo vlastne bolo tak isto aj pred úpravami.
Mier...
Chyba je inde.
Tu je treba iba presunúť ")"
Set sh = ThisWorkbook.Sheets(Format(dDen - 1), "dd")
Set sh = ThisWorkbook.Sheets(Format(dDen - 1, "dd"))
Ale po vyplnení 31 v Júli a stlačení Ďalší deň, sa správne vytvorí nový mesiac s posledným dňom predošlého (31), ale ak dám opäť Ďalší deň, tak to stroskotá na
Set sh = Worksheets(Format(dDen - 1, "dd") & " (2)")
pri odkaze na neexistujúci list, lebo dDen má už hodnotu 2.8. List "01" tam ale nieje.
Pri prechode na nový mesiac, bude treba ako som písal, zachovať 3 listy, nie 2. (31, 01, SAKO)
To akože chcete mať po vytvorení napr. nového mesiaca Júl (Červenec), ako prvý list posledný deň z Júna (Červen) čiže 31 ? Potom budete mať vlastne 3 listy - 31,01,SAKO. Takto ? Tak to bude problém, pretože keď prídete potom na koniec Júla (Červenec), tak sa vytvorí list 31, to ale nieje možné keď už list 31 existuje (ten Júnový - Červnový). Muselo by sa napr. testovať, pri vytváraní listov, či je deň číslo 2, a vtedy ten posledný Júnový 31 zmazať. Plus iné komplikácie, spojené s náväznosťou na list 01. Možno keď bude čas a chuť ... snáď si ale eLCHa nájde ešte na Vás čas, predsalen je to najlepšie upravovať autorovi makra.
Vyskúšajte toto, urobil som to aj na D, N, očr, akurát netuším, či som trafil správne stĺpce.
Toto dajte do I3 s Ctrl+Shift+Enter. Potom nakopírujte do potrebného počtu riadkov. Ale ako vidíte bolo by potrebné nastaviť dynamickú oblasť (posledný riadok). Budete s tým vedieť pohnúť ?
=IFERROR(INDEX($C$2:$C$23&" vs. "&$D$2:$D$23;MATCH(G3;IF($B$2:$B$23=H3;$A$2:$A$23);0));"")
Urobil som Vám možnosť si zvoliť, ktoré údaje sa pri splnení podmienky budú mazať. Máte tam aj použitie funkcie COUNTA s vrátenou chybou ak je 0, dá sa to použiť napr. pri dynamickom rozbaľovacom zozname (Vaše použitie COUNTA ako som písal nepoznám).
Pozrite si toto. Upravil som Vám tam filter aj pre "všeobecné chyby (desky laser)", a nastavil automatické formátovanie orámovania pri každom riadku, v ktorom je nejaká hodnota, pre všetky 3 listy. Teda orámovanie nebude presahovať tabuľku.
Môže to byť takto ako je to teraz urobené v "opravené chyby (desky laser)" ?
Ak áno, tak Vám tak urobím aj ostatné listy, keď je treba. Stačí potom iba klik na filter v prvom stĺpci a dať zoradiť zostupne či vzostupne. Lenže predtým, je treba rozdeliť všetky zlúčené bunky. Preto Vám to nešlo.
ClearContents riadky nemaže. Maže iba obsah. Budete mať "deravú" tabuľku. Tam kde používate to COUNTA() dajte napr.
=IF(COUNTA(A3:A978)=0;ERF(;);COUNTA(A3:A978))
a vráti Vám to chybu #NEDOSTUPNÝ, a nie A2:A2. Alebo proste iba testujte 0. Neviem aké máte presne použitie toho COUNTA, čo robíte s výsledkom ďalej...
Tú chybu na vyššie spomínanom riadku spôsobuje to, že ak si zmením dátum napr. na dnešný, že chcem začínať od dnes, tak treba zmeniť aj názov listu na číslo dnešného dňa, inak vzniká odkaz na neexistujúci list. Potom už to ide ako ste zamýšľal. Ešte by som tam ale doplnil uloženie nového xlsx po jeho vyplnení, nielen jeho otvorenie. A uloženie iba dát, bez vzorcov, ak bude ten súbor napr. poslaný mailom, bez Master súboru, dostane otravnú hlášku o prepojení.
Ale Vy ste ani nespomínal, že chcete kopírovať aj makrá. Vy ste spomínal, že chcete vytvoriť z dát, ktoré máte v 0.xlsm, výber určitých dát, a tento výber potom uložiť v novom zošite 1.xlsx. Netuším načo by tam mali byť makrá. Vy predsa ukladáte hotový plán, hotový zošit, bez tlačítok, teda aj bez makier.
Ten skrytý list je iba ako forma-vzor. do nového zošitu sa nakopíruje, ale nie skrytý, ani žiadny iný skrytý tam nieje.
Ja som Vás pochopil tak, že tam majú byť už len vypočítané dáta, čiže už aj bez vzorcov, že je to do prevádzky, zákazníkovi, proste niekam ako finálny zošit.
Prípadne ešte upresnite.
Kolega ma predbehol. Ale dám aj svoje riešenie.
EDIT: Pozerám, že Vy ste riešil a kopec ďalších vecí, ktoré dotyčný ešte ani nespomenul, super.
Havaruje mi to na tomto riadku
rBunka.Formula = Replace(rBunka.Formula, "01'!", Format(dDen, "dd") & "'!")
Pravá časť je OK, a priradenie vzorca píše Applicatio-defined or Object-defined Error. To nechápem.
Inak tú kópiu sme urobili veľmi podobne :)
Áno poznám, najskôr som mu ju tam chcel dať, naschvál som mu tam dal jeho vzorec, a ešte som zdôraznil použitie tohto vzorca, a čakám na reakciu, aby som sa mohol opýtať, ako presne má ten prepočet fungovať. Či je to takto správne, lebo rozdiel napr. 10 dní vyhodnotí ako 0, ak je to v jednom mesiaci, a ako 1 ak je to na prelome. Neviem ako sa to má v jeho obore počítať.
Stačí v makre zmeniť priradenie do poľa na:
DateDiff("m", PoleD(i, 1), Dnes)
Opäť a zasa netušíme o čo ide, ale ak len o hromadné prepočítanie v nejakom stĺpci pomocou makra s použitím Vášho vzorca, tak toto vypočíta výsledok celého stĺpca C a vloží do D počet mesiacov. Neviem ale, či to bude rýchlejšie, ako keby ste tam mali vzorce. Vyskúšajte.
Sub Meciacov()
Dim PoleD(), PoleM() As Integer, i As Long, MM As Integer, Dnes As Date, R As Long
With ThisWorkbook.Worksheets("Hárok1")
Dnes = .Cells(2, 12)
R = .Cells(.Rows.Count, "C").End(xlUp).Row - 1
PoleD = .Cells(2, 3).Resize(R).Value
ReDim PoleM(1 To UBound(PoleD))
For i = LBound(PoleD) To UBound(PoleD)
PoleM(i) = (Year(Dnes) - Year(PoleD(i, 1))) * 12 + Month(Dnes) - Month(PoleD(i, 1))
Next i
.Cells(2, 4).Resize(R).Value = Application.Transpose(PoleM)
End With
End Sub
Nech sa páči. Máte tam aj kontrolu, aby sa nevypisovala chyba, ak sa hodnota nenájde, aby sa nevypisovala 0 ak je bunka v List3 prázdna, a aby sa nekontrolovalo, ak je v List1 v B nevyplnený údaj.
Opravil som Vám aj nezmyselné vzorce na spočítanie oblasti v riadku 36 a v bunkách N40 a N41.
Snáď OK.
EIDT: PS: Treba si ešte upraviť/opraviť orámovanie buniek v stĺpcoch A,B,C. Neviem, či ste to zamýšľal takto.
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.