Macro di filtri

Non sapete dove scrivere? Scrivete qui!
Regole del forum
Solo richieste di aiuto. Per saluti e presentazioni utilizzate il forum Discussioni Generali e Presentazioni.
Rispondi
Jean Liuc
Messaggi: 2
Iscritto il: martedì 26 ottobre 2021, 15:18

Macro di filtri

Messaggio da Jean Liuc »

Buonasera,
sto riscontrando dei problemi con la registrazione della macro dei filtri che applico ad una tabella, per poi copiare il contenuto in un altro foglio. Premetto che vengo da Excel e qualcosina conosco di VBA..
Provo a spiegarvi in breve il tipo di lavoro che sto facendo...
Devo elaborare una serie di dati che vado ad importare (tramite macro) sul foglio 1 (importa).. Su un secondo foglio (dettaglio) del documento vado ad estrapolarmi i dati presenti sul primo foglio, tramite una formula presente all'interno delle celle. Dato che i dati da estrapolare dal foglio 1 possono essere "N", le celle senza alcun dato hanno questa formula che dal momento in cui vado a fare una esportazione dei dati presenti nel foglio 2 in ".csv", mi trova queste celle vuote inserendomi il separatore delle colonne. Per ovviare a questo problema ho sfruttato il filtro presente copiano i dati "puliti" in un terzo foglio (copia_dettaglio), così da avere il .csv pulito senza sporcizia. Manualmente questo processo funziona egregiamente, il problema è quando vado a registrare la macro per l'applicazione dei filtri e la copia dei dati, come se non registrasse affatto... Potete aiutarmi per piacere?
Vorrei non utilizzare la funzione dei filtri bensì dandomi la possibilità di estrarre i dati puliti dal foglio 2, senza utilizzare alcun filtro e copiarlo in un altro foglio.

Vi mostro il codice che mi fa visualizzare dopo la macro dei filtri:

Codice: Seleziona tutto

sub Main
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 ----------------------------------------------------------------------
rem dispatcher.executeDispatch(document, ".uno:DataFilterStandardFilter", "", 0, Array())

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


end sub
In allegato trovate il file di prova con i filtri applicati di come vorrei che sia. Spero di essere stato chiaro... Sono sicuro che riuscirete ad aiutarmi! :D :D :D :D
Grazie in anticipo!
Allegati
prova_filtri.ods
(24.62 KiB) Scaricato 87 volte
LibreOffice 7.2 si Windows 11
So di essere quello che sono..
Avatar utente
charlie
Site Admin
Site Admin
Messaggi: 8786
Iscritto il: mercoledì 19 dicembre 2012, 10:50
Contatta:

Re: Macro di filtri

Messaggio da charlie »

Ciao e benvenuto/a sul forum.
Se intanto ti vuoi presentare, farai cosa gradita. Puoi farlo in questa sezione -> viewforum.php?f=16

L’utente che apre un quesito si impegna: In caso di inosservanza saremo costretti ad azioni di “richiamo”, sospensione o chiusura del profilo utente.

Buon proseguimento.
charlie
macOS 14.3 Sonoma: Open Office 4.1.15 - LibreOffice 7.5.7.2
http://www.charlieopenoffice.altervista.org
Avatar utente
charlie
Site Admin
Site Admin
Messaggi: 8786
Iscritto il: mercoledì 19 dicembre 2012, 10:50
Contatta:

Re: Macro di filtri

Messaggio da charlie »

Jean Liuc ha scritto:quando vado a registrare la macro per l'applicazione dei filtri e la copia dei dati, come se non registrasse affatto...
Il registratore di macro non è uno strumento affidabile. Occorre scrivere autonomamente le macro.
charlie
macOS 14.3 Sonoma: Open Office 4.1.15 - LibreOffice 7.5.7.2
http://www.charlieopenoffice.altervista.org
Gaetanopr
Volontario
Volontario
Messaggi: 3300
Iscritto il: mercoledì 21 novembre 2012, 20:07

Re: Macro di filtri

Messaggio da Gaetanopr »

Ciao, più che una macro per i filtri io estrarrei i dati dal foglio1 al foglio2 senza utilizzare formule ma con una semplice macro come questa.
In questo modo nel foglio2 non hai formule in più e quando esporti il csv non avrai i separatori di campo.

Codice: Seleziona tutto

Sub Main
   Doc = thisComponent
   Sheet = Doc.Sheets.GetByIndex(0)   ' Foglio1
   c = Sheet.createCursor
   c.gotoEndOfUsedArea(false)
   LastRow = c.RangeAddress.EndRow
   
   Sheet2 = Doc.Sheets.GetByIndex(1)   ' Foglio2
   cc = Sheet2.createCursor
   cc.gotoEndOfUsedArea(false)
   LastRow2 = cc.RangeAddress.EndRow
   Sheet2.GetCellRangeByPosition(0, 1, 2, LastRow2).clearContents(1) ' cancello i valori precedenti
   
   
   Dati() = Sheet.GetCellRangeByPosition(0, 1, 2, LastRow).DataArray
   Sheet2.GetCellRangeByPosition(0, 1, 2, LastRow).SetDataArray(Dati)
   
End Sub
LibreOffice 7.2.2.2 windows 10
Openoffice 4.1.13 su windows 10
Rispondi