Re: [it-users] Registrare Macro per ordinamento
Grazie Una buona idea — Distinti Saluti Andrea NARDI > Il giorno 10 mag 2022, alle ore 09:19, Carlo Magistrelli > 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 >> 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 >> > 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 >> >> ABC >> >> Row >> >> 211b >> >> 321a >> >> 433d >> >> 5
Re: [it-users] Registrare Macro per ordinamento
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 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 > >> ABC > >> Row > >> 211b > >> 321a > >> 433d > >> 547h > >> 657g > >> 764j > >> 874f > >> 988k > >> > >> Vorrei una macro per metterli in ordine secondo la colonna B e poi C. > >> > >> Il risultato dovrebbe essere il seguente: > >> > >> Col Col Col > >> ABC > >> Row > >> 2
Re: [it-users] Registrare Macro per ordinamento
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 > 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 >> ABC >> Row >> 211b >> 321a >> 433d >> 547h >> 657g >> 764j >> 874f >> 988k >> >> Vorrei una macro per metterli in ordine secondo la colonna B e poi C. >> >> Il risultato dovrebbe essere il seguente: >> >> Col Col Col >> ABC >> Row >> 221a >> 311b >> 433d >> 574f >> 664j >> 757g >> 847h >> 988k >> >> 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 * >>
Re: [it-users] Registrare Macro per ordinamento
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 cli
[it-users] Registrare Macro per ordinamento
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