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ó.
- 2130 megtekintés
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."
- A hozzászóláshoz be kell jelentkezni
Ott nem ajánlja föl az irányított beillesztést. De köszi azért, hogy törted a fejed rajta!
- A hozzászóláshoz be kell jelentkezni
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."
- A hozzászóláshoz be kell jelentkezni
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())
- A hozzászóláshoz be kell jelentkezni
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."
- A hozzászóláshoz be kell jelentkezni
Megy remekül, köszi! :)
7 munkalapom van, bőven elég így...
A teljesség kedvéért jelzem, hogy itt: http://user.services.openoffice.org/hu/forum/viewtopic.php?f=7&t=982&p=… is kaptam egy megoldást (lényegében) a fenti kérdésre Kovács Tibortól.
- A hozzászóláshoz be kell jelentkezni
> 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.
- A hozzászóláshoz be kell jelentkezni
Ha windowson kell esetleg, akkor AutoHotKey mindenképpen megér egy próbát! ;)
- A hozzászóláshoz be kell jelentkezni
Kifejtenéd bővebben? Egyébként egyelőre nem windowson kell.
- A hozzászóláshoz be kell jelentkezni
- A hozzászóláshoz be kell jelentkezni
Köszi!
- A hozzászóláshoz be kell jelentkezni