Včera jsem ještě před smazáním svých maker na chvíli koukal na kódy které uvádíte. Podle mne ani jeden z nich nemohl nikdy chodit správně. Je velká chyba v podmínce :
if
not .hasLocation) or .isReadOnly then'
.storeAsURL(ConvertToURL(cesta), Array()) ' ulozit jako
else
Podívejte se v sešitě jak takový dotaz dopadne (i když je to jiné IF)
=IF(False or False;"ANO";"NE")
=IF(0 or 0;"ANO";"NE")
=IF(1 or 1;"ANO";"NE")
=IF(1 or 0;"ANO";"NE")
fungovalo by to pod jinými podmínkami
=TRUE()
=FALSE()
Správně se tam musí doplnit :
if
not .hasLocation)= FALSE or .isReadOnly =FALSE then'
.storeAsURL(ConvertToURL(cesta), Array()) ' ulozit jako
else
Ale ono je toho zřejmě víc. Pro CSERT-a : Mám dojem, že jste svou šablonu nespouštěl ze šablon. Když soubor ".ots" spouštíte z jiného, nežli z adresáře šablon, tak vám nemusí fungovat jako šablona. Když opravdu jako šablona funguje, tak otevírá jen například "Bez názvu (číslo)".
Když se takto otevře, tak se kopie "Bez názvu X" chová naprosto jinak, nežli když se otevře šablona k editaci. Když budete šablonu otevírat z nabídky "Poslední soubory" - budete šablonu editovat. Když ji ale otevřete z adresáře (například ikona "otevřít"), nebo obecně otevřít složku,
tak se otevře jako Bez názvu(X).
Je to logické až teprve když se podíváte do správce šablon. "SOUBOR" > "NOVÝ" > ŠABLONY. Dialog Vám nabídne možnost importovat, nebo pokud tam nějaké jsou tak také vybrat. Když kliknete na existující šablonu, dostanete několik možností : editovat, otevřít, nebo také NASTAVIT JAKO VÝCHOZÍ a další možnosti. Pak je teprve zřejmé, že se šablony dají otevírat dvěma způsoby. Když tedy otevřete šablonu k editaci, tak byste měl upravovat její obsah a vlastnosti. Pokud však ji chcete použít k vygenerování kopie (logicky nového sešitu - vždyť ho můžete nastavit jako výchozí a všechny Calcy budou kopií šablony), tak se otevře "Bez názvu X". A ten se chová maličko jinak nežli byste čekal.
V každém případě když budete mít Vaši šablonu nastavenou jako výchozí (třeba jen na krátkou chvíli), tak místo zpětného volání stačí "otevřít nový" - třeba ikonou z calcu. Je to sice o 1 kliknutí více (uložit + nový sešit), ale o problematické makro méně.
Když vystačíte jen s programovou nabídkou místo tlačítka, tak nemusíte ani nic mazat. prostě místo tlačítka dáte příkaz někam viditelně, nebo naopak skrytě do hlavní nabídky, ato nehovořím o tom, že makro můžete spouštět klávesovou zkratkou - žádný ovládací prvek nepotřebujete.
Myslím si, že můžete na koncepci svého makra klidně zapomenout. Představte si maličkost :
1. Sešit ve kterém pracujete uložíte pod jiným jménem (ale jste v něm). Jak makro může zavolat otevření svého otevřeného sešitu? - Aby se mohl sám zavřít?
2. Když už něco otevře, myslíte že chod makra může do tohoto sešitu přehodit a sebe sama vypnout? jen pro představu jak asi chcete aby vypadala koncepce :
----------------------------------------------------------------------------
Zdrojové makro (knihovna Moje Standard)
↓
→ odbočka → Start Makro_1
běh makra (načíst nový název jako proměnnou Zdrojovému makru)
← návrat ← End Makro_1
↓
nějaký kód zdrojového makra
↓
→ odbočka → Start Makro_2
běh makra (uložit sešit XYZ pod novým názvem, uložit a zavřít)
← návrat ← End Makro_2
↓
nějaký kód zdrojového makra
↓
→ odbočka → Start Makro_1
běh makra (načíst nový název jako proměnnou Zdrojovému makru)
← návrat ← End Makro_1
↓
nějaký kód zdrojového makra (opakování)
↓
konec Zdrojové makro
----------------------------------------------------------------------------
To je "snad" životachopná koncepce, ale asi ne moc podobná koncepcím uváděným výše. Nebylo by lepší jiné koncepčí řešení? Určitě je jich více možných, ale například :
----------------------------------------------
Start Zdrojové Makro (schematická verze)
běh makra (uložit stávající název A2 – schematická verze)
běh makra (uložit pod novým názvem A1 – schematická verze)
End zdrojové makro (schematická verze)
----------------------------------------------
pokračování v nezávislé práci
↓
Start Zdrojové Makro (realistická verze)
běh makra (upravit soubor s původním názvem (A2) jako zavřený pod podmínkou ?File Exist?)
běh makra (uložit stávající názevA2 = A1)
běh makra (uložit pod novým názvem A1)
End zdrojové makro (realistická verze)
↓
pokračování v nezávislé práci
↓
----------------------------------------------------------------------------
Vždyť když uložíte pod novým názvem, tak starý soubor (původní název) zůstává tam kde byl. Jde jen asi o to, aby se pod svým vlastním názvem uložil tak, aby měl vše až do okamžiku přejmenování. Jakmile ho přejmenujete, je hned bez dalšího "zavřený".
Nově uložený seěit obsahuje vše, a může tedy obsahovat jak původná název, tak ten pod kterým je pojmenovaný. Na to ani hnedle makro není potřeba - jenom přehodit názvy - nový za starý, vygenerovat budoucí (nový), načít do paměti, otevřít dialog uložit jako: - Následně do kolonky název Ctrl+v a stisknou Enter. - Celkem tedy 3 úkony - zavolat makro, vložit název a Entrovat. To nahrajete záznamníkem a uložíte nejlépe do Moje makra Standard.
Prostě je to tak, že rád pomůžu, ale zde mi to prostě připadá málo účelné. Zvládnete asi něco z oblasti programování, ale prakticky byste měl zjistit, že tudy vede křivolaká ulička a při tom existují cestičky mnohem efektivnějí a snadnější.
Pracuji dost intenzivně na šabloně, která toto dělá maličko jinak, ale má mnohostranné užití. Až to budu mít hotové, vrátím se k opravě toho Vámi vybraného kódu.
sub uloz_do_zavreneho(URL)
On si to načte tak, že nesená URL = Adresa v deklaraci volaného makra (ByVal adresa as string).
Je to rotéž jako "1. makrem posílám 2. makru string" - "Makro 2 přijímá string". Je celkem jedno, že
makro 1 posílá string pod názvem URL a 2.makro ho čte jako adresa. Je to jako když němec posílá "kartofeln" slovákovi, který přijímá "zemiaky". Oba vědí co to je.
Nevím co jste s tím makrem udělal, jestli jste mu dal správnou adresu. Makro je teď nastaveno jen na mazání pouze tlačítka. Jestli chcete mazat všechno, tak musíte umazat ty jednoduché uvozovky před kódem. Raději to posílám bez nich. Jednoduchá uvozovka - ' - je totéž co REM.
sub uloz_do_zavreneho(ByVal adresa as string)
Dim arg(0) As New com.sun.star.beans.PropertyValue
arg(0).Name = "Hidden" ' otevřeme jako skrytý
arg(0).Value = True
cilovy_dok = stardesktop.loadComponentFromUrl(adresa,"_blank",0,arg())
list_cile = cilovy_dok.sheets(0)
RangeToClear = list_cile.getCellRangeByPosition(0,0,1023,1048575)
RangeToClear.clearContents(23) 'Maže obsah sešitu - hodnoty, čísla a vzorce
RangeToClear.clearContents(64) 'Maže styly
RangeToClear.clearContents(128)'Maže grafické objekty (tedy také tlačítko)
cilovy_dok.store()
cilovy_dok.close(True)
msgbox "Nový sešit uložen jako prázdný",0,"NOVÝ DOKUMENT ULOŽEN"
end sub
Vím, že jsem slíbil rozšíření. Dělám na tom. Jenže nedávno jsem slíbil vnukovi, že až budou Cassanovské slavnosti, tak na ně půjdeme a bude u mne (3 dny). Já na to samozřejmě zapoměl, ale miláček ne :-)
Dělám na tom od neděle a když jsem si přečetl, že "vyřešeno" - přestal jsem pospíchat začal to brousit. Nyní mi to chodí asi na 80%. To co používáte mám hotové už dávno. Hotové je také automatizované ukládání podle seznamu. - Vložíte seznam (jmen, nebo adres - kamkoliv), zvolíte vstupní buňky a můžete jít na pivo. Zvládne to i stovku tisíc úloh aniž byste na to musel sahat. Umí se to průběžně zálohovat (šablona) - výstupy jsou její kopie a ani je nevidíte. 1 uložení cca do sekundy. Nyní dělám dávkové spouštění maker. Postavíte svá makra nahráním (záznamníkem) (až 9 různých), a ta se provedou "bez Vás" pokud je zadáte. Takže každý výstup může mít něco jiného atd...
Tohle dodělám, a pak ještě automatický iterátor (pro pokročilé), který se nastavuje podobně jako PLC (programovatelný automat - takový ty autonomní minipočítače). Tam už se dají nastavit i protokoly a ukládání jen na podmínku aj. Nakonec to musím zformovat na ".oxt". Tedy rozšíření které nainstalujete přes správce rozšíření a vše bude tam kde to má být. Šablona v šablonách, makra v "moje Standard", možnost posílat v každém výstupu předem určená makra - každý výstup může mít jiná. (automatické generování tlačítek je samozřejmost ap.).
Největší pracnost je s manuály a instrukcemi. Ovšem jestli potřebujete honem něco dělat, tak Vám pošlu hned polotovar který umí jen "jednotlivě ukládat", nebo automatem "SEZNAM" - a ten ještě bez maker.
sub uloz_do_zavreneho(ByVal adresa as string)
Dim arg(0) As New com.sun.star.beans.PropertyValue
arg(0).Name = "Hidden" ' otevřeme jako skrytý
arg(0).Value = True
cilovy_dok = stardesktop.loadComponentFromUrl(adresa,"_blank",0,arg())
list_cile = cilovy_dok.sheets(0)
RangeToClear = list_cile.getCellRangeByPosition(0,0,1023,1048575)
'RangeToClear.clearContents(23) 'Maže obsah sešitu - hodnoty, čísla a vzorce
'RangeToClear.clearContents(64) 'Maže styly
RangeToClear.clearContents(128)'Maže grafické objekty (tedy také tlačítko)
cilovy_dok.store()
cilovy_dok.close(True)
'msgbox "Nový sešit uložen jako prázdný",0,"NOVÝ DOKUMENT ULOŽEN"
end sub
Když si toto makro zabudujete do makra, které vytvořil rejze, tak Vám to smaže jen tlačítko. Stačí jen na správném místě napsat volání :
sub uloz_do_zavreneho(URL)
Pochopitelně soubor už musí být uložený a zavřený.