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

#1 5. 6. 2011 22:45:39

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

Makro - Dialog - VYŘEŠENO

Dobrý den,
vytvořil jsem dialog o několika polích a vše je v pořádku, pokud se ale pokouším propojit dvě stejná číselná pole tak mi to nejde.
Dvě číselná pole se stejným formátováním pokud vyplním v prvním hodnotu potřebuji aby se mi přednastavila jako výchozí hodnota v druhém číselném poli (kde ji budu moci změnit, pokud budu potřebovat).
Příklad:
Váha poškozené zásilky dle záznamu na zásilce a při převážení. Pokud v prvním poli vyplním 1310 g tak v druhém poli chci nechat stejnou váhu nebo jen mírnou úpravu pomocí rolovacího tlačítka.

Zkoušel jsem k prvnímu poli přidat toto makro k "Text změněn"

sub vaha
dlg.model.vaha2.value=dlg.model.vaha1.value
end sub

ale -> Chyba, proměnná objektu není nastavena

Postupuji podle návodu p. Pastierika z knihy o makrech, ale zřejmě někde dělám chybu a nemůžu na ni přijít.

díky ;o)

Editoval sedlacekdan (7. 10. 2011 18:12:01)


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

#2 6. 6. 2011 04:18:46

j-pastierik
Člen
Registrace: 15. 11. 2004
Příspěvků: 761

Re: Makro - Dialog - VYŘEŠENO

premennú dlg musíte mať definovanú tak, že ju "uvidíte" vo všetkých procedúrach - teda na začiatku (v prvom riadku) ešte pred všetkými funkciami. Potom ju už vo vnútri funkcií a procedúr nedefinujte. Napr:

dim dlg as object
...
sub vaha
...
end sub

Offline

#3 6. 6. 2011 20:45:35

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

Re: Makro - Dialog - VYŘEŠENO

Díky moc,
už funguje.
;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

#4 25. 2. 2015 08:12:29

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

Re: Makro - Dialog - VYŘEŠENO

Dobrý den
Tohle makro ani po Vaší opravě nefunguje a pořád hlásí stejnou chybu (proměnná objektzu není nastavena. Nevím, co s tím a prosím o pomoc.
dim fondy as object
dim strana_1 as object
dim strana_2 as object
dim Strana_3 as object

sub main
Fondy_uctovani
Vloz_novy_radek_pro_zaznam
end sub

Sub Fondy_uctovani
rem ---dimenzovani---
Fondy = thisComponent Rem název projektu
Strana_1 = fondy.sheets(1) Rem pohledová tabulka
Strana_2 = fondy.sheets(2) Rem databáze
Strana_3 = fondy.sheets(3) Rem pomocné proměnné
end sub

sub Vloz_novy_radek_pro_zaznam
rem---
dim last_insert as object
dim inits as object

inits = Strana_3.getCellByPosition(0,0) - Zde chybové hlášení
last_insert = Strana_3.getCellByPosition(1,0) Zde chybové hlášení
if inits.value = 0 then
last_insert.value = 36
inits.value = 1
else
strana_1.rows.insertByIndex(last_insert.Value,1)
last_insert.Value = last_insert.Value + 1
endif
end sub

Offline

#5 25. 2. 2015 10:19:56

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

Re: Makro - Dialog - VYŘEŠENO

Je tam chyba deklarace. Chybí Vám tam deklarace Sheet. Deklarace mají 2 základní podoby :
Tady se mrkněte na odlišnosti v deklaracích Position a Name

Sub MainDeklarace
Dim oSheet
oSheet = thisComponent.Sheets(0)
oSheet.getCellRangeByName("A1").String = "Input Data"
oSheet.getCellRangeByName("A2").Value = 4
oSheet.getCellRangeByName("A3").Value = 5
oSheet.getCellRangeByName("A4").Formula = "=A2*A3"
End Sub

SUB deklaracebunky
Dim Doc As Object
Dim Sheet As Object
Dim Cell As Object
Doc = ThisComponent
Sheet = Doc. Sheets ( 0 )'Tady může být ijméno
Cell = Sheet. getCellByPosition ( 0 , 0 )
Cell. Value = 100
Cell = Sheet. getCellByPosition ( 0 , 1 )
Cell. String = 1000
Cell = Sheet. getCellByPosition ( 0 , 2 )
Cell. Formula = "=A1+A2"
MsgBox Cell. Value 
End SUB

Vy to máte upraveno jako deklaraci RangeByName - tam by Vám to stačilo. Když tam máte Position tak to nestačí.


PS Tenhle dotaz původně směřoval na jiný problém deklarace. Když se Dim vloží před makro, tak je sice vidět, ale pokud má být vidět ve více modulech Main tak dejte jinou deklaraci. Ale dejte pozor a otestujte co to dělá. Například Option Explicid nedoporučuji ta Vám zkomplikuje život. Znamená to vše přesně deklarovat. Static je tvrdá a hodí se málokdy. Většinou vyhovuje Public Private nebo Global.

Editoval neutr (25. 2. 2015 10:42:48)


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

#6 25. 2. 2015 18:39:29

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

Re: Makro - Dialog - VYŘEŠENO

Marrtt napsal(a)

Dobrý den
Tohle makro ani po Vaší opravě nefunguje a pořád hlásí stejnou chybu (proměnná objektzu není nastavena. Nevím, co s tím a prosím o pomoc.

Nechápu. V čem a jak to spouštíš? testováno v aoo i lo. Je nutno spustit nejprve "Fondy_uctovani"
a až pak "Vloz_novy_radek_pro_zaznam"
Dohromady je to v proceduře main.


Pokud se má spouštět jen jedna procedura pak to může vypadat třeba tak:

sub Vloz_novy_radek_pro_zaznam
rem---
dim fondy as object
dim strana_1 as object
dim strana_2 as object
dim Strana_3 as object

dim last_insert as object
dim inits as object

Fondy = thisComponent Rem název projektu
Strana_1 = fondy.sheets(1) Rem pohledová tabulka
Strana_2 = fondy.sheets(2) Rem databáze
Strana_3 = fondy.sheets(3) Rem pomocné proměnné

inits = Strana_3.getCellByPosition(0,0)
last_insert = Strana_3.getCellByPosition(1,0)
if inits.value = 0 then
last_insert.value = 36
inits.value = 1
else
strana_1.rows.insertByIndex(last_insert.Value,1)
last_insert.Value = last_insert.Value + 1
endif
end sub

Offline

#7 4. 3. 2015 12:05:58

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

Re: Makro - Dialog - VYŘEŠENO

Super děkuju
došel jsem hlavonožně ke stejnému řešení. Tvořím složitější balík k ovládání účetnictví investic do fondů. Tohle jej jen menší část, jedna procedura, testovaná samostatně. Skládat to budu až později po odladění všech bloků a dialogů.

Offline

#8 4. 3. 2015 12:18:57

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

Re: Makro - Dialog - VYŘEŠENO

Jen konec musí vypadat takhle, aby to pokaždé vkládalo řádek, ale jen poprvé proběhla lokalizace prvního záznamového řádku
else
endif
strana_1.rows.insertByIndex(last_insert.Value,1)
last_insert.Value = last_insert.Value + 1
rem msgbox last_insert.value
end sub

Offline

#9 3. 4. 2015 06:03:20

nahiiii
Člen
Registrace: 3. 4. 2015
Příspěvků: 1

Re: Makro - Dialog - VYŘEŠENO

Například Option Explicid nedoporučuji ta Vám zkomplikuje život. Znamená to vše přesně deklarovat. Static je tvrdá a hodí se málokdy. Většinou vyhovuje Public Private nebo Global.???
free klondike solitaire

Editoval nahiiii (8. 12. 2015 10:43:09)


GuL

Offline

#10 3. 4. 2015 10:28:36

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

Re: Makro - Dialog - VYŘEŠENO

nahiiii napsal(a)

Například Option Explicid nedoporučuji ta Vám zkomplikuje život. Znamená to vše přesně deklarovat.

Co komplikuje život programátora víc. Zápis deklarace nebo hledání chyby kvůli chybné/chybějící deklaraci?

To si každý musí rozhodnout sám.

Offline

Zápatí