Filtro standard attraverso Macro
Filtro standard attraverso Macro
Un saluto a tutto il forum.
Qualcuno di voi saprebbe dirmi se esiste un modo di applicare i filtri standard automaticamente attraverso una macro?
Anche se sembra una richiesta strana, visto che attraverso "Dati" --> "Altri Filtri" --> "Filtro Standard", ci si arriva lo stesso.
Il problema è che lavoro con una miriade di tabelle che sono riuscito ad automatizzare con delle macro.
Però in mezzo a questi comandi macro devo fare una scrematura con questi filtri, e purtroppo devo farli manualmente, perdendo molto tempo.
Se ci fosse un modo per automatizzare anche queste con delle macro, a questo punto, il computer riuscirebbe a fare tutto.
Ho provato con "Registra macro", ma non funziona.
Vi prego di aiutarmi.
Vi ringrazio.
Qualcuno di voi saprebbe dirmi se esiste un modo di applicare i filtri standard automaticamente attraverso una macro?
Anche se sembra una richiesta strana, visto che attraverso "Dati" --> "Altri Filtri" --> "Filtro Standard", ci si arriva lo stesso.
Il problema è che lavoro con una miriade di tabelle che sono riuscito ad automatizzare con delle macro.
Però in mezzo a questi comandi macro devo fare una scrematura con questi filtri, e purtroppo devo farli manualmente, perdendo molto tempo.
Se ci fosse un modo per automatizzare anche queste con delle macro, a questo punto, il computer riuscirebbe a fare tutto.
Ho provato con "Registra macro", ma non funziona.
Vi prego di aiutarmi.
Vi ringrazio.
OpenOffice 3.1 su Ubuntu 12.04
Re: Filtro standard attraverso Macro
Allega un file di esempio con dati e risultato desiderato
Tieni presente che è possibile filtrare nescondendo le righe oppure copiare i dati filtrati su un altro foglio
Tieni presente che è possibile filtrare nescondendo le righe oppure copiare i dati filtrati su un altro foglio
-------------------
Libre Office 7.5.3.2 su Windows 11
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
Libre Office 7.5.3.2 su Windows 11
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
Re: Filtro standard attraverso Macro
Le operazioni che facevo manualmente erano queste:
- Selezionavo tutta la tabella --> "Dati" --> "Altri filtri" --> "Filtro standard" -->" Nome campo": Codice articolo" --> "Valore": Non Vuoto -->"Opzioni": Nessun duplicato
In pratica le righe senza codice articolo devono essere eliminate. Poi devono essere eliminate le righe duplicate, lasciandone solo 1.
- Copiavo il risultato in un foglio nuovo, cancellando il vecchio.
- selezionavo SOLO la colonna codice articolo (e non tutta la tabella come in precedenza. Poi: "Dati" --> "Altri filtri" --> "Filtro standard" -->" Nome campo": Codice articolo" --> "Valore": Non Vuoto -->"Opzioni": Nessun duplicato
Questo mi toglieva le righe con codice duplicato, lasciando solamente 1 riga con quel codice.
- Copiavo il risultato in un foglio nuovo, cancellando il vecchio.
Dimmi che riesci a fare tutto questo con una macro e ti faccio un monumento...
Grazie mille
- Selezionavo tutta la tabella --> "Dati" --> "Altri filtri" --> "Filtro standard" -->" Nome campo": Codice articolo" --> "Valore": Non Vuoto -->"Opzioni": Nessun duplicato
In pratica le righe senza codice articolo devono essere eliminate. Poi devono essere eliminate le righe duplicate, lasciandone solo 1.
- Copiavo il risultato in un foglio nuovo, cancellando il vecchio.
- selezionavo SOLO la colonna codice articolo (e non tutta la tabella come in precedenza. Poi: "Dati" --> "Altri filtri" --> "Filtro standard" -->" Nome campo": Codice articolo" --> "Valore": Non Vuoto -->"Opzioni": Nessun duplicato
Questo mi toglieva le righe con codice duplicato, lasciando solamente 1 riga con quel codice.
- Copiavo il risultato in un foglio nuovo, cancellando il vecchio.
Dimmi che riesci a fare tutto questo con una macro e ti faccio un monumento...
Grazie mille
- Allegati
-
- Esempio.xls
- Questo è un file di esempio, ma alcune colonne possono variare di volta in volta. Quello che non varia è la colonna codice articolo.
- (15 KiB) Scaricato 138 volte
OpenOffice 3.1 su Ubuntu 12.04
Re: Filtro standard attraverso Macro
Ciao, mi sembra non ci sia un motivo plausibile (es. Importazione file) per usare un formato non nativo di Open Office. Sei pregato di postare un file di Calc in formato .ods e non un formato e Office Excel.
Grazie.
Grazie.
charlie
macOS 14.4.1 Sonoma: Open Office 4.1.15 - LibreOffice 7.5.7.2
http://www.charlieopenoffice.altervista.org
macOS 14.4.1 Sonoma: Open Office 4.1.15 - LibreOffice 7.5.7.2
http://www.charlieopenoffice.altervista.org
Re: Filtro standard attraverso Macro
Anche perché la macro non funzionerà col formato xls
-------------------
Libre Office 7.5.3.2 su Windows 11
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
Libre Office 7.5.3.2 su Windows 11
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
Re: Filtro standard attraverso Macro
Vi chiedo scusa... non avevo pensato all'estensione del file. Il fatto è che mi mandano i file con estensione xls.
io ci lavoro con openoffice, ma mi sono dimenticato di salvare come file openoffice.
Ora è in ods.
Vi chiedo ancora scusa
io ci lavoro con openoffice, ma mi sono dimenticato di salvare come file openoffice.
Ora è in ods.
Vi chiedo ancora scusa
- Allegati
-
- Esempio.ods
- (22.69 KiB) Scaricato 157 volte
OpenOffice 3.1 su Ubuntu 12.04
Re: Filtro standard attraverso Macro
Prova questa che copia nel foglio2 il risultato del filtro
Codice: Seleziona tutto
sub filtracolonna
rem parametri
NomeFoglio="Foglio1"
numColonna=1 'riferimento relativo rispetto all'area scelta.la prima col è 0
rem fine parametri
oDoc = ThisComponent
sheet= oDoc.sheets.getbyname(nomefoglio)
sheet1= thiscomponent.sheets(1)
oCursor = Sheet.createcursor
oCursor.gotoendofusedarea(false)
nEndColumn = oCursor.rangeaddress.EndColumn
nEndrow = oCursor.rangeaddress.Endrow
oCursor.gotoendofusedarea(false)
nEndColumn = oCursor.rangeaddress.EndColumn
nEndrow = oCursor.rangeaddress.Endrow
rng=sheet.getcellrangebyPosition(0,0,nEndColumn,nEndrow)
orange=sheet.getcellrangebyPosition(numColonna,3,numColonna,nEndrow)
rem prepara filtro
Dim oFields(0) As New com.sun.star.sheet.TableFilterField
REM If argument is True, creates an empty filter descriptor.
oFilterDesc = oRange.createFilterDescriptor(false)
With oFields(0)
.Connection = com.sun.star.sheet.FilterConnection.AND
.Field = numColonna
.IsNumeric = False
.Operator = com.sun.star.sheet.FilterOperator.NOT_EMPTY
End With
oFilterDesc.setFilterFields(oFields())
oFilterDesc.ContainsHeader = False
oFilterDesc.UseRegularExpressions = True
oFilterDesc.SkipDuplicates = True
oFilterDesc.CopyOutputData = FALSE
oRange.filter(oFilterDesc)
oEmptyRanges = oRange.queryEmptyCells()
For Each oEmptyRange in oEmptyRanges
oEmptyRange.Rows.IsVisible = False
Next
oRanges = rng.queryVisibleCells()
oCell = Sheet1.getcellrangebyName("A1") ' destinazione
oTargetRange = copyTiledRanges(oDoc, oRanges, oCell, bValues)
sheet1.Columns.OptimalWidth = True
'---------- ripristina il foglio1
oFilterDesc = Sheet.createFilterDescriptor(True)
Sheet.filter(oFilterDesc)
end sub
Function copyTiledRanges(oDoc,oRanges,oTopLeft, bVal As Boolean)
Dim oTargetSheet, oEnum, aTgt, oTgtRg, oNext, aNext, aPrev, iRow&, bCalc As Boolean
Dim oResult as New com.sun.star.table.CellRangeAddress
bCalc = oDoc.isAutomaticCalculationEnabled()
oDoc.enableAutomaticCalculation(False)
aTgt = oTopLeft.getCellAddress()
iRow = aTgt.Row
oTargetSheet = oDoc.getSheets.getByIndex(aTgt.Sheet)
oResult.Sheet = aTgt.Sheet
oResult.StartColumn = aTgt.Column
oResult.StartRow = aTgt.Row
oEnum = oRanges.createEnumeration()
while oEnum.hasMoreElements()
oNext = oEnum.nextElement()
aNext = oNext.getRangeAddress()
if not isUnoStruct(aPrev) then aPrev = aNext
REM SheetCellRanges-collections are sorted ascending by StartColumn and StartRow
REM therefore we go down column by column
If aNext.StartColumn > aPrev.StartColumn then
'start new column at top row, right of previous range
aTgt.Column = aTgt.Column + aPrev.EndColumn - aPrev.StartColumn +1
aTgt.Row = iRow
elseIf aNext.StartRow > aPrev.StartRow then
'target cell below the previous range in same column
aTgt.Row = aTgt.Row + aPrev.EndRow - aPrev.StartRow +1
endif
oTargetSheet.copyRange(aTgt, aNext)
if bVal Then
oTgtRg = oTargetSheet.getCellRangeByPosition( _
aTgt.Column, aTgt.Row, _
aTgt.Column + aNext.EndColumn - aNext.StartColumn, _
aTgt.Row + aNext.EndRow - aNext.StartRow _
)
oTgtRg.setDataArray(oNext.getDataArray())
endif
aPrev = aNext
wend
oResult.EndColumn = aTgt.Column + aNext.EndColumn - aNext.StartColumn
oResult.EndRow = aTgt.Row + aNext.EndRow - aNext.StartRow
oDoc.enableAutomaticCalculation(bCalc)
copyTiledRanges = oTargetSheet.getCellRangeByPosition( _
oResult.StartColumn, oResult.StartRow, oResult.EndColumn, oResult.EndRow )
End Function
-------------------
Libre Office 7.5.3.2 su Windows 11
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
Libre Office 7.5.3.2 su Windows 11
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
Re: Filtro standard attraverso Macro
Patel, innanzitutto ti ringrazio per la risposta. Sei molto gentile.
Purtroppo, quando eseguo la macro, mi si blocca e mi indica:
Valore o tipo di dati non ammesso.
Indice al di fuori dell'area definita
Poi mi sottolinea questa riga di codice:
sheet1 = thiscomponent.sheets(1)
Purtroppo, quando eseguo la macro, mi si blocca e mi indica:
Valore o tipo di dati non ammesso.
Indice al di fuori dell'area definita
Poi mi sottolinea questa riga di codice:
sheet1 = thiscomponent.sheets(1)
OpenOffice 3.1 su Ubuntu 12.04
Re: Filtro standard attraverso Macro
Devi aggiungere tu un foglio sul quale verrà copiata la tabella filtrata
patel ha scritto:Prova questa che copia nel foglio2 il risultato del filtro
-------------------
Libre Office 7.5.3.2 su Windows 11
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
Libre Office 7.5.3.2 su Windows 11
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
Re: Filtro standard attraverso Macro
GRANDE..... Patel !!! funziona!!!
Ti chiedo 1 ultimo favore... scusa non mandarmi a quel paese...
ho provato il tuo script e va bene, ma anzichè avere un unico script, dovrei avere 1 script per:
- Selezionare tutta la tabella --> "Dati" --> "Altri filtri" --> "Filtro standard" -->" Nome campo": Codice articolo" --> "Valore": Non Vuoto -->"Opzioni": Nessun duplicato
e un altro script per:
selezionare SOLO la colonna "codice articolo" (e non tutta la tabella come in precedenza.
Poi: "Dati" --> "Altri filtri" --> "Filtro standard" -->" Nome campo": Codice articolo" --> "Valore": Non Vuoto -->"Opzioni": Nessun duplicato
Cioè dividere le 2 azioni che sono comprese nel tuo unico script.
Mi sono accorto che devo correggere manualmente alcune cose tra uno script e l'altro.
Grazie mille per quello che hai fatto.
Ti chiedo 1 ultimo favore... scusa non mandarmi a quel paese...
ho provato il tuo script e va bene, ma anzichè avere un unico script, dovrei avere 1 script per:
- Selezionare tutta la tabella --> "Dati" --> "Altri filtri" --> "Filtro standard" -->" Nome campo": Codice articolo" --> "Valore": Non Vuoto -->"Opzioni": Nessun duplicato
e un altro script per:
selezionare SOLO la colonna "codice articolo" (e non tutta la tabella come in precedenza.
Poi: "Dati" --> "Altri filtri" --> "Filtro standard" -->" Nome campo": Codice articolo" --> "Valore": Non Vuoto -->"Opzioni": Nessun duplicato
Cioè dividere le 2 azioni che sono comprese nel tuo unico script.
Mi sono accorto che devo correggere manualmente alcune cose tra uno script e l'altro.
Grazie mille per quello che hai fatto.
- Allegati
-
- Esempio.ods
- (22.69 KiB) Scaricato 132 volte
OpenOffice 3.1 su Ubuntu 12.04
Re: Filtro standard attraverso Macro
il mio codice lavora soltanto sulla colonna codice articolo per togliere i duplicati, quindi non capisco cosa vuoi dividere
-------------------
Libre Office 7.5.3.2 su Windows 11
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
Libre Office 7.5.3.2 su Windows 11
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
Re: Filtro standard attraverso Macro
la prima azione dovrebbe togliermi tutte le righe identiche. in pratica sono doppioni.(hanno quindi lo stesso "codice articolo", ma hanno anche gli altri campi uguali)
Dovrebbe avere la stessa azione manuale:
Selezione di TUTTA la tabella --> "Dati" --> "Altri filtri" --> "Filtro standard" -->" Nome campo": Codice articolo" --> "Valore": NON VUOTO -->"Opzioni": Nessun duplicato - (Il campo codice articolo non deve essere vuoto).
Dopo, la seconda, serve per togliermi anche le righe che hanno lo stesso "codice articolo", che non sono identiche in tutti gli altri campi.... sono duplicati solo per quello che riguarda il campo "Codice articolo" (e per questo non sono stati eliminati precedentemente dal primo script.
Dovrebbe avere la stessa azione manuale:
Selezione SOLO della colonna "codice articolo" (e non tutta la tabella come in precedenza. Poi: "Dati" --> "Altri filtri" --> "Filtro standard" -->" Nome campo": Codice articolo" --> "Valore": Non Vuoto -->"Opzioni": Nessun duplicato
Questo perchè devo fare gli aggiornamenti di prezzo. Ho doppioni che devo togliere per non creare confusione... (qui deve agire il primo script) . Faccio l'aggiornamento prezzi ... Poi devo togliere articoli nel database che hanno lo stesso codice, quindi in pratica è lo stesso articolo, ma ha una descrizione diversa, perchè obsoleta, e quindi deve essere eliminata. (secondo script)
Fra la prima e seconda azione devo fare gli aggiornamenti..
Da quello che mi hai scritto, lo script che hai messo servirebbe come seconda azione, cioè mi toglie tutte le righe che hanno lo stesso codice, a prescindere se gli altri campi sono uguali o meno?
Dovrebbe avere la stessa azione manuale:
Selezione di TUTTA la tabella --> "Dati" --> "Altri filtri" --> "Filtro standard" -->" Nome campo": Codice articolo" --> "Valore": NON VUOTO -->"Opzioni": Nessun duplicato - (Il campo codice articolo non deve essere vuoto).
Dopo, la seconda, serve per togliermi anche le righe che hanno lo stesso "codice articolo", che non sono identiche in tutti gli altri campi.... sono duplicati solo per quello che riguarda il campo "Codice articolo" (e per questo non sono stati eliminati precedentemente dal primo script.
Dovrebbe avere la stessa azione manuale:
Selezione SOLO della colonna "codice articolo" (e non tutta la tabella come in precedenza. Poi: "Dati" --> "Altri filtri" --> "Filtro standard" -->" Nome campo": Codice articolo" --> "Valore": Non Vuoto -->"Opzioni": Nessun duplicato
Questo perchè devo fare gli aggiornamenti di prezzo. Ho doppioni che devo togliere per non creare confusione... (qui deve agire il primo script) . Faccio l'aggiornamento prezzi ... Poi devo togliere articoli nel database che hanno lo stesso codice, quindi in pratica è lo stesso articolo, ma ha una descrizione diversa, perchè obsoleta, e quindi deve essere eliminata. (secondo script)
Fra la prima e seconda azione devo fare gli aggiornamenti..
Da quello che mi hai scritto, lo script che hai messo servirebbe come seconda azione, cioè mi toglie tutte le righe che hanno lo stesso codice, a prescindere se gli altri campi sono uguali o meno?
OpenOffice 3.1 su Ubuntu 12.04
Re: Filtro standard attraverso Macro
Toglie tutte le righe che hanno lo stesso codice, a prescindere se gli altri campi sono uguali o meno e toglie anche quelle col codice vuoto.
Non so fare di meglio
Non so fare di meglio
-------------------
Libre Office 7.5.3.2 su Windows 11
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
Libre Office 7.5.3.2 su Windows 11
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
Re: Filtro standard attraverso Macro
Grazie lo stesso Patel. Sei stato molto gentile.
OpenOffice 3.1 su Ubuntu 12.04