[Risolto] Registrazione con Macro di filtri

Discussioni sull'applicazione per i fogli di calcolo
Rispondi
Sep69
Messaggi: 15
Iscritto il: venerdì 5 luglio 2019, 10:11

[Risolto] Registrazione con Macro di filtri

Messaggio da Sep69 »

Buongiorno,
sto muovendo i primi passi nel mondo open office usando sino ad ora sempre excel.
Ho un problema che non riesco a capire:
Voglio attivare pulsanti che mi facciano una selezione automatica applicando il filtro su di una colonna.
Ho provato a registrare la macro mentre faccio l'operazione, ma non viene fatta alcuna azione.
Io clicco sulla colonna vado in filtri standard e inserisco il valore da filtrare.
Ho guardato nel forum ma non sono riuscito a trovare o capire come risolvere.
Nel file allegato vorrei inserire un pulsante che filtri e stampi un reparto nella colonna B.

Grazie per l'attenzione.

Quando eseguo...il nulla e nella macro scrive solo

Codice: Seleziona tutto

sub Filtro
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())
Allegati
Filtro Reparti.ods
(101.88 KiB) Scaricato 128 volte
Ultima modifica di Sep69 il martedì 16 luglio 2019, 9:32, modificato 7 volte in totale.
OpenOffice 4.1.6 Windows 2010 Pro
Avatar utente
charlie
Site Admin
Site Admin
Messaggi: 8807
Iscritto il: mercoledì 19 dicembre 2012, 10:50
Contatta:

Re: Registrazione con Macro di filtri

Messaggio da charlie »

Ciao e benvenuto/a sul forum.
Se intanto ti vuoi presentare puoi farlo in questa sezione -> viewforum.php?f=16
Per una panoramica delle regole del forum puoi consultare il Manuale di sopravvivenza -> http://forum.openoffice.org/it/forum/vi ... hp?f=1&t=2

Buon proseguimento.

Il registratore di macro di OO è uno strumento imperfetto che, anche quando funziona, genera codice poco comprensibile.
charlie
macOS 14.4.1 Sonoma: Open Office 4.1.15 - LibreOffice 7.5.7.2
http://www.charlieopenoffice.altervista.org
patel
Volontario attivo
Volontario attivo
Messaggi: 4020
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: Registrazione con Macro di filtri

Messaggio da patel »

Al contrario di Excel su OO il registratore è molto limitato e produce codice poco comprensibile e quindi poco utilizzabile.
per imparare a programmare http://www.pitonyak.org/oo.php
-------------------
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
Sep69
Messaggi: 15
Iscritto il: venerdì 5 luglio 2019, 10:11

Re: Registrazione con Macro di filtri

Messaggio da Sep69 »

Grazie della risposta, prendo atto di non utilizzare il registratore di macro, era una scorciatoia per fare prima. Avete mica del codice che fa già questo mestiere, ovvero filtrare una tabella in base ad una costante che metterei fissa nelle righe del programma su di uno dei campi?

Si, sono nuovissimo e non perderò l'occasione di presentarmi al link che mi avete dato.

Grazie mille,

Sergio.
OpenOffice 4.1.6 Windows 2010 Pro
patel
Volontario attivo
Volontario attivo
Messaggi: 4020
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: Registrazione con Macro di filtri

Messaggio da patel »

prova questa

Codice: Seleziona tutto

Sub filtro()
    Dim oFields(0) As New com.sun.star.sheet.TableFilterField
    oSheet = ThisComponent.Sheets.getByName("Listino_Personalizzato")
    oRange = oSheet.getCellRangeByName("A4:J2429")
    oFilterDesc = oRange.createFilterDescriptor(true)
    With oFields(0)
         .Field = 1 ' colonna B, la numerazione parte da zero
         .IsNumeric = False ' Use a string, not a number.
         .StringValue = "Bar" ' filtro
         .Operator = com.sun.star.sheet.FilterOperator.EQUAL            
    End With
    With oFilterDesc
         .ContainsHeader = FALSE
         .setFilterFields(oFields())
    End With
    oRange.filter(oFilterDesc)
End Sub
-------------------
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
Sep69
Messaggi: 15
Iscritto il: venerdì 5 luglio 2019, 10:11

Re: Registrazione con Macro di filtri

Messaggio da Sep69 »

:super: :bravo:

Grazie mille funziona!!! :) ho attaccato poi il processo di stampa ed il gioco fatto.
Vista la gentilezza ti posso chiedere ancora una cosina?
vorrei filtrare non "Bar" ma che contiene "Bar" ho provato con "*Bar*" o "%Bar% o al posto di = mettere un Like, insomma non so come sintatticamente fare un contiene.
OpenOffice 4.1.6 Windows 2010 Pro
Gaetanopr
Volontario
Volontario
Messaggi: 3300
Iscritto il: mercoledì 21 novembre 2012, 20:07

Re: Registrazione con Macro di filtri

Messaggio da Gaetanopr »

Devi usare le espressioni regolari, cambia in questo modo

Codice: Seleziona tutto

Sub filtro()
    Dim oFields(0) As New com.sun.star.sheet.TableFilterField
    oSheet = ThisComponent.Sheets.getByName("Listino_Personalizzato")
    oRange = oSheet.getCellRangeByName("A4:J2429")
    oFilterDesc = oRange.createFilterDescriptor(true)
    With oFields(0)
         .Field = 1 ' colonna B, la numerazione parte da zero
         .IsNumeric = False ' Use a string, not a number.
         .StringValue = ".*Bar.*"
         .Operator = com.sun.star.sheet.FilterOperator.EQUAL            
    End With
    With oFilterDesc
         .UseRegularExpressions = True
         .ContainsHeader = FALSE
         .setFilterFields(oFields())
    End With
    oRange.filter(oFilterDesc)
End Sub
LibreOffice 7.2.2.2 windows 10
Openoffice 4.1.13 su windows 10
Sep69
Messaggi: 15
Iscritto il: venerdì 5 luglio 2019, 10:11

Re: Registrazione con Macro di filtri

Messaggio da Sep69 »

Buongiorno Gaetanopr,
ho provato ma ".*Bar.*" non mi filtra nulla, mi restituisce vuoto.
Inoltre vorrei fare un filtro su valori not null, mi sapreste indicare come procedere?

Scusate, sono un neofita, mi piacerebbe approfondire openoffice e un po di iterazione automatica tramite vb. :D
OpenOffice 4.1.6 Windows 2010 Pro
Gaetanopr
Volontario
Volontario
Messaggi: 3300
Iscritto il: mercoledì 21 novembre 2012, 20:07

Re: Registrazione con Macro di filtri

Messaggio da Gaetanopr »

Sep69 ha scritto: ho provato ma ".*Bar.*" non mi filtra nulla, mi restituisce vuoto.
hai copiato tutta la macro? devi pure aggiungere questa parte

Codice: Seleziona tutto

.UseRegularExpressions = True
Sep69 ha scritto: Inoltre vorrei fare un filtro su valori not null, mi sapreste indicare come procedere?
https://www.openoffice.org/api/docs/com ... rator.html
LibreOffice 7.2.2.2 windows 10
Openoffice 4.1.13 su windows 10
Sep69
Messaggi: 15
Iscritto il: venerdì 5 luglio 2019, 10:11

Re: Registrazione con Macro di filtri

Messaggio da Sep69 »

Si grazie hai ragione, non avevo copiato la sub in toto ma modificato solo l'argomento ".*Bar.*" non notando useregular in fondo.
Mi succede però una cosa strana, inserendo solo quelle modifiche non mi fa più la modifica della cella f2 e non ne capisco il motivo, tra l'altro parte molto complessa per un semplice cambio di stringa di una cella, ma presa così dal registratore macro. Abituato al CObol a all'RPG di sistemi mainframe, tutto un altro mondo, sono i miei primissimi passi in vb. Grazie per il link, per togliere con il vb il filtro applicato come devo compontarmi?

Codice: Seleziona tutto

Sub Bar()
    Dim oFields(0) As New com.sun.star.sheet.TableFilterField
    oSheet = ThisComponent.Sheets.getByName("Listino_Personalizzato")
    oRange = oSheet.getCellRangeByName("A4:J2429")
    oFilterDesc = oRange.createFilterDescriptor(true)
    With oFields(0)
         .Field = 1 ' colonna B, la numerazione parte da zero
         .IsNumeric = False ' Use a string, not a number.
         .StringValue = ".*Bar.*" ' filtro
         .Operator = com.sun.star.sheet.FilterOperator.EQUAL            
    End With
    With oFilterDesc
    	 .UseRegularExpressions = True
         .ContainsHeader = FALSE
         .setFilterFields(oFields())
    End With
    oRange.filter(oFilterDesc)
 
 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 = "$F$2"

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

dim args2(0) as new com.sun.star.beans.PropertyValue
args2(0).Name = "StringName"
args2(0).Value = "C0046 Corallo Hotel Quadrifoglio - Bar"

dispatcher.executeDispatch(document, ".uno:EnterString", "", 0, args2())   


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

rem ----------------------------------------------------------------------
dim args3(0) as new com.sun.star.beans.PropertyValue
args3(0).Name = "ToPoint"
args3(0).Value = "$F$2"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args3())
dim args4(0) as new com.sun.star.beans.PropertyValue
args4(0).Name = "StringName"
args4(0).Value = "C0046 Corallo Hotel Quadrifoglio "

dispatcher.executeDispatch(document, ".uno:EnterString", "", 0, args4())

rem ----------------------------------------------------------------------
dim args6(0) as new com.sun.star.beans.PropertyValue
args6(0).Name = "Sel"
args6(0).Value = false

dispatcher.executeDispatch(document, ".uno:GoToStartOfRow", "", 0, args6())
End Sub
OpenOffice 4.1.6 Windows 2010 Pro
Avatar utente
charlie
Site Admin
Site Admin
Messaggi: 8807
Iscritto il: mercoledì 19 dicembre 2012, 10:50
Contatta:

Re: Registrazione con Macro di filtri

Messaggio da charlie »

Per ragioni di leggibilità sei pregato di formattare il codice quando lo alleghi usando l'apposita funzione del forum.
charlie
macOS 14.4.1 Sonoma: Open Office 4.1.15 - LibreOffice 7.5.7.2
http://www.charlieopenoffice.altervista.org
Sep69
Messaggi: 15
Iscritto il: venerdì 5 luglio 2019, 10:11

Re: Registrazione con Macro di filtri

Messaggio da Sep69 »

scusa, charlie, mia inesperienza nella chat cerco la funzione che dici.
OpenOffice 4.1.6 Windows 2010 Pro
Gaetanopr
Volontario
Volontario
Messaggi: 3300
Iscritto il: mercoledì 21 novembre 2012, 20:07

Re: Registrazione con Macro di filtri

Messaggio da Gaetanopr »

Ho provato e funziona la macro registrata, comunque per cambiare il testo alla stringa fai in questo modo

Codice: Seleziona tutto

oSheet.getCellRangeByName("F2").String = "C0046 Corallo Hotel Quadrifoglio - Bar"
LibreOffice 7.2.2.2 windows 10
Openoffice 4.1.13 su windows 10
Avatar utente
charlie
Site Admin
Site Admin
Messaggi: 8807
Iscritto il: mercoledì 19 dicembre 2012, 10:50
Contatta:

Re: Registrazione con Macro di filtri

Messaggio da charlie »

Sep69 ha scritto:scusa, charlie, mia inesperienza nella chat cerco la funzione che dici.
Schermata 2019-07-09 alle 16.37.16.png
charlie
macOS 14.4.1 Sonoma: Open Office 4.1.15 - LibreOffice 7.5.7.2
http://www.charlieopenoffice.altervista.org
Sep69
Messaggi: 15
Iscritto il: venerdì 5 luglio 2019, 10:11

Re: Registrazione con Macro di filtri

Messaggio da Sep69 »

Grazie Charlie per la dritta e per il manuale che hai creato e condiviso in pdf sulla programmazione, con calma mi ci darò un'occhiata.
Grazie per le preziosa mano che mi avete dato dimostrandovi tempestivi e precisi. Allego il file che ho creato grazie ai vostri spunti giocando un po con i filtri.
Ho ancora un problema che non riesco a capire, vorrei che dopo il processo di filtro e stampa, il filtro venga rimosso, anche perchè visivamente non si capisce dove sia filtrata la tabella e che il valore di F2 ritorni "C0046 Corallo Hotel Quadrifoglio".
Ho provato prima della chiusura della sub a inserire questa riga
oSheet.getCellRangeByName("F2").String = "C0046 Corallo Hotel Quadrifoglio"
ma il risultato è che nella stampa anche se messa dopo il comando di stampa sembra prevalere sulla valorizzazione precedente con la scritta e terminato il processo di stampa il filtro non si toglie come non eseguisse la parte.

Vi allego per farvi vedere il file ed ecco la sub che avevo in mente

Codice: Seleziona tutto

Sub Bar2()
    Dim oFields(0) As New com.sun.star.sheet.TableFilterField
    oSheet = ThisComponent.Sheets.getByName("Listino_Personalizzato")
    oRange = oSheet.getCellRangeByName("A4:J2429")
    oFilterDesc = oRange.createFilterDescriptor(true)
    With oFields(0)
         .Field = 1 ' colonna B, la numerazione parte da zero
         .IsNumeric = False ' Use a string, not a number.
         .StringValue = ".*Bar.*" ' filtro
         .Operator = com.sun.star.sheet.FilterOperator.EQUAL            
    End With
    With oFilterDesc
  	  	 .UseRegularExpressions = True
         .ContainsHeader = FALSE
         .setFilterFields(oFields())
    End With
    oRange.filter(oFilterDesc)

rem define variables
dim document   as object
dim dispatcher as object

rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

oSheet.getCellRangeByName("F2").String = "C0046 Corallo Hotel Quadrifoglio - Bar"
dispatcher.executeDispatch(document, ".uno:PrintDefault", "", 0, Array()) 'Stampa
oSheet.getCellRangeByName("F2").String = "C0046 Corallo Hotel Quadrifoglio"
    With oFields(0)
         .Field = 1 ' colonna B, la numerazione parte da zero
         .IsNumeric = False ' Use a string, not a number.
     End With
    With oFilterDesc
  	  	 .UseRegularExpressions = True
         .ContainsHeader = FALSE
         .setFilterFields(oFields())
    End With
    oRange.filter(oFilterDesc)
End Sub
Allegati
Filtro Reparti.ods
(115.1 KiB) Scaricato 90 volte
OpenOffice 4.1.6 Windows 2010 Pro
Gaetanopr
Volontario
Volontario
Messaggi: 3300
Iscritto il: mercoledì 21 novembre 2012, 20:07

Re: Registrazione con Macro di filtri

Messaggio da Gaetanopr »

Sep69 ha scritto: Ho ancora un problema che non riesco a capire, vorrei che dopo il processo di filtro e stampa, il filtro venga rimosso, anche perchè visivamente non si capisce dove sia filtrata la tabella e che il valore di F2 ritorni "C0046 Corallo Hotel Quadrifoglio".
La macro viene eseguita in pochi attimi e la stampa si avvia dopo la seconda modifica della cella F2, quindi devi variare la cella, stampare attendere un paio di secondi e cambiare il valore in F2
Allegati
Filtro Reparti.ods
(113.9 KiB) Scaricato 70 volte
LibreOffice 7.2.2.2 windows 10
Openoffice 4.1.13 su windows 10
Sep69
Messaggi: 15
Iscritto il: venerdì 5 luglio 2019, 10:11

Re: Registrazione con Macro di filtri

Messaggio da Sep69 »

:) :) Grazie Gaetano, non riuscivo a capirne il motivo logico del comportamento, con un trucchetto da esperti ora tutto a posto, tutta arte che entra per me.
OpenOffice 4.1.6 Windows 2010 Pro
Sep69
Messaggi: 15
Iscritto il: venerdì 5 luglio 2019, 10:11

Re: Registrazione con Macro di filtri

Messaggio da Sep69 »

Buongiorno,
ho proposto il mio foglio agli utilizzatori e mi hanno chiesto alcuni accorgimenti, mi potreste dare qualche dritta?
1) Credo sia banale, io stampo direttamente sulla stampante predefinita, se volessi far comparire il box di scelta delle stampanti che comando debbo usare anziché

Codice: Seleziona tutto

dispatcher.executeDispatch(document, ".uno:PrintDefault", "", 0, Array()) 'Stampa

2) La possibilità di stampare in pdf l'ordine e far partire in automatico il processo allegandolo ad una mail e inviandolo ad un indirizzo.

Il file reparti ora si presenta grazie alle vostre preziose dritte così come in allegato

Grazie Mille,
Sep
OpenOffice 4.1.6 Windows 2010 Pro
Gaetanopr
Volontario
Volontario
Messaggi: 3300
Iscritto il: mercoledì 21 novembre 2012, 20:07

Re: Registrazione con Macro di filtri

Messaggio da Gaetanopr »

Dovresti aprire altri argomenti, stai andando fuori tema
Sep69 ha scritto: 1) Credo sia banale, io stampo direttamente sulla stampante predefinita, se volessi far comparire il box di scelta delle stampanti che comando debbo usare anziché

Codice: Seleziona tutto

dispatcher.executeDispatch(document, ".uno:PrintDefault", "", 0, Array()) 'Stampa
Prova in questo modo

Codice: Seleziona tutto

dispatcher.executeDispatch(document, ".uno:Print", "", 0, Array())
Sep69 ha scritto: 2) La possibilità di stampare in pdf l'ordine e far partire in automatico il processo allegandolo ad una mail e inviandolo ad un indirizzo
Sul forum ci sono varie discussioni che trattano l'argomento

Saluti
LibreOffice 7.2.2.2 windows 10
Openoffice 4.1.13 su windows 10
Sep69
Messaggi: 15
Iscritto il: venerdì 5 luglio 2019, 10:11

Re: Registrazione con Macro di filtri

Messaggio da Sep69 »

ok grazie chiudo li l'argomento aprendone eventualmente nuovi, scusa ma debbo prendere dimestichezza con il forum.

Alla Prossima. Sep.
OpenOffice 4.1.6 Windows 2010 Pro
Avatar utente
charlie
Site Admin
Site Admin
Messaggi: 8807
Iscritto il: mercoledì 19 dicembre 2012, 10:50
Contatta:

Re: Registrazione con Macro di filtri

Messaggio da charlie »

[CHIUSO] è una interpretazione estemporanea da cartellino giallo.
Correggi per evitare quello rosso. Grazie.
charlie
macOS 14.4.1 Sonoma: Open Office 4.1.15 - LibreOffice 7.5.7.2
http://www.charlieopenoffice.altervista.org
Sep69
Messaggi: 15
Iscritto il: venerdì 5 luglio 2019, 10:11

Re: Registrazione con Macro di filtri

Messaggio da Sep69 »

scusa non ho mica capito, ho seguito la traccia di come procedere con apertura e chiusura degli argomenti, il consiglio vostro di una volta terminati gli argomenti di definirli chiusi, era una cortesia seguendo ciò che è indicato, anzi un attestato di merito che indicava che mi avete aiutato a risolvere i miei problemi inerenti all'argomento.
ho sbagliato in qualche cosa? non sono io che debbo chiudere?
Ultima modifica di Sep69 il martedì 16 luglio 2019, 9:28, modificato 2 volte in totale.
OpenOffice 4.1.6 Windows 2010 Pro
Avatar utente
charlie
Site Admin
Site Admin
Messaggi: 8807
Iscritto il: mercoledì 19 dicembre 2012, 10:50
Contatta:

Re: Registrazione con Macro di filtri

Messaggio da charlie »

Dai un'occhiata agli atri post chiusi e vedi se ne trovi uguali al tuo. Naturalmente il discorso dei cartellini era ironico ...
charlie
macOS 14.4.1 Sonoma: Open Office 4.1.15 - LibreOffice 7.5.7.2
http://www.charlieopenoffice.altervista.org
Sep69
Messaggi: 15
Iscritto il: venerdì 5 luglio 2019, 10:11

Re: [Risolto] Registrazione con Macro di filtri

Messaggio da Sep69 »

Ho visto, Charlie, Guardando gli altri ho capito che dovevo mettere risolto cosa che è accaduta, è stato risolto ed ho fatto il cambio del messaggio ma nella lista degli argomenti la visualizzo ancora chiuso.

Alla Prossima, grazie
OpenOffice 4.1.6 Windows 2010 Pro
Avatar utente
charlie
Site Admin
Site Admin
Messaggi: 8807
Iscritto il: mercoledì 19 dicembre 2012, 10:50
Contatta:

Re: Registrazione con Macro di filtri

Messaggio da charlie »

:super:
charlie
macOS 14.4.1 Sonoma: Open Office 4.1.15 - LibreOffice 7.5.7.2
http://www.charlieopenoffice.altervista.org
Rispondi