[megoldva] LibreOffice makró ne konkrét értéket illesszen be

Fórumok

Szeretnék makrót írni egy LibreOffice táblázathoz.

A következő gombkombinációkat szeretném egy makróként használni (de az a bajom, hogy a másolás-beillesztés helyett konkrét érték beszúrását rögzíti a makrórögzítő):

Shift+Ctrl+F5 (Névdobozra áll)
Ctrl+A (Kijelöl ott mindent)
Ctrl+C (Másol)
Ctrl+PgDwn (Egy munkalappal odébb áll)
(Shift+Ctrl+F5 (Névdobozra áll) - nem fontos, mert úgyis ott áll)
Ctrl+A (Kijelöl ott mindent)
Ctrl+V (Beszúr)
Enter (érvényesíti a beállított koordinátát)

(Meglepő egyébként, hogy a makrók rögzítését így kellett lehetővé tenni: Eszközök, Beállítások, LibreOffice, Általános: Kísérleti funkciók engedélyezése)

Magyarán, azt szeretném, ha ehelyett:
dim args4(0) as new com.sun.star.beans.PropertyValue
args4(0).Name = "ToPoint"
args4(0).Value = "C12"

inkább a vágólapon levő értéket ragasztaná be a makró.

Hozzászólások

Mivel a készítők szerint jelenleg nem működik stabilan a makró rögzítése, ezért nincs alapértelmezetten engedélyezve.
Tipp, nem próbáltam, de működnie kellene: Ctrl+V helyett jobb klikk a kijelölés felett, és az irányított beillesztés választása.

-----
"Én vagyok a hülye, hogy leállok magával vitatkozni."

Alaposabban elolvastam a kérdést, és ha jól értem, akkor azt szeretnéd, hogy a makró a következő munkalap azon cellájára ugorjon, ahol a mostani munkalapon állsz. Tehát ha a 3. munkalap b3-as celláján állsz éppen, akkor ugorjon a 4. munkalap b3-as cellájára.
Az általad leírt billentyűleütések éppen ezt teszik. Ha egy cella volt aktív, akkor arra ugrik a következő munkalapon. Ha több cella volt kijelölve, akkor a művelet után is több cella lesz kijelölve a következő munkalapon.

Viszont ha makróként rögzítem, akkor nem ugrik a kívánt cellára. A munkalap váltása megtörténik, de a makró a rögzítésnél megadott cellára fog mindig ugrani.

Tippem: ez makrórögzítéssel nem fog menni. Meg kell írni a makrót "kézzel". Ami nem túl bonyolult, de most nincs időm rá. Talán ma este, vagy holnap sort keríthetek rá.

-----
"Én vagyok a hülye, hogy leállok magával vitatkozni."

Igen, jól érted a feladványt :-)
Voltak kísérleteim, pl. az alábbi, de a koordináta-átadás még nem perfekt. Köszi, ha bármikor rá tudsz nézni.

sub UgrasUaCellara
rem ----------------------------------------------------------------------
rem define variables
dim document as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
oSelectedCell = ThisComponent.CurrentSelection
oActiveCell = oSelectedCell.CellAddress

dispatcher.executeDispatch(document, ".uno:JumpToNextTable", "", 0, Array())

dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "ToPoint"
args1(0).Value = oActiveCell

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())

end sub

=============

(Megj: az oActiveCell.Row és oActiveCell.Column egy számértéket tartalmaz, amely megfelel a kévánatos koordinátáknak, csak 0-tól indítva a számozást. Ezeket nem tudtam hol felhasználni, pedig a GotoCell-ben hasznos lenne...)

=== Meg egy másik, szintén nem nagy sikerekkel járó irány ============

dispatcher.executeDispatch(document, ".uno:FocusCellAddress", "", 0, Array())
dispatcher.executeDispatch(document, ".uno:WordRightSel", "", 0, Array())
dispatcher.executeDispatch(document, ".uno:Copy", "", 0, Array())

dispatcher.executeDispatch(document, ".uno:JumpToNextTable", "", 0, Array())

dispatcher.executeDispatch(document, ".uno:FocusCellAddress", "", 0, Array())
dispatcher.executeDispatch(document, ".uno:WordRightSel", "", 0, Array())
dispatcher.executeDispatch(document, ".uno:Paste", "", 0, Array())

Egyszerű verzió, korlátokkal:
- Csak az első 9 munkalapon működik jól. (Legtöbb esetben ez nem okoz gondot.)
- Ha a következő munkalap nem létezik, akkor hibaüzenetet kapsz.

Ha több munkalapod van, akkor az Sh értékét kell vizsgálni és amennyiben nagyobb 10-nél, akkor a Cell kivágását a 13. karaktertől kell kezdeni.


REM  *****  BASIC  *****

sub Main

Dim Range as String
Dim Sh as Integer
Dim Cell as String
Dim CellRef as String

Range = ThisComponent.currentSelection.absolutename
Sh = Val(Mid(Range, 10)) + 1
Cell = Mid(Range, 12)

CellRef = "$Munkalap" + Trim(Str(Sh)) + "." + Cell

document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "ToPoint"
args1(0).Value = CellRef

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())

end sub

-----
"Én vagyok a hülye, hogy leállok magával vitatkozni."

> Meglepő egyébként, hogy a makrók rögzítését így kellett lehetővé tenni

Ez azért van, mert nem működik jól.

Ha windowson kell esetleg, akkor AutoHotKey mindenképpen megér egy próbát! ;)