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

#1 13. 12. 2012 14:44:57

milhausl
Člen
Registrace: 13. 12. 2012
Příspěvků: 2

Přidávání položek do seznamu pomocí maker - VYŘEŠENO

Dobrý den,

potřeboval bych poradit s následujícím problémem.

Mám list s tabulkou s daty (tabulka firem). Do tohoto listu pomocí dialogu skrz makra přidávám nové položky - nové firmy a současně je hned po vložení třídím dle abecedy. Tato tabulka by v konečném výsledku neměla být vidět (uživatelem a neměl by jí můct přímo měnit).

V dalším listu mám formulářový prvek Seznam, do kterého potřebuji načíst položky z oné tabulky firem. Nicméně mi nestačí nastavit přes vlastnosti určitý rozsah, ale potřebuji, aby se ten rozsah měnil v závislosti na počtu firem za běhu.

Problém je v tom, že nevím jak získat přístup k danému seznamu a především jak měnit/přidávat položky seznamu pomocí maker. Tedy neznám metodu, která umožňuje přidávat nové položky do seznamu za běhu (aby to nemuselo být nastaveno napevno).

Pro získání přístupu k formulářovému prvku Seznam na listu sem zkoušel tento návod a k jiným prvkům (jako je třeba textové pole) se lze dostat a měnit je (u textového pole například přes pole.text="obsah"). Ale u seznamu nevím jakou proměnou/mětodu použít k přidání položek.

Zkoušel jsem i vytvořit dialog, který by obsahoval pouze ListBox a který by se otevřel po kliknutí na například Textové pole (umístěního v listu). Po otevření toho dialogu by se tedy makrem načetly položky seznamu, uživatel si vybral a po kliknutí by se vybraná položka přesunula do textového pole v listu. Nicméně ani zde nevím, jak přidat nové položky do seznamu za běhu.

Vím o možnosti ve Vlastnostech->Data->Rozsah zdrojové buňky při umístění seznamu přímo do dokumentu, ale zde se to nastavuje napevno (což mi nevyhovuje), jelikož nevím, jestli těch firem bude 10, nebo 50 a nechci nastavovat takový rozsah.

Tedy jsou asi dvě možnosti
Buď nějak makrem změnit položku ListBox->Vlastnosti->Data->Rozsah zdrojové buňky a prostě jí vždy  makrem nastavit tak, aby pokrývala celou tabulku s daty(a tak se vlastně přidávaly nové hodnoty) a nebo pomocí makra a cyklu přímo projít řádek po řádku v tabulce s daty a vkládat je do seznamu takto.

Ale ani u jednoho nevím název proměnné/metody, kterou k tomu u listboxu menit/volat.

Snad jsem to popsal co nejvíce pochopitelně.

____________________________________________
Značím jako vyřešené


;o)

Editoval sedlacekdan (23. 12. 2012 14:28:15)

Offline

#2 13. 12. 2012 14:57:51

neutr
Člen
Registrace: 8. 3. 2007
Příspěvků: 3,435

Re: Přidávání položek do seznamu pomocí maker - VYŘEŠENO

Skutečně je to dost věcí naráz. Vložte soubor s příkladem a detailnějším popisem co je potřeba.


Moje e-mailová adresa
Pokud je Váš problém vyřešen, označte prosím svůj příspěvek za "VYŘEŠENÝ"
Zlepšíte orientaci při vyhledávání řešení JAK OZNAČIT TÉMA ZA VYŘEŠENÉ

Offline

#3 13. 12. 2012 16:04:54

milhausl
Člen
Registrace: 13. 12. 2012
Příspěvků: 2

Re: Přidávání položek do seznamu pomocí maker - VYŘEŠENO

Tady je soubor
Seznam-test.ods

Po otevření by měl být na listu "Úvod" vidět seznam, pak testovací Textové pole a testovací tlačítko "Načti seznam firem" (testovací pole a tlačítko tam pak nebude, je to jen pro testování)

Na tlačítko se váže skript NactiSeznamFirem.

V něm si nejprve najdu formulářový prvek seznamu s názvem "SeznamFirem" a pak bych jej měl můct ovládat přes proměnou Seznam.

	prvky = list.Drawpage.Forms 					
	for i = 0 to prvky.count - 1 
		prvek = prvky.getByIndex(i) 				
		if prvek.hasByName("SeznamFirem") then 		
			seznam = prvek.getByName("SeznamFirem") 
		endif
	next i

pak je skript, který by měl procházet tabulku s firmami a po jedné jí přidat jako položky do seznamu

	for i = 0 to pf
		NazevFirmy = list.getCellByPosition(0,i+1)
		
		rem zde by měl být kód přidávající/měnící položky v seznamu, nevím ale jak mu předat nové položky
		rem seznam.???? = NazevFirmy.string 								'// - přidání položky seznamu - místo TEXT je třeba použít příkaz ?????

		rem nebo nějakou metodou ?

		rem seznam.additem(NazevFirmy.string)								'// - metoda kterou jsem našel v specifikacích - nefunguje
	next i

zde právě nevím, jak se to dělá - tedy čím.

pak je tam část kteránajde testovací textové pole a vloží do něj text.

	for i = 0 to prvky.count - 1 
		prvek = prvky.getByIndex(i) 				
		if prvek.hasByName("Test") then 			
			objekt = prvek.getByName("Test") 		
		endif
	next i
	
	rem textové pole se dá ovládat přes vlastnost (proměnou) TEXT a skrz jí jej lze měnit.
	objekt.text="Toto změnit a ovládat jde." 

zde to tedy funguje, textové pole se dle názvu najde a pak použitím vlastnosti TEXT lze změnit textové pole na listu. U seznamu to ale nejde a neznám tu vlastnost - nebo metodu, kterou bych toho docílil.

Editoval milhausl (13. 12. 2012 16:08:02)

Offline

#4 13. 12. 2012 18:02:09

neutr
Člen
Registrace: 8. 3. 2007
Příspěvků: 3,435

Re: Přidávání položek do seznamu pomocí maker - VYŘEŠENO

Tak tohle nebude za pár minut. Jsou tam sémantické chyby (syntaktické to nevykazuje). Zřejmě jsou tam převzaté věci odjinud a něco tam schází. Koukám na to už 1/2 hodky. Iterujete 0 TO prvky.count-1 - což je standardně nula, protože samotný prvky.count vrátí 1. Na prvý pohled je zřejmé, že tam má být počet firem - tedy 14. zase také na prvý pohled není zřejmé odkud ten prvky.count čte. Nic není deklarovaného, a když je v iterátoru tak je chápán jako integer. To by ovšem házel "0". Takže je to někde z volby ovládacího prvku - který je špatně. Napadá mně, že je to chybné pochopení buňky J2 - počet řádků je od nuly - takže J2 má být čten jako value, a ne count. Ale takových věcí je tam evidentně víc.
   Zase je to ale zajímavé pro mnoho uživatelů takže na to mrknu možná ještě dnes, ale spíš zítra.


Moje e-mailová adresa
Pokud je Váš problém vyřešen, označte prosím svůj příspěvek za "VYŘEŠENÝ"
Zlepšíte orientaci při vyhledávání řešení JAK OZNAČIT TÉMA ZA VYŘEŠENÉ

Offline

#5 13. 12. 2012 18:04:36

lp.
Člen
Registrace: 24. 9. 2009
Příspěvků: 842

Re: Přidávání položek do seznamu pomocí maker - VYŘEŠENO

Nechcete raději přesunout dotaz do sekce base?

Offline

#6 14. 12. 2012 17:08:36

sedlacekdan
Moderátor
Místo Nehvizdy
Registrace: 21. 6. 2010
Příspěvků: 617

Re: Přidávání položek do seznamu pomocí maker - VYŘEŠENO

Zkoušel jsem někde najít programové nastavení propojení s rozsahem buněk, ale zatím bezvýsledně. Někde to ale určitě je, budu pátrat o víkendu.


Zatím se dá použít toto:

seznam_firem = array("1firma","2firma","3firma")
seznam.StringItemList()= seznam_firem()

To je přímá editace v makru.
Názvy z firem by se museli pomocí cyklu přenést do datového pole seznam_firem a poté pomocí StringItemList() zobrazit ve formulářovém prvku.

neutr napsal(a)

Iterujete 0 TO prvky.count-1 - což je standardně nula, protože samotný prvky.count vrátí 1

Přistupovat k formulářovým prvků lze pomocí indexu. Při vložení do dokumentu je jim přiřazeno číslo. Pokud je těch prvků více, bylo by nutné zadávat přesně jejich pořadí. Při tvorbě může docházet k vytváření a mazání form. prvků a tím se mění i jejich index. Pro nalezení správného prvku je toto makro projde a zjistí jejich název. V případě shody pak pracuje dál.


;o)


Linux Mint 16 Petra - Apache OpenOffice 4.0.1
Pokud je Váš problém vyřešen, označte prosím svůj příspěvek za "VYŘEŠENÝ"
Zlepšíte tak orientaci na fóru při vyhledávání řešení problémů
JAK OZNAČIT TÉMA ZA VYŘEŠENÉ

Offline

#7 15. 12. 2012 20:19:41

neutr
Člen
Registrace: 8. 3. 2007
Příspěvků: 3,435

Re: Přidávání položek do seznamu pomocí maker - VYŘEŠENO

Tak jsem chtěl "seznam" ošálit ale nepovedlo se. Pro ty kdož neví o čem je řeč. Ovládací prvek seznam načítá pouze z databáze. To lze obejít tak, že data, která mají jít do "seznamu" :
1. Zaregistrujeme v Calcu jako data - Data > Definovat oblast a vybereme plus potvrdíme. (to ale k zobrazení v "seznamu" nestačí).
2. Následně zaregistrujeme Calc v OOo/AO jako databázi. Pak ale musíme tento sešit zpřístupnit. - Návod pro Win. V adresáři najdeme tento sešit a podíváme se na vlastnosti a zrušíme volbu "jen pro čtení". Pokud to neuděláme, tak nebude možné upravovat. Typicky ikony pro editaci ovládacích prvků nebudou přístupné ap.
3. Zapneme průvodce zap/vyp a vybereme prvek seznam. Jakmile ho vykreslíme otevře se okno průvodce kde už nalezneme postup krok po kroku. Najdeme náš sešit a vybereme oblast dat, kterou jsme ragistrovali podle bodu 1. Je tam spolu s listem, ve kterém leží. Pochopitelně vybereme námi určenou oblast dat a průvodce nás dovede až k úspěšnému "zobrazení v seznamu". Doporučuji, aby jste před tím nezkoušeli připojit jiný datový zdroj. Jakmile jej zaregistrujete nejde volbu změnit.
4. Seznam se načte, ale bývá šedivý. Musíme udělat něco banálního, aby jsme mohli "uložit" a pak se položky vysvítí (ztmavnou). Připsat položky do zdroje dat lze, ale načtou se až po restaru programu. Dochází tam ke spolupráci:  uložit v Calc(u) - načíst do Base - načíst do Calc(u). I když to leží v Calcu musí se načíst jak Base, tak Calc a to lze možná pomocí maker.

   Právě tohle je problémem, který snad má nějaké jiné řešení nežli restart. Ještě se to pokusím nějak obejít, ale spíš to najde někdo jiný pokud taková cesta existuje.

Editoval neutr (15. 12. 2012 20:24:17)


Moje e-mailová adresa
Pokud je Váš problém vyřešen, označte prosím svůj příspěvek za "VYŘEŠENÝ"
Zlepšíte orientaci při vyhledávání řešení JAK OZNAČIT TÉMA ZA VYŘEŠENÉ

Offline

#8 17. 12. 2012 08:10:48

sedlacekdan
Moderátor
Místo Nehvizdy
Registrace: 21. 6. 2010
Příspěvků: 617

Re: Přidávání položek do seznamu pomocí maker - VYŘEŠENO

Zde je upravené makro NactiSeznamFirem


Nepodařilo se mi zatím najít jak programově nastavit propojenou buňku nebo rozsah buněk.

Provedl jsem jen pár úprav:
1. Načítání je z listu Firmy-tabulka.
2. Definoval jsem proměnnou do_seznamu() s pevně daným počtem prvků v poli (počet firem).
3. Načtení názvů firem pomocí cyklu do proměnné do_seznamu().
4. Přiřazení proměnné do_seznamu() do formulářového prvku SeznamFirem


Snad bude vyhovovat.

rem načte názvy firem do formulářového prvku SeznamFirem. Spojená buňka A5 zůstává neměnná.
rem můžete ji využít pro další práci s vybranou firmou. Názvy firem se načítájí z listu
rem Firmy-tabulka.

Sub NactiSeznamFirem
rem deklarace proměnných
	dim dlg, PocetFirem
	dim i, pf as integer
	dim s as string, NazevFirmy as string
	
rem konec deklarace proměnných mimo pole do_seznamu()

	doc = thisComponent
	list = doc.sheets(0)
'------------------------------------------------------------------------------
rem názvy firem načítám z listu Firmy-tabulka
	list_firem = doc.sheets.getByName("Firmy-tabulka")
'------------------------------------------------------------------------------
rem počet firem z listu Firmy-tabulka buňka J2
	PocetFirem = list_firem.getCellRangeByName("J2")
	pf = PocetFirem.value
'------------------------------------------------------------------------------
rem definice pole do_seznamu s aktuálním počtem názvů firem - údaj v (pf)
	dim do_seznamu(pf)
'------------------------------------------------------------------------------
rem nalezení správného formulářového prvku
	prvky = list.Drawpage.Forms 					
	for i = 0 to prvky.count - 1 
		prvek = prvky.getByIndex(i) 				
		if prvek.hasByName("SeznamFirem") then 		
			seznam = prvek.getByName("SeznamFirem") 
		endif
	next i
'------------------------------------------------------------------------------
rem načtení názvů do formulářového prvku
	for i = 0 to pf - 1 ' pro všechny názvy firem
		NazevFirmy = list_firem.getCellByPosition(0,i+1).string 'načtení názvů
		do_seznamu(i) = NazevFirmy ' přiřazení názvů do pole
	next i
	seznam.StringItemList()= do_seznamu()' přiřazení do formulářového seznamu
end sub

;o)


Linux Mint 16 Petra - Apache OpenOffice 4.0.1
Pokud je Váš problém vyřešen, označte prosím svůj příspěvek za "VYŘEŠENÝ"
Zlepšíte tak orientaci na fóru při vyhledávání řešení problémů
JAK OZNAČIT TÉMA ZA VYŘEŠENÉ

Offline

#9 17. 12. 2012 11:05:36

neutr
Člen
Registrace: 8. 3. 2007
Příspěvků: 3,435

Re: Přidávání položek do seznamu pomocí maker - VYŘEŠENO

Dane dnes máš svátek tak vše nejlepší.
S tou buňkou - alespoň myslím, že píšeš o tom iterování - "prvky.count". Tu podivnou jedničku jsme asi dostali jako pravdivý počet ze seznamu - tedy možná iterátor načítá název seznamu jako položku. Jakmile se tam propojí zápisy, bude tam už nejspíš správné číslo.
  Souhlasím s tím, že by se to dalo udělat mnohem jednodušeji. Možná autor příspěvku změní názor a přistoupí k jinému řešení. Já už si teď myslím, že tu Base nelze obejít. Lze asi jenom na pozadí otevřít a načíst. To ale znamená velkou časovou predlevu. Nevím kdo by s tím chtěl dělat. Ale celkem rád bych se poučil - a nejen asi já.


Moje e-mailová adresa
Pokud je Váš problém vyřešen, označte prosím svůj příspěvek za "VYŘEŠENÝ"
Zlepšíte orientaci při vyhledávání řešení JAK OZNAČIT TÉMA ZA VYŘEŠENÉ

Offline

#10 18. 12. 2012 22:25:31

sedlacekdan
Moderátor
Místo Nehvizdy
Registrace: 21. 6. 2010
Příspěvků: 617

Re: Přidávání položek do seznamu pomocí maker - VYŘEŠENO

neutr napsal(a)

S tou buňkou - alespoň myslím, že píšeš o tom iterování - "prvky.count". Tu podivnou jedničku jsme asi dostali jako pravdivý počet ze seznamu - tedy možná iterátor načítá název seznamu jako položku. Jakmile se tam propojí zápisy, bude tam už nejspíš správné číslo.

Neiterují se buňky nebo hodnoty, ale vložené formulářové prvky jako objekty na listu.


PS díky za přání.


;o)


Linux Mint 16 Petra - Apache OpenOffice 4.0.1
Pokud je Váš problém vyřešen, označte prosím svůj příspěvek za "VYŘEŠENÝ"
Zlepšíte tak orientaci na fóru při vyhledávání řešení problémů
JAK OZNAČIT TÉMA ZA VYŘEŠENÉ

Offline

#11 9. 4. 2015 16:29:22

Marrtt
Člen
Registrace: 25. 2. 2015
Příspěvků: 115

Re: Přidávání položek do seznamu pomocí maker - VYŘEŠENO

Dobrý den
prosím o radu v následujícím problému:
Vytvořil jsem dialog, obsahující Listbox s položkami, v programu vše funguje až na jednu uživatelskou nepříjemnost:

po rozbalení listboxu si makro vybere první položku, které se myší jen dotknu (aniž bych na ní klikl). Listbox se chová jako by byla položka vybrána, i když okno výběru zůstane prázdné (prověřeno kontrolou proměnných v běhu makra). Je to normální?? Dá se to nějak eliminovat? Těžko můžu uživateli zakázat, aby přejel myší po rozbaleném seznamu položek a tohle mi úplně vykolejí logiku programu.

Děkuji
Martin

Offline

#12 9. 4. 2015 17:04:59

neutr
Člen
Registrace: 8. 3. 2007
Příspěvků: 3,435

Re: Přidávání položek do seznamu pomocí maker - VYŘEŠENO

Tohle chování se řídí událostí. Takže v dialogu vybrat ten listbox a podívejte se na "ovládací prvek" a pro jistotu také na "vlastnosti formuláře" - vždy událostí a nastavení. Tohle bude něco po "při zaměření", nebo "ztrátě zaměření", nebo "myš uvnitř" a podobně místo výběru položky (například stisknuto tlačítko myši ap.)


Moje e-mailová adresa
Pokud je Váš problém vyřešen, označte prosím svůj příspěvek za "VYŘEŠENÝ"
Zlepšíte orientaci při vyhledávání řešení JAK OZNAČIT TÉMA ZA VYŘEŠENÉ

Offline

#13 9. 4. 2015 19:59:25

Marrtt
Člen
Registrace: 25. 2. 2015
Příspěvků: 115

Re: Přidávání položek do seznamu pomocí maker - VYŘEŠENO

Nastavení v dialogu jsem kontroloval - nastaveno na "Změna stavu položky" (potřebuji s výběrem položky změnit stav v jiném okně dialogu - to funguje správně. Dotykem na rozbalené roletě se neprovedou akce, přiřazené k požadovanému makru, ale program se chová, jako by položka v listboxu byla vybrána kliknutím (přiřadí se do proměnné makra). K ostatním událostem v listboxu není přiřazeno nic, takže žádný duch by tam neměl být schovaný...tak nevím. A děje se mi to systémově u všech listboxů, které jsem použil, zkuste si to na pár řádcích naprogramovat, jestli to bude dělat i u Vás.
Tady je jednoduchá testovací procedura, na které se to dá ověřit - a chová se to stejně. Dialog je jen prostý listbox s několika položkami, který si k tomu naklikáte za 3 minuty. Nejsou přiřazeny žádné události, takže v nastavení událostí to nebude.
Martin

sub test
dim Dialog1 as object
    dim x as string
    DialogLibraries.LoadLibrary("Standard")
    Dialog1 = createUnoDialog(DialogLibraries.Standard.Dialog1)
    ListBox1 = Dialog1.getcontrol("ListBox1")
    if Dialog1.execute() = 0 then
    x = Dialog1.getcontrol("ListBox1").selecteditem
    msgbox x
    Dialog1.dispose()
    endif
end sub

Offline

#14 9. 4. 2015 20:29:49

neutr
Člen
Registrace: 8. 3. 2007
Příspěvků: 3,435

Re: Přidávání položek do seznamu pomocí maker - VYŘEŠENO

Co myslíte, že je tohle :?
if Dialog1.execute() = 0 then ....Když je dialog zapnutý ..potom
    x = Dialog1.getcontrol("ListBox1").selecteditem ....Vyber
    msgbox x ...hláška - výpis "x"
    Dialog1.dispose()...dialog zavřít - deaktivace
endif
    A tohle makro máte mezi Vašimi makry standard? - Jak jinak že? Myslíte že nefunguje vždy? Mám dojem, že bude navázané přímo na vlastnosti formuláře - na roletce to nemusí být vidět.


Moje e-mailová adresa
Pokud je Váš problém vyřešen, označte prosím svůj příspěvek za "VYŘEŠENÝ"
Zlepšíte orientaci při vyhledávání řešení JAK OZNAČIT TÉMA ZA VYŘEŠENÉ

Offline

#15 10. 4. 2015 09:30:31

Marrtt
Člen
Registrace: 25. 2. 2015
Příspěvků: 115

Re: Přidávání položek do seznamu pomocí maker - VYŘEŠENO

Dobrý den
nechci se vůbec přít o tohle makro - nemám ho nikde jako standard, je to jen zkušebních pár řádků.  Nenašel jsem bohužel nikde v MENU "vlastnosti formuláře". Ke to najdu? Nápověda mi moc nepomohla.

if Dialog1.execute() = 0 then ....Když je dialog zapnutý ..potom (a není to náhodou "Když je dialog vypnut, resp. Po vypnutí dialogu...proveď" ?)
    x = Dialog1.getcontrol("ListBox1").selecteditem ....Vyber - Je mi jasné, že tak jak je tohle makro napsané, bude přiřazovat hodnotu do X po kliknutí na vybranou položku. Psal jsem ale, že dialog si přiřadí hodnotu ze seznamu k proměnné X, i když si ji do okna NEVYBERU kliknutím, jen se jí DOTKNU myší v rozbalené nabídce.
Vyzkoušejte si to na jakémkoliv listboxu sám, jestli je to standardní chování.
----
Snažím se být slušný - myslím, že ve vašich odpovědích je zbytečná jízlivost. požádal jsem o radu a uznávám, že máte asi víc zkušeností, ale nemusíte mne srážet, když něco nevím nebo napíšu "špatně".
----
Děkuji
Martin

Offline

#16 10. 4. 2015 10:59:54

neutr
Člen
Registrace: 8. 3. 2007
Příspěvků: 3,435

Re: Přidávání položek do seznamu pomocí maker - VYŘEŠENO

Omlouvám se jestli jsem se Vás dotkl, ale celou dobu vysvětluji, že to způsobuje nějaké makro nevhodně přípíchnuté k nějaké události. Vy napíšete, že nic takového neexistuje a pak sem dáte ukázkové, které je 90% příčinou toho chování.
     Takže bych Vám doporučil tohle makro - ať je kdekoli - smazat, nebo přepsat parametr názvu dialogu (v makru, nebo lépe dát jiný název tomu dialogu). Dejte pozor, aby nebylo v knihovnách vícekrát. Možná ho máte mezi "Moje makra Standard". Tato makra fungují nad všemi moduly. Může být také součástí nejakého rozšíření.
     Stejně musí být toto maktro přiřazeno k nějaké události. Může to být i například otevření sešitu s makrem. Jakmile zavoláte dialog, splňujete podmínku IF a pak se akce provede.


     Já doporučuji spouštět dialogy jen z lokálního sešitu : - Dialog je součástí sešitu a makra která ho spouští vypadají takto :
Sub Dialog1Show
    DialogLibraries.LoadLibrary("Standard")
    oDialog1 = CreateUnoDialog( DialogLibraries.Standard.Dialog1 )
    oDialog1.Execute()
End Sub
     protože Standard knihovny jsou všudem doporučuji udělat knihovnu vlastní (např MojeKnihovna). nedoporučuji automatickou nabídku "Library1" a podobně. Potom spouštěcí makro vypadá takto :
Sub Dialog1Show
    DialogLibraries.LoadLibrary("MojeKnihovna")
    oDialog1 = CreateUnoDialog( DialogLibraries.Standard.Dialog1 )
    oDialog1.Execute()
End Sub
     Podobný efekt má sice také změna názvu Dialog1 a podobně, ale knihovny Standard mají jednu nepříjemnou nevýhodu. Nedají se uzamknout (často to funguje jen v Apache OpenOffice). Když se v Apache zamknutí aktivuje, tak v LO už pak také funguje.
     S otevíráním dialogů nebývá takový problém jako s jejich deaktivací a voláním prvků (zpětné načítání hodnot do dialogu a podobně). Vím, že se to měnilo u různých verzí. Takže jsem něco postavil a za dva roky to nefungovalo. Přepsal jsem to, a po nějaké době opět problémy.


     Ještě jednou se omlouvám a doporučuji přepsat alespoň název toho Vašeho dialogu a otestovat tu nežádoucí funkci.


Moje e-mailová adresa
Pokud je Váš problém vyřešen, označte prosím svůj příspěvek za "VYŘEŠENÝ"
Zlepšíte orientaci při vyhledávání řešení JAK OZNAČIT TÉMA ZA VYŘEŠENÉ

Offline

#17 10. 4. 2015 13:42:26

Marrtt
Člen
Registrace: 25. 2. 2015
Příspěvků: 115

Re: Přidávání položek do seznamu pomocí maker - VYŘEŠENO

OK, je dobré si věci vyříkat a vrátit se k věcnosti

1) makro uloženo takto:
   Kopie pro RB.ods (sešit)
          Standard   
             obsluha_databaze

deklarace dialogů veřejná před prvním makrem
dim hlavni_menu as object            rem hlavní rozcestník
dim fin_acc as object                rem správa fin účtů   
dim funds as object                rem správa portfolia

zpřístupnění dialogu v procedurách
DialogLibraries.LoadLibrary("Standard")
fin_acc = createUnoDialog(DialogLibraries.Standard.fin_acc) - jakým způsobem mám přejmenovat knihovnu ze Standard na něco jiného ?? nenašel jsem možnost přejmenování

2)Ten problém jsem samozřejmě nezaznamenal u tohoto testovacího dialogu s makrem, ale dříve u všech použitých listboxů (všechny jsou přejmenované, jména se nikde neopakují) - proto jsem napsal ten test. Pojmenování dialogů jsem volil nestandardně a jsem si naprosto jist, že nikde jinde se nevyskytují a program nikde nebloudí.
Předtím jsem neprogramoval, takže počítač určitě nemám zanesený makry s podobnými jmény.

3)byl bych rád, kdybyste opravdu vyzkoušel, jestli to není standardní vlastnost listboxu a jestli se tu neperu s něčím, co je prostě dané podstatou nebo chybou programu. Nevidím na tom nic těžkého, napsat krátký dialog a ověřit jeho chování.
Budu se tomu víc věnovat až o víkendu, teď musím dělat něco jiného

Děkuji

Offline

#18 10. 4. 2015 15:03:43

neutr
Člen
Registrace: 8. 3. 2007
Příspěvků: 3,435

Re: Přidávání položek do seznamu pomocí maker - VYŘEŠENO

Já se nyní nějak špatně orientuji. S názvy listboxů to nemá co dělat pokud neexistuje makro, které je na některý navázané. Pokud jste přejmenoval dialog (kartu v IDE s názvem Dialog1) tak je asi vše v pořádku a dialog se přejmenoval i v ovládacém prvku.
     Pokud jste to udělal opačně - přejmenování v ovládacím prvku, tak se to asi neprovede na jméně karty - to je chyba. Název karty a název v ovládacím dialogu by měl být stejný.
     Z Vašeho popisu jaksi nevyčtu, zda po přejmenování dialogu se chyba stále vyskytovala, nebo nikoliv. Je mi jasné, že musíte upravit i parametry volání v makrech.



     Přejmenovat knihovnu opřímo nejde. Já to napsal špatně. Musíte otevřít Nástroje > Makra > Správce Maker LibOff > Organizátor > karta Knihovny > nová. Dejte si ale pozor na umístění. Nová knihovna by měla být v otevřeném sešitě a nikoliv jako knihovna vedle Moje Standard - pro všechny moduly společná.


     Pokud se Vám nezadaří, vložte sem kopii. Takhle se jen dohadujeme nad virtuálním problémem.


Moje e-mailová adresa
Pokud je Váš problém vyřešen, označte prosím svůj příspěvek za "VYŘEŠENÝ"
Zlepšíte orientaci při vyhledávání řešení JAK OZNAČIT TÉMA ZA VYŘEŠENÉ

Offline

#19 13. 4. 2015 08:00:41

Marrtt
Člen
Registrace: 25. 2. 2015
Příspěvků: 115

Re: Přidávání položek do seznamu pomocí maker - VYŘEŠENO

Dobrý den
myslím, že jsem pochopil, kam mě směrujete - převedl jsem všechna makra do nově vytvořené knihovny a ze staré vymazal. Sladil jsem všechny názvy a zpřístupnění, logika programu a návaznosti procedur fungují podle mé představy, bohužel problém listboxu se vyskytuje stále. Opravdu mám podezření, že je to standardní vlastnost. Pokoušel jsem se to řešit i cyklem (dokud není vybráno....nejdu dál...hlásím nezadání dat...). Chovalo se to stejně - jakmile jsem myší jen brnknul o rozbalenou roletu, cyklus se uzavřel a data se načetly do proměnných, ačkoliv okno lisboxu zůstalo prázdné. Osobně nemám moc rád výše popsaný tvrdý cyklus - když se potká s nějakou blondýnou (to může být i chlap!!), stráví spolu poměrně dost času, než se pohnou z místa. Myslím, že je lepší, když program vyhodnotí chybu a někam uteče.
Celý výtvor je tady:
https://app.box.com/s/cs5azoop0hanuqpg2twxd2a0vt7vz1ek
zatím je odladěná logika pro oblast "SPRÁVA FINANČNÍCH ÚČTÚ"
"SPRÁVA PORTFOLIA" je nahozená na 90% a zatím neodladěná
nad ostatním vymýšlím logiku pokračování

Děkuju, Martin

Offline

#20 13. 4. 2015 10:02:47

neutr
Člen
Registrace: 8. 3. 2007
Příspěvků: 3,435

Re: Přidávání položek do seznamu pomocí maker - VYŘEŠENO

Martine u mne to vypadá dobře po všech stránkách a chodí to normálně v LibreOffice i Apache OpenOffice. Nic nepadá. Skutečně bude problém někde v "Moje makra Standard", nebo nějaké jiné (nad všemi aplikacemi LO, AOO), respektive v jiném (volaném dokumentu, nebo aplikaci).
     Přestože to chodí dobře, tak jsem se pokusil najít zádrhel : -
1 - Dialog fim.acc, finacc_num_box obsahuje nějakou nejapnost v podobě - Fondy_RB.Moje_fondy.cislo_zaznamu (document, Basic) - událost změna stavu položky
2 - Dialog funds, user_fund_box - Fondy_RB.Moje_fondy.cislo_a_ISIN_user (document, Basic) - událost - změna stavu položky
   - Dialog funds, dep_fund_box - Fondy_RB.Moje_fondy.cislo_a_ISIN_dep (document, Basic) - událost - provést akci


    Podle typu popisované chyby za to může ten poslední případ. Takhle nepoznám co to je. Uvedený text jsem nenašel ani mezi makry, ani v textech sešitu. Jde zřejmě o volání externích dat. Tam také hledejte chybu.


    PS : ještě mne napadlo, že to můžete odzkoušet v AOO pokud ho máte nainstalované, tak v LO. Pokud chyba zmizí při spuštění jiné instalace (AOO, nebo LO), tak je problém nekde mezi Moje makra Standard původního instalačního balíku.
    Pokud v obou aplikací chyba bude - jde zaručeně o externí dokument, který se nějak načítá těmi makry. Ale v takovém případě by to byla asi aplikace BASE - nic jiného by to asi být nemohlo.

Editoval neutr (13. 4. 2015 10:13:34)


Moje e-mailová adresa
Pokud je Váš problém vyřešen, označte prosím svůj příspěvek za "VYŘEŠENÝ"
Zlepšíte orientaci při vyhledávání řešení JAK OZNAČIT TÉMA ZA VYŘEŠENÉ

Offline

#21 13. 4. 2015 11:58:16

Marrtt
Člen
Registrace: 25. 2. 2015
Příspěvků: 115

Re: Přidávání položek do seznamu pomocí maker - VYŘEŠENO

vysvětlím "nejapnosti" :-) :
Logika v tom dialogu byla takováto - kdykoliv vyberu položku (změním stav), chci provést proceduru CISLO_ZAZNAMU. Ale už jsem to přepsal na událost "PROVÉST AKCI" a funguje to taky (ale i s tou chybou)
Procedury a dialog FUNDS jsem ještě neladil a momentálně je ani nespouštím (nemá to dotaženou logiku).
"cislo_a_ISIN_user" a "cislo_a_ISIN_dep" jsou malá nevýznamná makra, která se starají o pořadová čísla fondů (v dialogu FUNDS jsou to numboxy ind_fund a dep_fund_num). Jsou téměř úplně dole mezi makry - tuším 3. a 4. od konce. Asi jste je přehlédl.

"problém někde mezi Moje makra Standard..." TUHLE SLOŽKU JSEM ZCELA VYPRÁZDNIL, TAM SNAD PROBLÉM NENÍ
"aplikace BASE - " v tom jsem nikdy nic nedělal, to je panna nedotčená

Pokusím se popsat postup,  kde se ukazuje popisovaný problém, bude to lepší, když teď vidíte můj dialog:

OBLAST SPRAVA FIN. UCTU
1) mám vloženy cca 3 nové účty, nahrané v databázi nebo jen ve vnitřním seznamu, to je jedno
2) rozbalím roletu s účty v horním okně
3) podle toho jak jsem popisoval, nevyberu klikem, jen se dotknu nějaké hodnoty, zabalím roletu, okno je      prázdné
5) kliknu na tlačítko OPRAVIT
v Infoboxu se mi objeví hláška "Opravte číslo účtu x původní hodnota xxx_yyy" - a to je právě špatně - má se objevit: "účet pro opravu nevybrán" (to se stane pouze tehdy, pokud se žádné hodnoty v rozbalené roletě nedotknu)

Stejným způsobem se chová i okno, kde se zadává měna účtu - stačí dotek a hodnota je načtena (tam musím ještě trochu dotáhnout logiku - mazání buňky se starou hodnotou)
Zkusím nainstalovat LIBRE OFFICE a odzkoušet to tam, ale bude mi to chvíli trvat.
AOO je něco jiného než Open Office? omlouvám se za neznalost

Díky za trpělivost Martin

Offline

#22 13. 4. 2015 14:18:35

neutr
Člen
Registrace: 8. 3. 2007
Příspěvků: 3,435

Re: Přidávání položek do seznamu pomocí maker - VYŘEŠENO

AOO je Apache OpenOffice. Původně existoval jenom jeden typ "OpenOffice". Ten se rozdělil na 2 větve - AOO a LO. jsou do jisté míry stále hodně podobné, ale LibreOffice jde cestou radikálních inovací a implementací nových věcí. AOO je konzervativnější. Často je využívám oba. Když něco v LO nejde, tak v AOO nejspíš ano. LO má ale mnoho výhod - za cenu velké chybovosti ktrou sice poměrně promptně vývojáři odstarní. Stává se ale, že se některé opravené chyby objevují opakovaně. Často se setkáme s nekorektním chováním, které před tím bylo OK....
     Já jsem makro "Fondy_RB.Moje_fondy.cislo_zaznamu (document, Basic)" hledal pomocí vestavěného hledání  (v Basicu okénko dole Najít). Všiml jsem si, že makra máte také  na posledním listě sešitu, tak že hledáním v listech bych ho také měl najít.
     Nyní jsem již zase mimo domov a nejsem na svém stroji, takže Vámi popsaný postup nebudu moci testovat. Vrátím se ve čtvrtek. Takže otestujte balík LibreOffice a když to nenajdete mrknu na to znovu. Ale testoval jsem to jak to šlo. Když jdem mohl tak jsem udělal výběr, nebo jsem se pokusil udělat i zápis ale žádné podivné chování jsem nenašel.


Moje e-mailová adresa
Pokud je Váš problém vyřešen, označte prosím svůj příspěvek za "VYŘEŠENÝ"
Zlepšíte orientaci při vyhledávání řešení JAK OZNAČIT TÉMA ZA VYŘEŠENÉ

Offline

#23 13. 4. 2015 15:03:34

Marrtt
Člen
Registrace: 25. 2. 2015
Příspěvků: 115

Re: Přidávání položek do seznamu pomocí maker - VYŘEŠENO

Jste z Prahy? Chápu, že čas je vzácný, ale možná by 20 minut u stolu vyřešilo víc, než několik hodin na fóru.
Martin

Offline

#24 13. 4. 2015 15:24:04

neutr
Člen
Registrace: 8. 3. 2007
Příspěvků: 3,435

Re: Přidávání položek do seznamu pomocí maker - VYŘEŠENO

Bohu žel jsem z Duchcova - v Praze mám pár kamarádů občas si tam jedu poslechnou country. To se většinou řádně opivním. Ale nic takového se blízké budoucnosti nechystá.


Moje e-mailová adresa
Pokud je Váš problém vyřešen, označte prosím svůj příspěvek za "VYŘEŠENÝ"
Zlepšíte orientaci při vyhledávání řešení JAK OZNAČIT TÉMA ZA VYŘEŠENÉ

Offline

#25 14. 4. 2015 10:30:15

Marrtt
Člen
Registrace: 25. 2. 2015
Příspěvků: 115

Re: Přidávání položek do seznamu pomocí maker - VYŘEŠENO

Dobrý den
teď jsem to odzkoušel v LIBRE - zcela nové makro, nekopírované odnikud, knihovna přiřazená k sešitu, jedinečná jména všech entit, nemá to odkud tahat nějaké zapomenuté nebo zatoulané hodnoty. Chová se to stejně, pořád je tam nekorektní načtení nevybrané hodnoty při dotyku na roletě. Ještě mne napadá to zkusit na jiném compu - vezmu si NB od dcery. ale to už je ALAMO, pak už nevím co dál.
Martin

Offline

Zápatí