Příspěvky uživatele


< návrat zpět

Strana:  1 ... « předchozí  260 261 262 263 264 265 266 267 268   další » ... 300

Fúúha, tak teraz Vám už nerozumiem vôbec. Z tohoto makra chcete volať nejaké iné makro ? Stačí do kódu na vhodné miesto (podľa toho čo to má robiť) napr. pred "End Sub" v prípade, že sa má vykonať vždy pri zmene (akejkoľvek):
Call NazovMakra
Ak sa to má vykonať iba vtedy keď sa mažú rie riadky, tak pred "Application.EnableEvents = True" to Call dajte.

Ak má tento proces vymazávania byť volaný z iného makra, tak bude lepšie prerobiť toto makro na proceduru a nie udalosť, a volať procedúru z Vašeho makra.

Nieje problém, len sa musíte vyjadrovať podstatne konkrétnejšie, a urobíme...

Zrovna ste písal príspevky, keď som editoval môj 1
Nie. Excel sníma rôzne udalosti. A vo Vašom kóde sa sníma udalosť akejkoľvek zmeny v bunkách celého listu. Ak teda čokoľvek, kdekoľvek zmeníte, vyvolá sa Váš kód, ktorý skontroluje, či bola zmena v stĺpci 4. Ak nie, nič sa neudeje, ale ak ńo, skontroluje či ste nemenili náhodou hlavičku, vtedy tiež nič neurobí. Ale ak ste vykonali zmenu v D od 2. riadku pokiaľkoľvek, tak zistí koľko riadkov v celom liste vo všetkých stĺpcoch je použitých, ďalej zistí posledný zaplnený riadok v D, a jednoducho vymaže všetko za posledný zaplneným v D. Makro sa spúšťa automaticky samo.

EDIT: Aha, Vám nejde do hlavy, prečo tam boli tie riadky, keď ste súbor otvoril ? No preto aby ste videl, čo to urobí. Stačí proste napr. označiť prázdnu bunku a stlačiť DELETE. Čáry-máry-fuk, a je to.

Ten môj kód funguje presne tak ako chcete. Skúšali ste ho vôbec ? Ja som ho iba skopíroval do Vašeho zošitu, a fachá.
Navyše som Vám ho teraz aj okomentoval, aby ste vedeli, čo to robí.

EDIT:
urobte nejakú zmenu v stĺpci 4 (D), napr. vymažte bunku, a uvidíte, že to funguje. Reaguje to na zmenu v stĺpci D, teda Vy makro nespúšťate, ono to je "autonómne".

To bol čistý tip, nič viac. Záleží na toľkých veciach, ktoré neboli v spomenuté zadaní ...
-Bude to sieťový súbor, ktorý musí byť stále aktuálny?
-Bude zatvorený, či otvorený?
-Ako často musí prebiehať aktualizácia zoznamu (ak sa nejedná o prvý bod)?
-Akú udalosť prípadne použiť? Záleží na presnom použití, tak ako píše eLCHa.
-Ak by sa nejednalo o bod 1, tak môže byť aj ten TXT s importom pri otvorení zoznamového zošitu, ale problém bude ak sa na ten zoznamový zošit bude naväzovať iná činnosť, napr čítanie z tohto zošita (zatvoreného) ďalej.
...

No uvidíme po upresnení.

No veď práve o tom hovorím. Len som napísal, že som asi pochopil čo dotyčný chce. Ale netuším ako to urobiť, preto som napísal že to bude problém...

Musí sa vytvoriť nová inštancia Excelu a v nej manipulovať so Zoznamovým súborom, inak ma nenapadá. Takéto riešenie je tu myslím už X-krát prezentované.

Ja som to asi pochopil.
-V šablóne bude makro (ak je to možné) Worksheet_Change pre sledovanú oblasť.
-Každú zmenu zapíše do iného zatvoreného zošitu na prvý prázdny riadok listu Spolu.
-V tomto zatvorenom zošite bude v druhom liste Zoznam, vytriedenie jedinečných hodnôt z listu Spolu.
-Čiže keď ho otvoríme, budeme mať k dispozícii zoznam.
-A je to tu, problém zisťovania počtu riadkov v zatvorenom zošite, zapisovanie množstva zápisov do zatvoreného zošitu...

Bude to problematické...

Pre niečo takéto je dôležité vedieť, či bude mať tabuľka hlavičky, alebo koľko riadkov bude pred samotným prvým dátovým riadkom.

- Budú dáta v tabuľke začínať v A1 ? Ak nie, tak kde ?
- Pod posledným riadkom tabuľky bude ešte niečo iné ? Čiže aj vedľa tabuľky či niečo bude presahovať smerom dole posledný riadok tabuľky.
- V ktorom stĺpci teda má byť kontrola posledného dátového riadku, najskôr ste vravel 4. teraz 3. ?

Poprosím odpovedať na všetko, lebo je to dôležité pre určovanie pozície.

Skúste vymazať to X uvidíte, čo sa udeje, či je to to, čo ste chcel.

-Otvoríte si zošit
-Stlačte ľavý Alt+F11
-Rozplusknite si položku VBAProject(názov Vašeho zošitu)
-Rozplusknite si pod tým Microsoft Excel Objects
-Dvojklik na názov listu, v ktorom to chcete mať.
-Do toho bieleho okna vpravo píšete makro kód, tak tam to vložte.

Takto to môže byť?

V udalosti Workbook_SheetCalculate vymažte podmienku
If Sh.Name <> "sheet1" And Sh.Name <> "Indices" Then
End If


Nechajte tam iba 2x Call

@:S vytváraním txt súbormi to nemá nič spoločné.
Ale môže mať. Ešte raz skúsim preformulovať otázku. Vidíte sám, že je volanie/nevolanie, udalosti/neudalosti, vyvolané/nevyvolané, nieje je úplne jasné čo z aktualizáce dát vyvolá akú udalosť (alebo nevyvolá), tak sa pýtam:
Tú kontrolu, či sa má zapísať TXT, potrebujete robiť v takých intervaloch ako kopírujete tie dáta ? Ak áno, tak potom jednoznačne urobiť všetko práve v tomto časovači, pretože, ten sa spustí s istotou každých 30 min. A nemusíte sa spoliehať, či nejaká aktualizácia vyvolá prepočet vzorca pri zmenenej alebo nezmenenej novej hodnote, alebo zmenu v inom naviazanom, ale nezobrazenom liste...

EDIT:
Ešte poznámka, procedúru Recalc je potrebné zmeniť na
Sub Recalc()
With ThisWorkbook.Worksheets("sheet1")
.Range("G25:G52").Value = .Range("F25:F52").Value
End With
Call StartTime
End Sub

Inak skolabuje, ak budete prepnutý náhodou v inom zošite práve v momente "Ticku".

Ešte poprosím nejaké upresnenie:

-Takže každých 30 minút "tikne" Timer, prebehne procedúra Recalc, ktorá skopíruje Realtime data z počítaného stĺpca F25:F52 do G25:G52, pre ďalšie spracovanie. To má vyvolať udalosť (či už Worksheet_Change alebo Worksheet_Calculate) a v v nej sa má skontrolovať či v liste je hodnota 3 v G4 alebo -3 v G5. V ktorom liste ? Vo všetkých listoch okrem "sheet1" a "Indices" ? Takto to mám teraz urobené cez Calculate (stačí jedno, netreba pre každý list zvlášť).

-Ak vo všetkých, tak vidím ďalší problém v tom, že ak bude v G4=3 na liste "AUDCAD", tak sa uloží TXT, ak bude ale G4=3 aj na inom liste napr. "AUDCHF", opäť sa uloží TXT,a predošlý záznam z "AUDCAD" prepíše. Takže bude lepšie buď pre každý list mať vlastný TXT súbor, alebo jeden TXT súbor, do ktorého sa budú pridávať riadky (s identifikátorom listu, ktorý záznam vyvolal).

-A ešte sa vrátim k vyvolanej udalosti. Nevieme akým spôsobom tá Vaša aplikácia vkladá tie aktualizované údaje do Excelu, ale ak pri tom vypína EnableEvents, tak to nevyvolá Worksheet_Change udalosť. Udalosť Worksheets_Calculate by to ale po dokončení tak či tak vyvolať malo. A tu vidím ďalší zádrhel. Neviem ako často sa Vám tie "RealTime" dáta vkladajú, ale v takomto prípade po každom aktualizovaní vyvolajú Calculate, čiže aj prípadný zápis do TXT. Ak chcete ale prípadný zápis do TXT realizovať práve až v 30 min intervaloch, potom by bolo vhodnejšie volať kontrolu a zápis priamo v Recalc.

-Navyše, ak bola pri minulej kontrole v G4 3, a pri ďalšej tiež 3 (čiže sa hodnota nezmenila) tak sa mi Calculate nespustí. Takže by som to opäť riešil poslednou vetou predošlého bodu.

Rozpracovaný súbor.
http://uloz.to/x9p2n6xY/db-alerts-auto-rar

Vidím tam veľké množstvo problémov a nejasností.
-Popis úplne iný, Váš kód úplne iný
-Ktorý list bude ActiveSheet keď sa má daná operácia vykonať? V tomto prípade bude lepšie odkazovať na meno listu, nie na ActiveSheet.
-Čo ak nastane v G4=3 v G5=-3 ? O tom, že G4 bola "3" a vytvoril sa súbor nebudete vedieť, lebo ho prepíšu data z iného riadku počas spracovania "-3".
-Set ws = ActiveWorkbook.ActiveSheet, je úplne zbytočný, keď sa aj tak ďalej odkazujete na ActiveSheet a nie na ten ws.
-Recalc() berie z ktorého listu data na kopírovanie ? Nesmiete to odkazovať v procedúre z Modulu iba cez Range. Už dupľom nie, ak je volaná cez časovač, čiže neviete na ktorom liste budete prekliknutý.
-Ak to hodíte do Calculate, tak dostanete chybu práve na tom spomínanom ActiveSheet. Predpoklad je taký, že tú Calculate vyvolá vzorec, ktorý je v G4 a G5 na liste "List1", odkiaľ sa majú aj brať data na uloženie (???). Keď to zmením na Calculate a ActiveSheet zmením na Sheets("List1") tak to fachá.

Proste veľa vecí, ktoré musíte upresniť.

Podľa mňa kódy sa líšia iba v "spájaní" do stringu (Join vs. For). Ostatné je rovnaké. Testovanie hodnoty cez Cell a Range je to isté. Ak by Vám tie RealTime data náhodou nevyvolali Worksheet_Change metódu, tak skúste použiť Calculate metódu.

Neskúmal som Váš ostatný kód, ani celý zošit. Doplnil som Vám len do List1 makro, ktoré urobí to čo chcete.
http://uloz.to/x4cmpuZa/dashboard-2-xlsm


Strana:  1 ... « předchozí  260 261 262 263 264 265 266 267 268   další » ... 300

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