Grazie Una buona idea — Distinti Saluti Andrea NARDI
> Il giorno 10 mag 2022, alle ore 09:19, Carlo Magistrelli > <ca...@magistrelli.it> ha scritto: > > > 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.nard...@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_marcolo...@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+unsubscr...@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+unsubscr...@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+unsubscr...@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