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

#1 15. 4. 2014 20:59:23

ludviktrnka
Člen
Registrace: 9. 7. 2009
Příspěvků: 515

příkaz nahrazující ENTER - VYŘEŠENO

Dobrý den

setkal jsem se s nepříjemným chováním uživatele - zadal vstupní hodnoty do buněk a tlačítkem spustil makro, to běželo správně, ale poslední zadanou hodnotu to vzalo špatně noboť uživatel ji "neodentroval" - nechal blikající kurzor v buňce. Je možné aby tlačítko spouštějící makro zároveň uložilo poslední hodnotu nebo je možné nějaký příkaz předřadit před vlastní makro? Díky.

Editoval ludviktrnka (16. 4. 2014 10:28:30)


LibreOffice 5.2.2.2

Offline

#2 16. 4. 2014 08:19:38

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

Re: příkaz nahrazující ENTER - VYŘEŠENO

Příkaz na "automatický Enter" nelze stejně jako "automaticky Esc". Ostatní klávesy mají emulaci funkce makrem. To je dáno koncepcí přednastavení entru (také ESC) v dialozích obecně. Tlačítko nastavené na výchozí podléhá Entru. Představte si, když by někdo přiřadil vlastnost ESC = ENTR - máte vir jako vyšitý. Proto je to znemožněno. Lze to obejít :


     Pokud postavíte nějakou kontrolu tak se tomu dá zabránit. Ta kontrola jde makrem, podmíněným formátem, nebo také automatickým dokončováním.
1. - Příklad kontroly makrem : Do nějaké buňky (řekněme A10) dáme vzorec "ISTEXT(A3)", nebo například dotaz zda je to číslo, datum ap. Vzorec "ISTEXT(A3)" vrací "true"(1), nebo "False"(0). Podobně dotazy typu IF. Potom postavíme na začátek makra dotaz :

'...deklarace buňky A10 (Cell)
IF Cell.Value = 1 Then
'...Makro se rozeběhne - nic se nezobrazí
Else
MsgBox("Chyba - data nejsou zadána správně. Nyní program skončí." & _
" Chybu opravte a akci zopakujte.",64,"CHYBA ZADÁNÍ".)
Exit Sub
End If 

2. - Na ten samý systém postavíme podmíněný formát podle vzorce (pro buňku A3) podmínka : A10=0. Z toho pak buňka s chybou získá vlastnosti přednastavené - například žlutý podklad a červené písmo aby to bylo vidět na první pohled.
3. - Někdy to lze zajistit automatickým dokončováním (opravami). To zase souvisí s tím, že makro musí nastartovat přesunem kurzoru (snadno nahratelné makro  - UNO). Nahrané makro si uložíme například jako "krok" a hned za deklaraci subroutine zapíšeme :

Sub Main
krok
'...vlastní kód makra - toho vašeho původního
End Sub

     Když je to makrem, tak makro obsahuje většinou všechny potřebné věci jako "runtime" funkce, nebo příkazy. Ale obejdeme se snadno i bez nich - například :

'...deklarace buňky - 1. list, buňka A1
oCell = thisComponent.Sheets.getByIndex(0).getCellByPosition(0,0)
'...vložíme do buňky vzorec COUNT
oCell.Formula = "=COUNT(B1:B1000)"
'...dříve deklarovanou proměnnou iVar as integer naplníme obsahem buňky A1
iVar = oCell.value 
'...nyní buňku A1 vymažeme - zůstane prázdná. Zato iVar = COUNT
oCell.String = ""

Editoval neutr (16. 4. 2014 08:37:22)


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

#3 16. 4. 2014 09:22:46

ludviktrnka
Člen
Registrace: 9. 7. 2009
Příspěvků: 515

Re: příkaz nahrazující ENTER - VYŘEŠENO

Teda díky moc, použil jsem metodu 3, na začátek jsem zařadil řádek co jste mi nedávno poradil

dokument.CurrentController.select(list.getCellRangeByName("F12"))

F12 je buňka pod tlačítkem :-) a funguje to bezvadně. To mě fakt nenapdlo že to půjde takto, ale je to jasný, má to logiku. Jetště jednou díky.
A překvapuje mne že funguje i to podmíněné formátování, že podmíněný formát zmizí při vyplňování buňky bez ohledu na předchozí hodnotu - to je skvělá pomůcka. Díky za ni, určitě ji použiju.
Metoda (1) je složitá na větší počet buněk, ale chápu, též se to dá použít.


Ve finále jsem tedy použil jak podmíněné formátování na základě porovnání s původní hodnotou, kterou mám stále k dispozici, a navíc makro přesouvá kurzor, čímž na 100% ukládá poslední zadání - musím říct, že díky tomu je to nyní uživatelsky velice přívětivé.

Editoval ludviktrnka (16. 4. 2014 10:59:07)


LibreOffice 5.2.2.2

Offline

Zápatí