Příspěvky uživatele


< návrat zpět

Strana:  1 ... « předchozí  70 71 72 73 74 75 76 77 78   další » ... 302

Problém je Key:=Range(). Tam nemôžete dávať všetky stĺpce, ale iba stĺpec A, veď podľa neho chcete radiť.
Úprava aj iných častí:
Sub Uprava_exportu()
Dim Riadkov As Integer
Dim Oblast As Range
'
'upravuje export z georga rovno do excelu
'tu sa upraví podľa potreby a toto sa prenesie do zošita môj dom xxxx
'+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

With ActiveWorkbook.ActiveSheet
'Počet obsadených riadkov
Riadkov = .Cells(.Rows.Count, 1).End(xlUp).Row - 1
If Riadkov = 0 Then MsgBox "Žiadne dáta.", vbExclamation: Exit Sub

'Prehádže a vymaže stĺpce tak, aby zodpovedali hlavičke v liste "hosp"

'Vloží hlavičku podľa hosp
.Range("A1:J1").Value = Array("Dátum", "účet", "Text z výpisu", "Názov protiúčtu z výpisu", "Protiúčet z výpisu", "VS", "Popis z výpisu", "analytika", "Užívateľ / môj popis", "")

'-------- Triedenie ------------
'od 1. do 31.
'určíme oblasť triedenia
Set Oblast = .Cells(2, 1).Resize(Riadkov, 9)

.Sort.SortFields.Clear
.Sort.SortFields.Add2 Key:=Oblast.Columns(1), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With .Sort
.SetRange Oblast '(oblast)
.Header = xlNo
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End With
'**** KUF ******************************

End Sub

1. Odstráňte maticovosť toho vzorca. To bude kameň úrazu.
Ďalej už iba poznámky:
2. Dúfam, že nezoraďujete aj list HARMONOGRAM.
3. Veľkosť súboru je daná "použitím" milióna riadkov. Stavím ľavú topánku, že toľko riadkov nepoužívate.
4. Vzorec v definovanom názve oblastVYHLEDAVANI divne používa zbytočné množstvo MATCH/POZVYHLEDAT.
5. Vzorec v A neošetruje možnosť nesprávneho zadania čísla mesiaca, treba použiť inak to IFERROR.
6. Ak má súbor použiť ktokoľvek s iným ako CZ Office, treba nahradiť
HODNOTA.NA.TEXT($D2;"RRMMDD")
za
ZPRAVA(ROK($D2);2)&HODNOTA.NA.TEXT($D2;"MMDD")
Lebo "RRMMDD" pozná iba CZ. Také SK, EN to má "YYMMDD"
7. maličká úprava PF

Žiadna príloha tu nie je. Ak je to XLSM, musíte ho zabaliť do ZIP/RAR. Ak je príliš veľká, orežte rozumne data na <300 KB (nepamätám si presne veľkostný limit).

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 5
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"?


Strana:  1 ... « předchozí  70 71 72 73 74 75 76 77 78   další » ... 302

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