Příspěvky uživatele


< návrat zpět

Strana:  1 ... « předchozí  213 214 215 216 217 218 219 220 221   další » ... 289

Môžete použiť aj následujúci postup:
1. na koniec makra pridajte
Sub VlozRadek(SH As String)
Dim H(), R As Long, i As Long, MIN As Date, DNES As Date
With Worksheets(SH)
R = .Cells(.Rows.Count, 7).End(xlUp).Row
If R > 1 Then
H = .Cells(2, 7).Resize(R - 1).Value
DNES = Date: MIN = DateSerial(9999, 9, 9)
For i = 1 To UBound(H, 1)
If H(i, 1) > DNES And H(i, 1) < MIN Then MIN = H(i, 1): R = i
Next i
If Year(MIN) <> 9999 Then
.Rows(R + 1).Insert
End If
End If
End With
End Sub


2. Na miestach v kóde, kde chcete vyvolať prehľadanie stĺpca G v práve aktívnom liste, a nájsť najbližší dátum väčší ako DNES a pred neho vložiť riadok (máte to tam tuším na 4 miestach), tak tam dajte
Call VlozRadek(ActiveSheet.Name) 'Meno listu na ktorom sa má vyhľadávať dátum a vkladať riadok


Ale ešte raz vravím, že implementácia čohokoľvek do takéhoto makra plného Selectov, kde nič nieje isté ani len názov listu, či pozícia dátumov, a nevieme o štruktúre nič, napr. či je to tabuľka alebo Tabuľka (ListObject), od ktorého po ktorý riadok sú dátumy, či má tabuľka hlavičky ... je obtiažne. Toto čo Vám popisujem funguje aj na nezotriedených dátumoch, a počíta to s hlavičkou tabuľky na 1. riadku, a s dátumami začínajúcimi na 2. riadku, a s tým, že pod tabuľkou s dátumami v stĺpci G nie sú ďalšie/iné dáta, a že dátumy sú vždy v stĺpci G.

Dosť veľké makro to teda je. A zbytočne. Žiaľ nemám na to čas, ani chuť (a ani by sa to bez reálneho súboru nedalo) Vám celých 1826 riadkov kódu prerobiť, tak iba upozorním na to, aby ste si v budúcnosti pozreli nejaké hotové projekty napr tu na fóre, a zistíte, že neustále .Select, .Activate, Selection, ActiveSheet nemusíte používať. Je to veľmi pomalé. Na list môžete pristupovať aj bez toho, aby ste si ho najskôr Selectli alebo Activovali...
Aby ste si to upravili, tak to Vás čaká naozaj hromada práce. Trošku si pozisťujte ako sa pristupuje na iný list. Každý si najskôr nahrá makro, a nevie si ho upraviť, ale časom sa do toho dostanete.

Tumad napsal/a:

... Potreboval bych automaticky dostat email, pokud by se v Office prekrocila dana hodnota.
...


Konkrétna aplikácia odosielania záleží na konkrétnych okolnostiach, ktoré my ale nevieme. Či sa to bude diať na základe bunky zmenenej užívateľom, alebo na základe hodnoty zmenenej vzorcom, alebo na princípe časovanej kontroly, napr. každú 1 min, ... a pod.

Trpezlivosť je jedna vec, ale to že je to úplne zbytočné, je vec druhá. Ak totiž nechcete aby Vám to zisťovalo a vypísalo iba jedinečné hodnoty z celého zošitu, ale chcete si ich tam pridať sám aj kvôli tomu, aby tam boli aj hodnoty, ktoré sa možno nevyskytnú nikdy (napr. kvôli tomu aby bolo vidieť, ktoré sa nepoužili ... neviem), tak makro absolútne stráca zmysel. Ale aby ste nepovedal, že Vám nechcem popísať svoje makro, tak som Vám to popísal, najlepšie ako viem (najlepšie ako sa mi chce :) ), len preto aby ste zo zaujímavosti vedel ako funguje.

Zo začiatku som nechápal, prečo chcete aktualizovať iba niektorý list samostatne, ale teraz už viem, že ste len zle vyjadril to, že nechcete aby došlo k chybe ak tam niektorý list nebude.

Každopádne tu máte príklad na vzorcové riešenie, ktoré Vám odporúčal už eLCHa, len som ho trošku upravil. Zohľadňuje podmienku, že ak je v stĺpci G=9 tak sa nepočíta, a celé je to v INDIRECT/NEPŘÍMÝ.ODKAZ aby sa vzorec neprepísal na chybu #ODKAZ! keď mu bude chýbať list. A kvôli jednoduchosti zisťovania počtu riadkov si zmente tabuľky na Tabuľky. Pritom pri postupnom dopĺňaní mesiacov dbajte na to, aby vzorce odkazovali na správny názov Tabuľky. Ja som ich nazval
Tabulka01
Tabulka02
Tabulka03
....
A tak sú aj použité vo vzorcoch. Excel Vám ich tak pekne číslovať nebude.
Ďalej si dajte pozor na názvy stĺpcov, teraz sa Vám volajú "g" a "h", tak sa Vám ale v reále volať určite nebudú, a preto je nutné si podľa toho reálneho názvu upraviť vzorce v stĺpci B v Četnost
=IFERROR(COUNTIFS(INDIRECT("Tabulka01[[g]:[g]]");"<>9";INDIRECT("Tabulka01[[h]:[h]]");"*"&B$1&"*");"")
=CHYBHODN(COUNTIFS(NEPŘÍMÝ.ODKAZ("Tabulka01[[g]:[g]]");"<>9";NEPŘÍMÝ.ODKAZ("Tabulka01[[h]:[h]]");"*"&B$1&"*");"")

kde za
[g]:[g] a [h]:[h]
napíšte reálne názvy stĺpcov (hlavičky Tabuľky). Napr. :
[Kód]:[Kód] a [Šarže]:[Šarže]

POZOR: Tým, že je to v INDIRECT (vyššie spomenutý dôvod), tak Vám Excel žiadne automatické premenovanie Tabuliek či Hlavičiek vo vzorcoch neurobí !

Teda konečné odporúčanie:
(toto urobíte iba raz)
-Použite vzorcovú metódu, alias eLCHa.
-Nahodte si reálnu Tabuľku v listoch ktoré tam chcete mať (asi 01-05), s reálnym umiestnením a reálnymi Hlavičkami, reálnymi dátami.
-Zmente si vzorce v B2:B13 v liste Četnost.

(toto urobíte raz za rok)
- Vyplnte si možné hodnoty B1:XYZ1
- Roztiahnite si vzorce z B2:B13 potiahnutím na toľko stĺpcov doprava, koľko je pre daný rok hodnôt. Kludne si hodnotu doplnte ak treba, len si k nej pretiahnete vzorce zo všetkých riadkov.

(toto urobíte raz za mesiac)
- Vytvorte list, odznova, alebo kopírovaním
- Upravte v danom mesiaci, názov Tabuľky, aby korešpondoval s názvom Tabuľky vo vzorci v danom riadku podľa mesiaca. Teda ak vytvoríte Tabuľka14, zmente to na Tabulka06 (v prípade júna/června)

To je odo mňa všetko...

GeorgeK napsal/a:

"...výpočet proběhne JEN pro ten daný měsíc..."

To je logický nezmysel. Vy máte spoločnú tabuľku četností všetkých listov. Spoločnú tabuľku so spoločným zoznamom jedinečných hodnôt zo VŠETKÝCH listov ! A do tejto vkladáte výsledok četnosti. Nemôžete to len tak nastaviť aktuálne podľa jedného listu. Čo ak ten nebude obsahovať hodnotu, ktorá ale v niektorom inom liste je ? Čo ak bude obsahovať hodnotu, ktorá inde nieje, posunú sa ostatné (teda ďalšie zoraďovanie, alebo sa pridá na koniec (doprava). Takže kontrolovať neustále jedinečný zoznam hodnôt daného listu s jedinečným zoznamom všetkých listov doteraz, vytvoriť z toho tretí jedinečný zoznam, ktorý bude slúžiť pre četnost ? A to treba pri zmene poradia jedinečných hodnôt, myslieť na to, že nechcete aktualizovať iné hodnoty četnosti, okrem daného listu, teda treba posúvať doterajšie hodnoty četností iných listov, na pozíciu, na ktorej sa práve nachádza daná hodnota počas zoraďovania. Čo ak to náhodou spustíte na nevyplnenom H stĺpci, zoznam jedinečných hodnôt bude prázdny, čo potom, zmaže celú tabuľku ? ...
Priveľké množstvo nelogickostí, ktorých riešením sa mi nechce tráviť deň. ... a to som ani nedomýšľal do konca.

Napíšte prosím, prečo je problém, že sa to automaticky aktualizuje pre všetky listy naraz napr. pri aktivácii listu "Četnost".

Mne by to vyhovovalo asi takto:

No tak si dajte do "Měsíční rozdíl" do prvej bunky podmienku
=IF(D28="";"";D28-B28)
=KDYŽ(D28="";"";D28-B28)

A rorkopírujte ťahaním vzorec až dole.
Adekvátne si to urobte aj v ostatných stĺpcoch, akurát to "D28-B28" zamente za výpočet aký tam máte.

Tie dáta v H je pekná prasárna. Raz sú tam medzery, raz nie, raz vbLf, raz vbCrLf. Tieto dáta musia byť ako TEXT, lebo sa môže stať, že Vám to Excel interpretuje ako dátum.
Tu máte jedno komplikované riešenie komplet cez VBA aj s jedinečnými hodnotami, zoradením a výpisom výsledku.

Ten vzorec od eLCHa je krásny - jednoduchý. Dúfam, že len kvôli zle zadaným dátam v H mi dáva na liste 05 pri "3.1.1" počet 23, a makro dá 22. Ak je to kvôli niečomu inému, tak mám chybu v kóde. Inak kód trvá zlomok sekundy.

Rozšírený filter ???

To bez prílohy dobre optimalizovať nepôjde.
Ide o to či nemôžete použiť na vyhľadávanie posledného riadku jeden stĺpec v ktorom viete že sú vždy dáta, takto prehľadávate všetko. Ďalej či sa dajú použiť polia (či ide o súvislé oblasti). Ďalej ide o zbytočnosti ako
If Not Intersect(Cells(2, 2), Range("B:B")) Is Nothing Then
To Vám nedá nikdy nič iné ako True, je to totiž bez premennej.
Alebo
Workbooks(wrkb_act).Activate
Pri prenášaní zo zošitu do zošitu nemusíte prepínať okná, zadefinujte si premenné
WBZdroj a WBCiel a odkazujte rovno na ne.
Ďalej použite na začiatku makra
Application.ScreenUpdating = False
a na konci
Application.ScreenUpdating = True
Prečo vôbec voláte "Uloz_Data" ? Veď to zapisujte rovno.
Na začiatku
Call Uloz_Data(i, "D", value)
...

Zapíšte to naraz v poli, napr. (teraz iba zbrucha) :
WBCiel.Cells(i,4).Resize(,4)=Array("#NENÍ_K_DISPOZICI","#NENÍ_K_DISPOZICI","#NENÍ_K_DISPOZICI","#NENÍ_K_DISPOZICI")
a do stĺpca S samostatne.
...
...
...

Ach tá bodka (pred "cbNazev")...
Dnes robím 3 veci naraz, a štvrtá je na ceste. Aj tak to vyzerá.
Sub NaplnCombo()
Dim a()
With ThisWorkbook.Worksheets("Pokus")
a = .Cells(1, 6).Resize(3, 2).Value
With .Shapes("cbNazov").OLEFormat.Object.Object
.Clear
.List = a
End With
End With
End Sub

Sub NaplnCombo2()
Dim a()
With ThisWorkbook.Worksheets("Pokus")
a = .Cells(1, 6).Resize(3, 2).Value
With .cbNazov
.Clear
.List = a
End With
End With
End Sub

Ďakujem, fungujú obe.

Už som na to prišiel, je potreba
ActiveSheet.Shapes("ComboBox1").OLEFormat.Object.Object
ja som to skúšal o jedno ".Object" menej, preto to nešlo :)

Aj tak ďakujem.

PS: a dá sa potom urobiť aj
.List = arr 'pole

Napr.

EDIT: Aha, beriem späť, také jednoduché to nieje. Je tam pár ďalších podmienok, ako krásne ukazuje
článok
postovaný uživateľom pidlla na
inom fóre

Zdravím Vás.

Prosím Vás, už sa tu trápim, ide vôbec naplniť dvojstĺpcový ActiveX ComboBox na liste (nie na formulári), hodnotami napevno makrom ? Bez ListFillRange, bez akejkoľvek oblasti, proste z poľa hodnôt.

.AddItem xxx - nepozná
.List = Array - nepozná

Ďakujem.

Tak skúste
Workbooks.Open Filename:="C:\Users\......xlsx", Updatelinks:=0


Strana:  1 ... « předchozí  213 214 215 216 217 218 219 220 221   další » ... 289

Uživatelské menu

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

Menu

On-line nástroje

Formulář Faktura

Formulář Faktura IV

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

Aktivní diskuse

Tlac 2 roznych tabuliek

loksik.lubos • 17.7. 20:43

Týden v roce

Petr92 • 16.7. 15:34

Řazení podle času v kategoriích

veny • 16.7. 11:34

špatný výpočet ze zisku - příčina?

Anonym • 12.7. 22:56

špatný výpočet ze zisku - příčina?

Jakoby • 12.7. 12:35

Řazení podle času v kategoriích

Marekh • 12.7. 9:55

Porovnávací Tabulka

Jess • 8.7. 20:49