No nie je priložená ...
Treba makro ukázať.
EDIT:
Ak sa jedná o nahrávku makra importu súboru (tá staršia verzia), tak tam nastáva presne popisovaná situácia. Pri nahrávaní makra to urobí OK, ale nahrané makro hodí chybu na riadku
.CommandType = 0Zmažte ho, a je po ptákách.
O koľko prvkov sa jedná? Jedná sa o čísla, písmená, slová? Ukážku máte? Môže to byť makro? Makrom som to tu robil už niekoľkokrát. Musím pohľadať ...
S údajovým pruhom je komplikácia - nemožnosť nastavenia MAX na relatívnu bunku (ani pomocou def. názvu). Teda by ste musel nastaviť pre každú bunku samostatné PF, MIN na 0 ale MAX pre každú bunku samostatne na jej adekvátnu hodnotu v C.
Normálne to funguje. Ak by som to neotestoval, napíšem, že som netestoval. Tu som to doplnil ešte o nájdenie správneho adresára k Desktop, a preskočenie prepísania pôvodného súboru "novy.xlsx", ošetrenie chyby pri rušení naplánovania (ak makro bolo ukončené, premenná sa neuchovala, a nastane chyba).
Spúšťate to cez "nacas".
Ak čas už bol, nastaví sa ďalší deň. S časovačom v Exceli ale býval často problém, že sa spúšťal aj po zatvorení Excelu. Vyskúšajte. Na skúšanie si nedávajte 18:00:00 ale nejaký bližší čas
Pridal som aj to, aby sa ukladanie anulovalo po zatvorení súboru, a naopak, aby sa automaticky nastavilo pri otvorení súboru (toto si ale aktivujte až následne, najskôr si nastavte čas ako chcete). Prípadne sa automatická aktivácia dá urobiť na msgbox s otázkou na užívateľa. Ale potom treba zase vyriešiť, ako sa to vlastne bude spúšťať...
Do modulu:
Public New_Save_Time As Date
Sub SaveSheet()
ThisWorkbook.ActiveSheet.Copy
With ActiveWorkbook
With .Worksheets(1).UsedRange
.Value = .Value
End With
.SaveAs "C:\Users\baby\Desktop\novy.xlsx"
.Close False
End With
nacas
End Sub
Sub nacas()
New_Save_Time = Date + TimeValue("18:00:00")
If New_Save_Time < Now Then New_Save_Time = New_Save_Time + 1
Application.OnTime New_Save_Time, "SaveSheet"
End Sub
Sub Cancel_Schedule()
Application.OnTime EarliestTime:=New_Save_Time, Procedure:="SaveSheet", Schedule:=False
End Sub
Do modulu Tento_zošit:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
On Error Resume Next
Cancel_Schedule
End Sub
Private Sub Workbook_Open()
' nacas
End Sub
Ale keď tam nie je dátum, tak to je asi číslo dňa 0, teda 1.1.1900. To sa asi načakáte.
Bez overenia : skúste dať Date() + TimeValue("18:00:00"), ale aj tak najskôr skontrolujte či Now() náhodou nie je väčší (teda či už 18:00 nebolo).
DTPicker ale nefunguje na x64 pokiaľ viem.
Možno by stálo za zváženie aj niečo takéto podobné:
https://trevoreyre.com/portfolio/excel-datepicker/
funguje na x64.
Set compld2 = Range("B:B").Find(What:=idsearch, After:=Range("B1"), LookIn:=xlValues, LookAt:=xlWhole, SearchDirection:=xlPrevious)
Tak len doplním ten najkomplikovanejší variant, ak sú mesiace na preskáčku vyplnené a nevyplnené, a potrebujete súčet X vyplnených od konca.
2 Definované názvy
MESIACE:
=OFFSET(Hárok1!$B$9;;;;LOOKUP(2;1/(Hárok1!$9:$9<>"");COLUMN(Hárok1!$9:$9))-1)
=POSUN(Hárok1!$B$9;;;;VYHLEDAT(2;1/(Hárok1!$9:$9<>"");SLOUPEC(Hárok1!$9:$9))-1)
SPLNENE:
=MATCH(Hárok1!$G$5;COUNTIF(OFFSET(Hárok1!$B$9;;COLUMNS(MESIACE)-COLUMN(MESIACE);;COLUMN(MESIACE)-1);"<>");0)
=POZVYHLEDAT(Hárok1!$G$5;COUNTIF(POSUN(Hárok1!$B$9;;SLOUPCE(MESIACE)-SLOUPEC(MESIACE);;SLOUPEC(MESIACE)-1);"<>");0)
no a výsledný vzorec:
=IFERROR(SUM(OFFSET(B9;;COLUMNS(MESIACE)-SPLNENE;;SPLNENE));SUM(MESIACE))
=IFERROR(SUMA(POSUN(B9;;SLOUPCE(MESIACE)-SPLNENE;;SPLNENE));SUMA(MESIACE))
Napadá ma zložitejší maticový vzorec (Ctrl+Shift+Enter), ale neviem či mobilný Excel žerie matice. Počiatočný dátum je v I1, a žiadne makro netreba:
=SUM(ISEVEN(ROW(C4:I108))*{1\1\1\1\1\1\1}*(C4:I108>=I1)*(C4:I108<DATE(YEAR(I1)+1;1;1))*ISODD(ROW(C5:I109))*{1\1\1\1\1\1\1}*(IFERROR(SEARCH("m";C5:I109);0)>0))
=SUMA(ISEVEN(ŘÁDEK(C4:I108))*{1\1\1\1\1\1\1}*(C4:I108>=I1)*(C4:I108<DATUM(ROK(I1)+1;1;1))*ISODD(ŘÁDEK(C5:I109))*{1\1\1\1\1\1\1}*(IFERROR(HLEDAT("m";C5:I109);0)>0))
EDIT:
Ale veď ono by stačilo asi iba COUNTIFS, normálne nematicovo:
=COUNTIFS(C4:I108;">="&I1;C4:I108;"<"&DATE(YEAR(I1)+1;1;1);C5:I109;"*m*")
=COUNTIFS(C4:I108;">="&I1;C4:I108;"<"&DATUM(ROK(I1)+1;1;1);C5:I109;"*m*")
=SUM(OFFSET(B9;;COUNT(9:9)-G5;;G5))
=SUMA(POSUN(B9;;POČET(9:9)-G5;;G5))
Ale buďte si v oboch prípadoch vedomý toho, že sa musí jednať o súvisle vyplnené bunky. Ak niekde bude nevyplnený mesiac, tak to bude rátať zle. V takomto prípade bude vzorec nie s použitím COUNT/POČET ale s LOOKUP/VYHLEDAT.
=SUM(OFFSET(B9;;LOOKUP(2;1/(9:9<>"");COLUMN(9:9))+1-G5;;G5))
=SUMA(POSUN(B9;;VYHLEDAT(2;1/(9:9<>"");SLOUPEC(9:9))+1-G5;;G5))
Prípadne (a to bude najzložitejšie) ak by sa mali spočítať iba vyplnené mesiace. Teda pri 3 prázdnych mesiacoch niekde v priebehu, by sa malo zrátať obdobie 15 mesiacov. Na to sa ešte pozriem, ak bude treba...
Takže ide o to, spočítať, koľko je tam buniek obsahujúcich písmeno "m"?
=SUM(OFFSET(B9;;COUNTA(8:8)-G5;;G5))
=SUMA(POSUN(B9;;POČET2(8:8)-G5;;G5))
Ovládať webový Outlook asi nepôjde. Pozrite si, či by na odosielanie vyhovovala CDO metóda (meno a heslo do mailovej schránky by bolo priamo v makre ako text !).
Paráda, funguje, ďakujem!
Človeče, kam Vy na toto chodíte ? ... To je hodnotnejšie, ako sa pýtať Googlu
Oblíbený formulář Faktura byl vylepšen a rozšířen.
Více se dočtete zde.