@kp57
...a to som pritom bol sám k riešeniu tak blízko . Presne ako píšeš, díky moc. Funguje to:Private Sub Workbook_AfterSave(ByVal Success As Boolean)
Sheet1.Visible = xlSheetVisible
End Sub
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Sheet1.Visible = xlSheetVeryHidden
End Sub
@Paloo:teraz ma napadlo ked sa makro bude nachadzat v tom subore tak nebude pokracovat
To som si tiež myslel, ale urobil som pokus:
1. V evente BeforeClose nastavím listy ako skyté. Zároveň je v ňom inštrukcia, že má uložiť zmeny.
2. Z eventu AfterSave volám cez Application.Ontime s odkladom 15 sekúnd makro (v tom samom súbore), ktoré znovu nastavuje dané listy ako viditeľné.
Súbor som manuálne uložil a hneď zavrel. 15 sekúnd rozhodne neuplynulo. Na moje prekvapenie sa súbor po 15 sekundách otvoril - Excel počkal 15 sekúnd a spustil makro z medzitým už zavretého súboru...
Add in pre tento prípad nechcem, mám na to dobré dôvody.
@marjankaj: tak, ako píšeš, to samozrejme ide. Má to ale háčik: chcel som, aby listy zostali po uložení viditeľné.
Ide o to, že potrebujem užívateľa donútiť povoliť makrá a sprístupniť listy len v prípade, že makrá sú povolené (súbor bude umiestnený na zdieľanom disku a budú k nemu mať prístup rôzni užívatelia). Pokiaľ to urobím cez BeforeSave, tak sa listy skryjú i vtedy, keď si užívateľ bude priebežne ukladať rozpracovanú prácu, súbor teda nechce zavrieť.
Nakoniec som ale použil BeforeSave a do kódu pridal inštrukciu, ktorá zobrazí tlačítko s makrom, ktoré umožní opätovné zobrazenie listov skrytých počas udalosti BeforeSave. Po kliknutí na tlačítko sa zobrazia dané listy a tlačítko samotné sa skryje. Užívateľ teda bude musieť občas kliknúť na tlačítko, nie som z riešenia úplne happy, ale na nič lepšie som neprišiel
Márne sa trápim s riešením problému:
1. Užívateľ chce ukončiť prácu so súborom a tento zavrie.
2. Potrebujem, aby napriek tomu, že užívateľ sa rozhodne neukládať zmeny, došlo k tomu, aby sa niektoré listy v súbore skryli a zostali skryté, t.j. súbor bol uložený pre ďalšie použitie so skrytými listami ale bez iných zmien, ktoré užívateľ uložiť nechcel...
Inými slovami:
Pri zavretí súboru pri ukladaní zmien má Excel postupovať podľa toho, čo mu užívateľ určí v dialógovom okne (Uložiť zmeny Áno/Nie) ovšem s tým, že listy 1,2 a 3 sa majú skryť a toto nie je dovolené užívateľovi meniť.
Tuší niekto, či je toto riešiteľné?
@Ondry:ale některé ty vaše excel soubory byly teda taky dost překombinovné takže jsem v tom měl spíš větší guláš :)
Inými slovami, rozumieš tomu zrejme lepšie než tí, od ktorých čakáš radu a ktorí ti poradili, však? Nič si z toho nerob, nie si jediný, kto má tento dojem a ľudia, ktorí tu pravidelne pomáhajú ostatným, vlastne nič nevedia
@lubo: alebo tak
@snow
obrázok je fajn, ale vzorový súbor by bol predsa len lepší. Pokusný som teda vytvoril za teba . V mojom príklade je zoradenie položiek v grafe závislé na ich radení v zdrojovej tabuľke. Predpokladám, že u teba by to malo fungovať obdobne, ale jasnovidec fakt nie som a bez vzorového súboru môžem naozaj, podobne ako ostatní, iba hádať.
lubo, ďakujem
@Lubo
Áno, WorksheetFuction, ktorej členom je Match, može byť buď Class alebo Application.Property, v oboch prípadoch ale na vrchole hierarchie stojí Application. To ma vedie, asi teda k chybnému záveru, že je to to isté. V čom je teda rozdiel?
@eLCHa
však ja viem, nie vždy si ale hneď poskladám jednotlivé časti mozajky
@eLCHa
btw, hranaté zátvorky: pred chvíľou som si uvedomil, že fungujú ako Evaluate, takže Evaluate vlastne používam skoro stále, akurát mi nedocvaklo, že sa dajú použiť i pre vyhodnotenie maticového vzorca v kóde. Dá sa potom teda napísať i ako:a=[sum(1/countif(A1:A4,A1:A4))]
@eLCHa
Ďakujem za tip k locals, to som tiež, ku svojej škode, nepoužíval a po Vašom upozornení určite začnem. Ja samozrejme Vaše príspevky v rámci možností študujem, páč patria k tým najlepším na tunajšom fóre. Pokiaľ ale cielene hľadám riešenie nejakého akútneho problému, tak naďalej víťazí ako prvá voľba spomedzi internetových zdrojov google. Toľko k vysvetleniu Evaluate. Áno, uvedomujem si, že Evaluate občas zmieňujete, ale pokiaľ to človek zrovna nepotrebuje použiť, tak mu síce mysľou prebehne "jj to je užitočné", ale časom táto informácia v pamäti zapadne.
@Opičák:
bude to zrejme tak, ako popisuješ
No, tak som nakoniec zistil i to, ako sa dá spočítať počet unikátnych hodnôt v oblasti za použitia maticového vzorca priamo vo VBA bez zápisu do pomocnej bunky (holt, stále je čo sa učiť, akurát, že toto asi bude závislé od lokalizácie):Sub test()
Dim a As Byte, b As Byte
a = Evaluate("SumProduct(1 / CountIf(pom, pom))")
b = Evaluate("SUM(1/COUNTIF(A1:A4,A1:A4))")
MsgBox a
MsgBox b
End Sub
Ale jo, rýchlosť behu kódu je bezpochyby jeden z dôležitých faktorov, pokiaľ má jeden čas toto riešiť . Inak ale, niet div, že WorksheetFunction.Match je na tom s rychlostí stejně jako Application.Match., páč je to, aspoň myslím, to samé
Aha, už chápem. To pri použití For each - Next bez pomocnej premennej zistiť asi nepôjde
Nerozumiem, o čo sa pokúšaš. Skúsil by si to vysvetliť inak?
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.