Hromadnou korespondenci jsem dělal naposledy tak před 8i lety,ještě snad v office 2000. Takže jsem si to musel proklikat a určitě jsem za tu chvíli nepřišel na všechno.
Takže budu trochu spekulovat:
Rozhodně jsem nepřišel na to, jestli se dá specifikovat typ sloupce. Vy máte ve sloupci cislo na začátky položky, které jsou číselné a proto tipuji, že se pracuje se vším jako s číslem. A potom "logicky", když program narazí na textovou hodnotu (117,118A nebo 307, 308 - ale 412,413 je třeba číslo, protože nemáte mezeru za čárkou) neví co s tím a hodí Vám 0. Ty setiny mi to neudělalo, ale je to problém související s excelem a desetinnými čísly.
Jednoduše to vyřešíte tak, že všechny hodnoty ve sloupci převedete na text.
Jestli to jde vyřešit nějak systematicky (např. nastavení toho typu pole na text, aby s tím tak pracoval a nemuselo se to převádět) to nevím a zase to x let nepoužiju. Takže by měl odpovědět někdo, kdo pracuje denně s wordem
Když do buňky normálně něco vepisuji, tak se v podstatě změna nedá provést bez toho, abych ji pak opustil (ať šipkou nebo Enterem).
Toto samozřejmě není pravda - chování kurzoru po stisku klávesy ENTER je nastavitelné a já např. mám standardně nastaveno, že kurzor zůstává na změněné buňce. Pokud se chci někam pohnout, použiju občas šipky, ale většinou TAB.
a da sa aj nejako zistit ci subor uz bol ulozeny? nech nerobim zalohu z ulozeneho....
Ano dá - pokud je hodnotaThisWorkbook.Saved = FalseV tomto případě se spustí událost BeforeSave.
Pokud víte už při otevírání sešitu, že změny chcete uložit, otevřete ho pro zápis, pokud nebudete ukládat, pro čtení. Dá se nastavit, aby se Vás excel při každém otevření sešitu ptal, jestli jej chcete otevřít pouze pro čtení.
Potom v události BeforeClose zjistíte, zda je pouze pro čtení a uložíte pomocí SaveAs.
Pan Pecháček měl na svých stránkách excelplus.net následující řešení, není třeba žádných událostí ani OnTime, stačí status bar:
Na panelu nástrojů Toolbox klepneme pravým tlačítkem myši, zvolíme Additional Controls a najdeme prvek Microsoft StatusBar Control, version 6.0. Ten přidáme na plochu formuláře a doplníme kód:
Private Sub UserForm_Initialize()
'datum
StatusBar1.Panels(1).Style = sbrDate
StatusBar1.Panels(1).Width = 50
'čas
StatusBar1.Panels.Add
StatusBar1.Panels(2).Style = sbrTime
StatusBar1.Panels(2).Width = 30
'stav klávesy CapsLock
StatusBar1.Panels.Add
StatusBar1.Panels(3).Style = sbrCaps
StatusBar1.Panels(3).Width = 30
'volitelný text
StatusBar1.Panels.Add
StatusBar1.Panels(4).Style = sbrText
StatusBar1.Panels(4).Text = "Text zarovnaný doprava"
StatusBar1.Panels(4).Alignment = sbrRight
StatusBar1.Panels(4).Width = 100
End Sub
Ve výpisu přidáváme "panely", lépe řečeno funkční bloky (oddíly, sekce) do pruhu stavového řádku, definujeme jejich typ (vlastnost Style) a šířku (Width). Uvedený kód není ani potřeba, příslušné oddíly je možné definovat pod vlastností (Custom) v okně Properties, jež je typická pro prvky Visual Basicu 6, konkrétně na kartě Panels. Kromě uvedených typů bloků (datum, čas, stav klávesy CapsLock, volitelný text) nabízí StatusBar ještě zobrazení stavu kláves NumLock, ScrollLock a Insert.
Měl jsem chvilku, takže asi takhle - zkopíroval jsem Váš HTML kód ze zdroje a nakopíroval do VBA. Nahradil jsem písmena A až G za odkazy na buňky v listu. Nijak jsem nezkoumal ty + a *, prostě jsem to vzal jak to je. Vlastně jsem napsal 10 řádků kódu a zbytek byl jen CTRL+H. Píšu to proto, že ten výstup je pro mně bez stylů nečitelný, ale odpovídá tomu Vašemu. Jako ukázka, jak na to by to ale mělo stačit.Sub subCreateHTML()
Dim iRows As Long
iRows = Cells(Rows.Count, 1).End(xlUp).Row
Dim sHTML As String
Dim iFile As Byte
iFile = FreeFile
Open "V:\vystup.htm" For Output As #iFile
Dim i As Long
For i = 2 To iRows
sHTML = "<div id=""s_***" & Cells(i, "A").Value & "+" & Cells(i, "B").Value & "***"" class=""slovnik_slovo""> <!--řádek č.1-->"
sHTML = sHTML & "<video class=""slovnik_video"" controls >"
sHTML = sHTML & "<source src=""video/slovnik/***" & Cells(i, "E").Value & "***.mp4"" type=""video/mp4"">"
sHTML = sHTML & "<source src=""video/slovnik/***" & Cells(i, "E").Value & "***.ogv"" type=""video/ogg"">"
sHTML = sHTML & "</video>"
sHTML = sHTML & "<span class = ""slovnik_title"" >***" & Cells(i, "A").Value & "+" & Cells(i, "B").Value & "***</span>"
sHTML = sHTML & "<span class = ""slovnik_rod"">***" & Cells(i, "B").Value & "+" & Cells(i, "C").Value & "+" & Cells(i, "D").Value & "***</span>"
sHTML = sHTML & "<div class=""slovnik_detail"">"
sHTML = sHTML & "***" & Cells(i, "F").Value & "***"
sHTML = sHTML & "</div>"
sHTML = sHTML & "<div class=""synonymum"">"
sHTML = sHTML & "Synonymum: ***" & Cells(i, "G").Value & "***"
sHTML = sHTML & "</div>"
sHTML = sHTML & "</div>"
sHTML = sHTML & "<div id=""s_***" & Cells(i, "A").Value & "+" & Cells(i, "B").Value & "***"" class=""slovnik_slovo""> <!--řádek č.2-->"
sHTML = sHTML & "<video class=""slovnik_video"" controls >"
sHTML = sHTML & "<source src=""video/slovnik/***" & Cells(i, "E").Value & "***.mp4"" type=""video/mp4"">"
sHTML = sHTML & "<source src=""video/slovnik/***" & Cells(i, "E").Value & "***.ogv"" type=""video/ogg"">"
sHTML = sHTML & "</video>"
sHTML = sHTML & "<span class = ""slovnik_title"" >***" & Cells(i, "A").Value & "+" & Cells(i, "B").Value & "***</span>"
sHTML = sHTML & "<span class = ""slovnik_rod"">***" & Cells(i, "B").Value & "+" & Cells(i, "C").Value & "+" & Cells(i, "D").Value & "***</span>"
sHTML = sHTML & "<div class=""slovnik_detail"">"
sHTML = sHTML & "***" & Cells(i, "F").Value & "***"
sHTML = sHTML & "</div>"
sHTML = sHTML & "<div class=""synonymum"">"
sHTML = sHTML & "Synonymum: ***" & Cells(i, "G").Value & "***"
sHTML = sHTML & "</div>"
sHTML = sHTML & "</div>"
Print #iFile, sHTML
Next i
Close #iFile
End Sub
@lubo
je to opravdu jen tak na okraj a bylo by to samozřejmě zbytečné komplikování. Hlavně jsem chtěl upozornit, že s těmi čísly týdne to není tak jednoduché a mělo by se na to dávat pozor (opakuji, nikoli v této úloze).
@AL
"i keď toto asi nevyužijem"
Mno, tím bych si nebyl tak jistý a doporučuji si to zapamatovat ;))) . Až po Vás bude někdo chtít vytvořit kalendář i s čísly týdnů, byla by to hloupá chyba, které si ovšem hned každý všimne, protože pracovní kalendáře je obsahují a je jich plno.
Mimochodem - Stejně tak číslo posledního týdne v roce není vždy minulý týden + 1 (tento rok by to bylo 53) ale může být 1 (tento rok), pokud 31.12 připadne na Po, Út nebo St.
V tom případě lubův vzorec nefunguje, protože pro 53 pro 2014 dá 29.12 a to není pravda a měl by vrátit chybu nebo info že toto číslo týdne se v daném roce nevyskytuje.
Pro zadání čísla týdne 1 a roku 2014 by měl vzorec asi vrátit 8 dní (1.1, 2.1, 3.1, 4.1, 5.1, 29.12, 30.12, 31.12), které mají číslo týdne 1.
Je to vše samozřejmě utažené za vlasy, ale když už podle normy...
Samozřejmě, jako odpověď na dotaz v tomto vlákně je ten vzorec postačující.
Číslo posledního týdne
=KDYŽ(DENTÝDNE(DATUM(rok;12;31);2)<4;1;WEEKNUM(DATUM(rok;12;31);2)-(WEEKNUM(DATUM(rok;1;4);2)>1))
Těžko takto posoudit.
Byl ten sešit vytvořen v verzi 2007 nebo ve starší?
Dělá to jenom na konkrétním PC nebo na více?
Byl někdy nekorektně uzavřen a pak "opraven" pomocí Obnovení dokumentu?
Jakým způsobem opravujete ta tlačítka? Znovu vytvoříte nebo neuložíte a znovu otevřete?
Asi bych doporučil vytvořit sešit znovu. Pokud to není "nějaký složitý" sešit - myslím, spousta podmíněných formátů, ověření a já nevím čeho všeho, prostě pokud je to běžný soubor, není to problém.
CTRL+A
CTRL+C
Vložit formáty
Vložit vzorce
Překopírovat makra.
Vytvořit ovládací prvky v listu.
Uložit
Tento postup !většinou! stačí.
Předpokládám, že je to stejné jako tady.
http://wall.cz/index.php?m=topic&id=12379&page=1#post-12386
Mát tam Pevnou mezeru
Jen nechápu, proč se to téma jmenuje formát buňky :(
pěkné
On má Palooo takové 2 malé úchylky. Je to cyklista (rád vše dělá pomocí cyklů) a addinistrátor (rád vytváří doplňky) ;)))
Dle mého si moc nepomůžete, protože budete muset ke každému z těch 20 přijít a nainstalovat doplněk. Ale nejdříve budete muset ten doplněk vytvořit (to jest vybrat kód z Vašeho sešitu, vložit ho do doplňku, znovu ho odladit, protože určitě bude potřebovat úpravy).
Navíc se bude otevírat s excelem, takže bude v paměti, i když ho nebudete potřebovat.
Takže mi stále přijde jednodušší důvěryhodné připojení. Mno a pokud se Vám nechce je všechny obcházet, vytvořte návod, jak si to nastaví každý sám (jako list do souboru, nebo jako druhý soubor s obrázky ve stejném adresáři ;) ).
Ale možná Palooo napíše nějaké výhody, které to má ;)
Několikrát jsem to vyzkoušel a funguje mi to. Snad je úprava v pořádku.
Určitě? - nějak mi tam chybí to End(xlUp)
Váš zápis nastaví kurzor na buňku I1048576 (v E2007)
Kód si samozřejmě upravte, jak potřebujete. Žaloby se bát nemusíte ;))
Jen bych ještě potřeboval aby mě "kurzor" po skončení makra zůstal na stejném řádku jako včerejší datum.
Takže pokud potřebujete umístit kurzor na včerejší datum (překládám si jako poslední vyplněnou buňku ve sloupci A listu List1, použijete samozřejmě Select. Před řádekEnd With 'ThisWorkbook.Sheets("List1") vložte.Select
.Cells(.Rows.Count, 1).End(xlUp).Select
První řádek přepne na list List1 (pro případ, že není aktivní - do té doby pracuji s List1, ikdyž aktivní být nemusí, bohužel pro změnu kurzoru je zapotřebí aktivovat) a druhý vybere buňku.
Co je špatnýho na příkazu Select
Neřekl bych špatného, ale zbytečného. Je to většinou zbytečný krok styluRange(XY).Select
Selection.NěcoTím pádem kód změní polohu kurzoru a dojde k překreslení obrazovky, což je velmi zdržující. Správně je tedy Range(XY).Něco
Vy to máte "vyřešeno" pomocí ScreenUpdatingu (což u nekorektního ukončení kódu nebo většího projektu může způsobit problémy), takže vlastně k žádnému zdržení nedojde. Znamená to ale, že kód vykonává zbytečnou činnost, zvlášť když tam máte Select 2x za sebou. Není zanedbatelná ani nepřehlednost kódu.
Zásada je co nejméně změnových přístupů na list. V mém kódu pouze čerpám data, vše vypočtu a teprve potom najednou zadám do celé oblasti výsledné hodnoty. Vyhnul jsem se překalkulování listu během kódu i překreslování obrazovky během kódu - tedy 2 asi nejvíce zdržujících procesů.
Samozřejmě, příkaz Select slouží k umístění kurzoru. Tedy pokud má kód umisťovat kurzor, tak je zbytečné vymýšlet něco jiného, protože by nějakému chytrolínovi (myšleno mně) rostly vlasy i když nechce.
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.