Fórum pro uživatele kancelářského balíku OpenOffice | LibreOffice
 

#1 Re: Chyba v programu » Worksheets().Range() bug? - VYŘEŠENO » 5. 8. 2016 17:05:55

Super funguje to! smile už se tím nemusíte zabývat smile Mnohokrát děkuji!
     
Vyřešil jsem to kombinací kódu, který jste mi poradil + pro buňku u které je důležité formátovat každé slovo zvlášť jsem si nahrál a upravil podle svých potřeb makro, takže to na rychlosti nelze poznat. smile

#2 Re: Chyba v programu » Worksheets().Range() bug? - VYŘEŠENO » 5. 8. 2016 16:30:27

hned to vyzkouším smile Ano mám předpřipravenou šablonu a kopíruji jen data. A dělám to samozřejmě v cyklu smile Vámi přidaný kód kopíruje i formátování?

#3 Re: Chyba v programu » Worksheets().Range() bug? - VYŘEŠENO » 5. 8. 2016 15:19:36

Dobře děkuji moc, zkusím to tedy ten cyklus vytvořit, ale mám strach o časovou složitost... Jak se tam objeví více než 200 záznamů a každý bude mít 100 slov. Už teď to tvoření tabulky trvá sekundu a to tam mám zatím jen 15 listů.
     
Ale děkuji moc pak sem dám případné řešení.

#4 Re: Chyba v programu » Worksheets().Range() bug? - VYŘEŠENO » 5. 8. 2016 14:51:29

I bez podmínky mi to fungovalo, ale nelze nějak zařídit, aby se dalo zvýraznit pouze jedno slovo z celé zdrojové buňky?

#5 Re: Chyba v programu » Worksheets().Range() bug? - VYŘEŠENO » 5. 8. 2016 14:40:31

Tak vyskytl se takový menší problém, ale nevím zda vůbec lze vyřešit... Ono to sice kopíruje formátování textu, ale pouze nějaký celkový formát. Tzn. Pokud je tam dlouhé souvětí a tam někdo vyznačí tučně jedno slovo, tak se to překopíruje celé tučně. sad
   
Asi to nelze nějak obejít?

#6 Re: Chyba v programu » Worksheets().Range() bug? - VYŘEŠENO » 5. 8. 2016 14:27:48

sub copySpecial(col as Integer, row as Integer, destination as String, firstList as Object, secondList as Object) 
	Dim content 
	Dim color
	Dim weight
	
	oCellZdroj = ThisComponent.CurrentController.getSelection() 
	
	With oCellZdroj.RangeAddress 
		SC = col
		SR = row
	End With 

	oCellZdroj = firstList.GetCellbyPosition(SC,SR)
	content = oCellZdroj.string
	color = oCellZdroj.CharColor
	weight = oCellZdroj.CharWeight

	secondList.getCellRangeByName(destination).String = content
	secondList.getCellRangeByName(destination).CharColor = color
	secondList.getCellRangeByName(destination).CharWeight = weight
end sub

Call copySpecial(1, 2, "B" & radek, prohledavanyList, list) 'mé volání bude vypadat takto

Asi mi to bude stačit takto smile děkuji moc

#8 Re: Chyba v programu » Worksheets().Range() bug? - VYŘEŠENO » 5. 8. 2016 14:02:16

Děkuji jdu to zkusit přepsat do mého makra.
     
A jak se řeší, jestli je písmo tučné nebo kurzíva atd.?

#9 Re: Chyba v programu » Worksheets().Range() bug? - VYŘEŠENO » 5. 8. 2016 13:39:11

A abych upřesnil smysl toho všeho.
     
Prakticky je to něco jako malá databáze. Každý list představuje jednu osobu, která obsahuje tabulku s firmami a první list slouží jako list na zobrazování výsledků. Mám tu dropdownlist na výběr nějaké firmy a pak po kliknutí na tlačítko ,,vytvořit přehled" se vytvoří nová tabulka, která doplní všechny údaje o osobně (jméno, datum nar.....), ve které se vyskytuje záznam o dané firmě, do tabulky. Ty údaje těch osob se rozlišují barevně podle potřeb a je potřeba je ve výsledné tabulce mít naformátované.

#10 Re: Chyba v programu » Worksheets().Range() bug? - VYŘEŠENO » 5. 8. 2016 13:25:31

Selection.PasteSpecial Paste:=xlPasteFormats
     Zde se vloží formátování zdrojového textu (třeba pokud tam někdo napíše každé písmenko v jiné barvě, tak aby se to překopírovalo)
     
Prakticky mi hlavně jde o to, aby to zachovalo formátování toho textu (není to můj výmysl byl na to přímo požadavek z vyšších míst)
     
list.getCellRangeByName("B" & radek).string = prohledavanyList.getCellRangeByName("B3").string & Chr(13)
     
Takto jsem to dělal dřív, ale to bohužel nezachovalo formátování, protože jsem vytahoval pouze řetězec znaků.
     
Jestli existuje nějaké lepší řešení, jak překopírovat buňky a zachovat formát rád se ho naučím smile
     
Děkuji

#11 Re: Chyba v programu » Worksheets().Range() bug? - VYŘEŠENO » 5. 8. 2016 10:32:54

Děkuji za nápovědu. Vím jak nahrávat makra, ale můj problém to moc neřeší, protože já bych potřeboval nějak přímo v mém kódu vkládat formátovaný text.
   
Prakticky zadání zní asi takto: mám jeden list ,,Přehled" a do něho potřebuji z ostaních listů (je jich třeba 200) vytáhnout určité části dat, které jsou individuálně naformátované a pak s těma datama ještě pracovat dále... Pokud bych nahrál makro, tak to částečně vyřeší momentální problém vložení těchto pár buněk, ale neumožní mi to nějak zjednodušeně v pár cyklech pracovat s formátovaným textem. Chtěl jsem se vyhnout tomu abych tam měl nahrané makro (přejdi na list xy->přejdi na buňku->copy->přejdi zpět na Přehled->přejdi na buňku->vlož speciálně s nastavením xy->přejdi na list xyz->.....) ale dělal to nějak pomocí pár řádků, které mi umožní si data ukládat do proměnných atd. nejen otrocky fungovat pomocí mého naklikaného makra sad
               
Zeptám se líp. Jde nějak ta část:
           
    Worksheets(prohledavanyList.getName()).Range("B3").Select
    Selection.Copy
   
    Worksheets(list.getName()).Range("B" & radek).Select (kde proměnná ,,radek" je v cyklu inkrementována)           
           
    Selection.PasteSpecial Paste:=xlPasteFormats
    Selection.PasteSpecial Paste:=xlPasteValues   
           
přepsat do Star Basic (pokud správně rozumím, že je to odnož basicu pro OpenOffice). Nikde jsem moc nenašel návod jak se dá pomocí vlastního kódu spaciální vkládání dat aniž bych se vyhnul již zmíněného kodu z Excelu.
             
Navíc furt mě trápí, jak je možné, že to při druhém zkompilování kódu funguje bezchybně a je ta chyba pouze při prvním spuštění makra. (makro mám uložené přímo v daném dokumentu a je navázáno jako Event po kliknutí na tlačítko).
             
Děkuji za případné doplnění odpovědi.

#12 Re: Chyba v programu » Worksheets().Range() bug? - VYŘEŠENO » 5. 8. 2016 07:20:43

Dobrý den,
mnohokrát děkuji za odpověď.
Ano máte pravdu příkazy jsem převzal a upravil pro mé potřeby přímo z fora na Excel. Myslel jsem, že pokud to funguje, tak to mohu používat. (což v mém případě nefunguje pouze při první kompilaci makra při druhé už jo)
           
    Worksheets(prohledavanyList.getName()).Range("B3").Select
    Selection.Copy
   
    Worksheets(list.getName()).Range("B" & radek).Select (kde proměnná ,,radek" je v cyklu inkrementována)           
           
    Selection.PasteSpecial Paste:=xlPasteFormats
    Selection.PasteSpecial Paste:=xlPasteValues   
           
Celý úsek kódu vypadá takto. Potřeboval jsem vložit formátovaný text z jednoho listu do druhého a přitom zachovat formátování.
           
Makro má 1000 řádků, tak případně můžu vložit další části, ale myslím, že tento excelovský kód bude ten problémový.

#13 Chyba v programu » Worksheets().Range() bug? - VYŘEŠENO » 4. 8. 2016 21:57:05

MrSawyer
Odpovědí: 23

Dobrý den všem,

objevil jsem zajímavou chybu a už nevím jak ji opravit.
**************************************************
Chyba zní:
Basic runtime error.
Vyskytla se vyjímka
Type: com.sun.star.lang.IllegalArgumentException
Messege: arguments len differ!.
**************************************************
Místo:
ThisWorkbook.Worksheets(prohledavanyList.getName()).Range("B3").Select
Prakticky jsem zjistil, že ta chyba je přesně v .Range("B3")
*************************************************
Chyba se objeví vždy, když otevřu znovu openOffice Calc a spustím makro. Jako řešení chyby stačí cokoliv v makru přidat nebo pouze dát někam Enter nebo jen mezeru a najednou makro funguje... (asi tím zaručím, že se makro znovu zkompiluje?)
Napadá někoho nějaká možnost řešení? Kdyby to bylo makro pouze pro mě, tak to tak neřeším, ale bohužel je pro pár lidí, kteří tomu vůbec nerozumí a určitě nebudou spokojeni s tím, že při každém zapnutí programu budou muset něco ,,upravit" v kodu...
*************************************************
Děkuji za každou radu.

Zápatí

Používáme FluxBB