Date: prev next · Thread: first prev next last
2022 Archives by date, by thread · List index


Ciao.
Ci saranno sicuramente metodi più eleganti per estendere la selezione,
ma se modifichi l'istruzione
args1(0).Value = "$B$2:$D$9"
in
args1(0).Value = "$B$2:$D"
quando esegui la macro il programma ti chiede se vuoi eseguirla su tutte le
celle adiacenti,
selezionate automaticamente (ovviamente non ci devono essere righe vuote in
mezzo).
Ciao
Carlo M.

Il giorno mar 10 mag 2022 alle ore 05:40 Andrea Nardi <a.nardi74@gmail.com>
ha scritto:

Gianpaolo,
Grazie della risposta. In effetti anche a me sembrava che mancasse roba
nel codice della macro come se la registrazione si fosse interrotta
anzitempo.
Per quanto concerne il fatto che l’area da ordinare sia fissa, non è un
problema. In effetti le colonne crescono di lunghezza mano mano che
aggiungo dati ma pensavo di risolvere il problema modificando la macro
nella riga di codice che individua l’area da ordinare scrivendo ad esempio
$B$2:$D$1000 in modo da avere un range maggiore oppure usare qualche altro
sistema per individuare l’ultima riga scritta sul foglio.
Proverò di nuovo a registrare la macro (prima di utilizzare il codice che
hai fornito tu) giusto per capire se la versione LO che uso (mi pare
7.3.2.3) non abbia qualche problema in merito.
Grazie

—
Distinti Saluti
Andrea NARDI

Il giorno 9 mag 2022, alle ore 23:27, gianpaolo_marcolongo <
gianpaolo_marcolongo@newwhitebear.net> ha scritto:

Ciao Andrea,

ho esaminato il tuo problema e mi sembra che nel basic fornito ci sia
qualcosa che manchi.

Io ho fatto registra macro. Poi ho selezionato l'area - da colonna b a
colonna d, perché sulla colonna a ho riportato i dati relativi a ROW - ho
aperto la finestra di dialogo  ordina, selezionato le due chiavi, chiave 1
colonna c, chiave 2 colonna d. E poi ok. terminato il sorto ho terminato la
registrazione della macro, assegnando un nome modulo e un nome macro.

Il basic relativo è quello riportato sotto.

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

Sub Main

End Sub


sub Ordinamento1
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")

rem
----------------------------------------------------------------------
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "ToPoint"
args1(0).Value = "$B$2:$D$9"

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

rem
----------------------------------------------------------------------
rem dispatcher.executeDispatch(document, ".uno:DataSort", "", 0, Array())

rem
----------------------------------------------------------------------
dim args3(11) as new com.sun.star.beans.PropertyValue
args3(0).Name = "ByRows"
args3(0).Value = true
args3(1).Name = "HasHeader"
args3(1).Value = false
args3(2).Name = "CaseSensitive"
args3(2).Value = false
args3(3).Name = "NaturalSort"
args3(3).Value = false
args3(4).Name = "IncludeAttribs"
args3(4).Value = true
args3(5).Name = "UserDefIndex"
args3(5).Value = 0
args3(6).Name = "Col1"
args3(6).Value = 3
args3(7).Name = "Ascending1"
args3(7).Value = true
args3(8).Name = "Col2"
args3(8).Value = 4
args3(9).Name = "Ascending2"
args3(9).Value = true
args3(10).Name = "IncludeComments"
args3(10).Value = false
args3(11).Name = "IncludeImages"
args3(11).Value = true

dispatcher.executeDispatch(document, ".uno:DataSort", "", 0, args3())


end sub

Come noti è assai più corposo del tuo. Poi in organizza macro ho
assegnato un pulsante. Chiusa questa fase ho ripristinato i dati da
trattare come in origine - ovviamente al termine della registrazione macro
il foglio è risultato sortato - ed ho eseguito il pulsante assegnato. Il
risultato è quello che tu volevi senza nessun intervento manuale come
volevi tu.
Il limite di questa macro è che area e colonne da sortare sono fisse e
non modificabili. Se questo risolve il tuo problema va benissimo ma se le
aree o le colonne possono variare no.
Gian Paolo


Il 08/05/22 15:51, Andrea Nardi ha scritto:
Salve a tutti. Ho il seguente problema:
un foglio calc con i seguenti dati:

    Col Col Col
    A    B    C
Row
2    1    1    b
3    2    1    a
4    3    3    d
5    4    7    h
6    5    7    g
7    6    4    j
8    7    4    f
9    8    8    k

Vorrei una macro per metterli in ordine secondo la colonna B e poi C.

Il risultato dovrebbe essere il seguente:

    Col Col Col
    A    B    C
Row
2    2    1    a
3    1    1    b
4    3    3    d
5    7    4    f
6    6    4    j
7    5    7    g
8    4    7    h
9    8    8    k

Ho utilizzato (come usualmente faccio a lavoro su Excel...) il comando
Registra macro.
Ho selezionato le 3 colonne dalla riga 2 alla 9, quindi ho fatto clic
sul pulsante [AZ] che fa comparire l'apposita finestra di dialogo per
l'ordinamento. Ho selezionato le due chiavi di ordinamento e fatto clic su
OK. Poi ho terminato la registrazione. Inserito il nome della macro e del
modulo (lasciando quello di default).
La macro registrata è questa:

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


sub Ordinamento
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")

rem
----------------------------------------------------------------------
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "ToPoint"
args1(0).Value = "$A$2:$C$9"

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

rem
----------------------------------------------------------------------
rem dispatcher.executeDispatch(document, ".uno:DataSort", "", 0,
Array())


end sub

Noto qualcosa di strano rispetto al codice che normalmente ottengo
facendo le stesse operazioni in Excel ed infatti dopo aver aggiunto un
pulsante collegato alla suddetta macro l'operazione non funziona.
Ho provato ad eliminare il rem dall'ultima riga di codice prima di end
sub ed in questo modo eseguendo la macro compare la finestra di dialogo per
l'ordinamento e cliccando su OK sembra funzionare l'operazione, ma io
vorrei che la cosa avvenisse in modo trasparente semplicemente premendo il
pulsante che ho aggiunto.
Cosa mi sfugge?

—
Distinti Saluti
Andrea NARDI



--
Come cancellarsi: E-mail users+unsubscribe@it.libreoffice.org
Problemi?
https://it.libreoffice.org/supporto/mailing-lists/come-cancellarsi/
Linee guida per postare + altro:
https://wiki.documentfoundation.org/Local_Mailing_Lists/it
Archivio della lista: https://listarchives.libreoffice.org/it/users/
Privacy Policy: https://www.documentfoundation.org/privacy

--
Come cancellarsi: E-mail users+unsubscribe@it.libreoffice.org
Problemi?
https://it.libreoffice.org/supporto/mailing-lists/come-cancellarsi/
Linee guida per postare + altro:
https://wiki.documentfoundation.org/Local_Mailing_Lists/it
Archivio della lista: https://listarchives.libreoffice.org/it/users/
Privacy Policy: https://www.documentfoundation.org/privacy


-- 
Come cancellarsi: E-mail users+unsubscribe@it.libreoffice.org
Problemi? https://it.libreoffice.org/supporto/mailing-lists/come-cancellarsi/
Linee guida per postare + altro: https://wiki.documentfoundation.org/Local_Mailing_Lists/it
Archivio della lista: https://listarchives.libreoffice.org/it/users/
Privacy Policy: https://www.documentfoundation.org/privacy

Context


Privacy Policy | Impressum (Legal Info) | Copyright information: Unless otherwise specified, all text and images on this website are licensed under the Creative Commons Attribution-Share Alike 3.0 License. This does not include the source code of LibreOffice, which is licensed under the Mozilla Public License (MPLv2). "LibreOffice" and "The Document Foundation" are registered trademarks of their corresponding registered owners or are in actual use as trademarks in one or more countries. Their respective logos and icons are also subject to international copyright laws. Use thereof is explained in our trademark policy.