Na Windows to nepojede a doufám, že se mi povede to rozjet na Raspbianu na malině. Předpokládám, že mi to nepojede na LibreOffice, takže ještě musím zjistit, co upravit v tomto směru.
OK, zkusím to tím ON TIME.
Děkuji
Zdravím
Používám měřič el. Spotřeby s webovým rozhraním a bohužel se neumím domluvit s MQTT, takže jsem se rozhodl pro sběr dat přímo do Excelu z webové stránky.
Mám kód, který mi najde konkrétní hodnotu, kterou sleduji, načte a uloží do nově vytvořené buňky v listu. Nyní potřebuji, aby se toto makro spouštělo v pravidelném intervalu vždy jednou za hodinu, provedlo svou funkci a následně soubor uložilo. Při hledání jsem narazil na funkci OnTime, ale obecně ji moc nedoporučují.
Pokud byste řešili podobný problém, jaké řešení by jste zvolili?
Ano, takto jsem to myslel.
Mám list, kde jsem potřeboval na začátek tabulky vložit nový a prázdný řádek. To jsem udělal kódem:
Range("A2:I2").Select
Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromRightOrBelow
Po nějaké době jsem musel kvůli jinému makru změnit oblast na tabulku a mým kódem jsem neuspěl. Zkusil jsem tedy řádek nahradit za:
Sheets("ODPIS_MATERIALU").ListObjects("Tabulka1").ListRows.Add (1)
Tohle mi ale nový řádek nevytvořilo. Krokoval jsem pomocí F8, ale tento kód jen projel. Ověřil jsem, zda mám správně název listu a název tabulky.
Proto jsem se rozhodl změnit Tabulku na tabulku a v navazujících makrech jsem změnil návaznosti.
Píšu to proto, že nyní už nevím, zda mi vyskakovalo nějaké chybové hlášení a v mém aktuálním souboru je to uděláno jinak, takže chybu nevyvolám. V každém případě, budu zjišťovat, co vše mám špatně a postupně budu předělávat, takže časem pravděpodobně příjdu na to, kde jsem měl problém a proč mi zaslaný kód nefungoval, když všude jinde funguje
Anonym napsal/a:
Poprosil bych o číslo chyby a chybové hlášení, těch příčin by mohlo být více.
Bohužel, nefunguje. Nechal jsem to tak, změnil jsem tabulku na obyčejnou oblast a všechny makra poupravil, takže to nyní funguje.
Je to nástroj, kde jsem využil tolik obezliček a nesmyslů, ale ve finále to funguje, takže to v tuto chvíli nechám tak.
Zdravím
Blížím se ke konci s projektem, který nyní řeším a narazil jsem na další problém.
Potřebuji z jednoho listu uložit obsah buněk, přesunout se do druhého listu, vytvořit nový řádek na začátku tabulky a do tohoto řádku vložit data z prvního listu. Vše mi fungovalo až do chvíle, kdy jsem z tabulky v druhém listu musel udělat opravdovou Tabulku a zastavím se na kroku, kdy mi kód prostě nevytvoří nový řádek. Problém je v řádku: Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromRightOrBelow
Musím něco upravit, když se jedná o tabulku?
Sheets("POHYBY").Select
Range("A2:I2").Select
Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromRightOrBelow
Sheets("ODPIS_MATERIALU").Select
P_Datum = Range("G3").Value
P_DruhMaterialu = Range("A3").Value
P_NazevMaterialu = Range("B3").Value
P_Pohyb = Range("C3").Value
P_MJMaterialu = Range("D3").Value
P_StavMaterialu = Range("H3").Value
P_Doklad = Range("F3").Value
Sheets("POHYBY").Select
Range("A2") = P_Datum
Range("B2") = P_DruhMaterialu
Range("C2") = P_NazevMaterialu
Range("D2") = P_MJMaterialu
Range("G2") = P_StavMaterialu
Range("H2") = P_Doklad
Range("I2") = P_Pohyb
elninoslov napsal/a:
Zbytočné je aj filtrovanie FILTR_DATUM a FILTR_DATUM_2 na skladovej karte, veď tam iné dátumy byť nemôžu, keď ich tam nafiltruje podľa rovnakých kritérií z rovnakých buniek pred tým Rozšírený filter.
Zdravím a děkuji za reakci.
Tyto dva listy jsou součástí sešitu, který má mimo jiné funkci zapisování pohybu materiálu, takže obsahuje skutečně ještě další listy. Makra, které tento sešit obsahuje, jsou tedy buď kódy, které se vztahují k dalším listům, nebo jde o mé neúspěšné pokusy a které jsem chybně nesmazal, takže moje chyba a jen jsem zmátl.
V příloze posílám ještě jednou tabulku, kde jsou odmazány zbytečné kódy a tlačítka.
Nyní jsem ve fázi, kdy mi filtrování dle druhu materiálu funguje. Nepochopil jsem ale úplně přesně to filtrování dle datumu. Vyfiltruji si přece nejdříve druh materiálu a dále musím vytvořit filtr pro zobrazení jen těch materiálů, které jsou v daném období, ne?
A ještě drobnost: V buňkách C2 a C3 je provázaný seznam, který ale nefunguje správně. V buňce C3 potřebuji zobrazit jen ty materiály, které patří do rodiny z buňky C2, což se neděje. Správně funguje jen ve chvíli, kdy v listu POHYBY seřadím sloupec „Druh materiálu:“ vzestupně. Je nějaká možnost to ošetřit jinak, nebo je lepší použít další makro pro seřazování?
Děkuji
Zapomněl jsem přiložit soubor
Zdravím
Mám sešit se dvěma listy. V jednom listu je tabulka se záznamy (logy) příjmů a výdejů jednotlivých komponent ve skladu. V druhém listu se pokouším dát dohromady makro, které mi hromadně vyexportuje skladovou kartu ke každému z materiálů a to v rozmezí datumu, který si zvolím.
Umím si udělat makro, která mi vyexportuje vyfiltrované data hromadně do .pdf souborů pomocí cyklu, ale narazil jsem na dva problémy:
Mám sešit se dvěma listy
- POHYBY: Obsahuje tabulku, kde se logují vstupy a výstupy jednotlivých materiálů
- SKLADOVE_KARTY: Rozhraní, kde si uživatel zvolí konkrétní materiál a časové období, které jej zajímá
Pokouším se udělat makro, které mi:
- Na základě požadavku vyfiltruje data z tabulky v listu POHYBY do listu SKLADOVE_KARTY
- Před vyfiltrované data vloží řádek s počátečním datumem období, které mě zajímá
- Za vyfiltrované data vloží řádek s konečným datumem období, které mě zajímá
- Vyexportuje takto vytvořený list do .pdf a uloží do složky.
Jednou ročně budu potřebovat vyexportovat skladovou kartu ke každému materiálu, takže si umím udělat makro, které mi pomocí cyklu FOR automaticky doplní vstupní formulář a vyexportuje. Narazil jsem ale na problém, kdy nedokážu vyfiltrovat data. Už jsem i převzal kód z příkladu na internetu, ale příklad funguje, ale v mém sešitu ne. Mnohokrát jsem již prošel a krokoval, ale nepřišel jsem na to, kde dělám chybu. Nevím, jak vložit řádek za vyfiltrovanou tabulku, když je délka tabulky proměnná, ale předpokládám použití podmínky a hledání prázdného řádku. Zastavil jsem se ale na tom filtrování a bez něj nemohu pokračovat.
Mohu poprosit, jestli by se někdo nekoukl a nezkontroloval, kde mám v kódu chybu?
Sub FILTRUJ_SKLADOVE_KARTY()
Sheets("SKLADOVE_KARTY").Select
Range("A10").Select
Range(Selection, Selection.End(xlToRight)).Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Clear
Sheets("POHYBY").Range("LOG_POHYBU[#All]").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:= _
Sheets("POHYBY").Range("K1:K2"), CopyToRange:=Sheets("SKLADOVE_KARTY").Range("A10"), Unique:=True
Columns.AutoFit
Range("A10").Select
End Sub
Takže ještě jednou děkuji všem, pochopitelně hlavně ALovi a Marjankajovi.
Doplnil jsem do kódu dva řádky, díky kterým mi to pravděpodobně funguje, tak jak potřebuji (tedy testoval jsem a vždy se mi rozdělilo tam, kde potřebuji)
Takže, kdyby někdo v budoucnu řešil, kód je zde:
Sub SetPageBreaks()
Dim pb As HPageBreak ' Deklarace proměnné pb s datovým typem HPageBreak (vodorovné zalomení stránky)
ActiveWindow.View = xlPageBreakPreview
For Each pb In ActiveSheet.HPageBreaks ' Opakuj proměnnou pb (vodorovné zalomení stránky) tak dlouho, dokud nenarazíš na konec tisknutelné oblasti
With pb ' Vykonávej posloupnost příkazů
If .Location <> .Location.MergeArea.Cells(1, 1) Then ' Jestliže .Location se nerovná .Location.MergeArea.Cells(1, 1), pak...
Set .Location = .Location.MergeArea.Cells(-1, 1) ' Přiřazení
End If ' Konec opakování
End With ' Konec posloupnosti
Next pb
ActiveWindow.View = xlNormalView
End Sub
Zdravím
Omlouvám se, ale jsem starší ročník a učil jsem se jen Pascal, takže se ještě zeptám:
Chápu deklaraci proměnné, chápu opakování For, chápu podmínky If.
Když jsem uvažoval, jak by mělo případné makro vypadat, jsem uvažoval ve smyslu – Načti si hodnotu buňky a zjisti, zda není naplánováno zalomení stránky. Pokud ano, tak zjisti, jestli není buňka sloučená. Pokud platí obě podmínky, vlož zalomení před tuto buňku. Pokud podmínky splněny nejsou, tak pokračuj na další buňku až na úplný konec tisknutelné oblasti. V zaslaném makru ale vidím jen jednu podmínku a protože neznám příkaz .Location a .Location.MergeArea.Cells(1, 1), úplně nechápu, jak to funguje. Googlím, ale učil jsem se spíše rusky, tak mohu poprosit ještě o vysvětlení těchto dvou příkazů?
Moc děkuji
Sub SetPageBreaks()
Dim pb As HPageBreak ' Deklarace proměnné pb s datovým typem HPageBreak (vodorovné zalomení stránky)
For Each pb In ActiveSheet.HPageBreaks ' Opakuj proměnnou pb (vodorovné zalomení stránky) tak dlouho, dokud nenarazíš na konec tisknutelné oblasti
With pb ' Vykonávej posloupnost příkazů
If .Location <> .Location.MergeArea.Cells(1, 1) Then ' Jestliže .Location se nerovná .Location.MergeArea.Cells(1, 1), pak...
Set .Location = .Location.MergeArea.Cells(1, 1) ' Přiřazení
End If ' Konec opakování
End With ' Konec posloupnosti
Next pb
End Sub
Moc děkuji za makro. Pokusím se jej aplikovat a pokud se povede upravit, hodím sem pak soubor, kdyby někdo v budoucnu řešil stejný problém.
Zároveň se omlouvám za nepřesnou terminologii, ale u nás se opravdu jedná o záhlaví a zápatí
https://support.office.com/cs-cz/article/z%C3%A1hlav%C3%AD-a-z%C3%A1pat%C3%AD-v-listu-cae2a88c-64a7-42ab-96a4-28d2fc16ad31
Ruční upravování by bylo řešení a tímto směrem jsem šel již dříve.
Mým cílem je udělat dokument, který zautomatizuje některé procesy ve smyslu:
- Otevřu dokument, kde jsou všechny výrobky od daného dodavatele a já označím ty materiály, které chci objednat
- Kliknu na tlačítko a dokument si stránku vyexportuje do složky s objednávkami do souboru .pdf, otevře se emailová zpráva s přednastaveným textem pro konkrétního obchodníka a do přílohy se vloží onen .pdf
V dokumentu už mám makro, které mi načítá adresy dodavatelů, makro pro smazání neobjednávaných položek, makro pro uložení do .pdf a do konkrétní složky, makro které mi otevře emailovou zprávu, vloží adresy, vloží text a vloží přílohu…a nakonec ztroskotám na tom, že mi dodavatel nedodal dvě skla, protože se mu řádek přerušil na předělu stránky a on si toho nevšiml.
Takže ruční zalamování stránek by bylo řešením, ale postrádá to smysl při tom, když jsem vše ošetřil nějakou automatizací.
Asi jsem natvrdlý, ale jednodušeji to napsat asi nejde a točíme se pořád v kruhu. Kouknu-li se na layout, tak vidím zápatí, vidím také jakýsi doprovodný text (adresy dodavatele a odběratele, číslo objednávky), následně tabulku s komponenty, pak opět doprovodný text (termíny dodání a poznámky) a nakonec patička. Pokud se mě někdo ptá na tabulku a já pošlu soubor, vytvořený screen a navíc dopíšu, že je tabulka na řádcích 16 až 72 a dotyčný přesto odepíše, že neví kde je tabulka kterou řeším, nevím jak jinak popsat. Problém je v tom, že v excelu si vytvářím ohraničením jakousi tabulku, ale excel sám o sobě je také tabulka.
Víceméně stále upakuji, že layout v podstatě není potřeba řešit. Potřebuji najít způsob, jak přesvědčit Excel, aby nerozděloval tisknutelnou oblast v místě, kde je sloučená buňka. Prostě a jednoduše, nemohu poslat objednávku dodavateli, kterou v místě konce a začátku stránky nepřečte.
Na tebou zaslaný soubor jsem se samozřejmě koukal, ale nijak neřeší můj problém. Buňky to rozděluje stejně, jako soubor bez úpravy. V každém případě děkuji za tipy a čas. Čím dál více jsem přesvědčen, že tento problém asi vyřešit nepůjde a snad by šlo udělat nějakou obezličku makrem, ale do toho se nyní pouštět nebudu. Kdyby ale někdo pochopil co potřebuji a znal způsob, budu moc rád, protože nyní objednávky řeším ve Wordu, kde neumím udělat takové výpočty a makra, jako v excelu.
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.