Gli oggetti di Excel nel vba

By | 11 Luglio 2019

Gli oggetti di Excel e del vba Cosa sono gli oggetti? Che ruolo hanno in Excel? Che ruolo hanno nel Vba? Perché è importante conoscerli se vogliamo usare Excel e il Vba al meglio? Oggi parliamo ancora degli oggetti di Excel e del loro ruolo nel linguaggio vba e nelle macro che realizziamo per automatizzare i nostri fogli Excel.

Cosa sono gli oggetti

Excel è un foglio di calcolo, un ambiente strutturato virtuale concepito per gestire ed elaborare informazioni attraverso strumenti dedicati. Excel è composto da oggetti, tutto in Excel è un oggetto. Le pagine sono oggetti, celle e intervalli sono oggetti, grafici, tabelle, controlli, forme, tutto è un oggetto. Se non è un oggetto, sono informazioni, contenute in oggetti, o automatismi, che lavorano dietro gli oggetti.

Gli oggetti non sono altro che contenitori strutturati di informazioni. Una cella contiene i numeri che vi inseriamo, un grafico mostra le informazioni ottenute da una tabella usando gruppi di oggetti (istogrammi, legenda, linee, assi, ecc), le tabelle sono gruppi di celle che mostrano dati inseriti o elaborati, i controlli sono oggetti che contengono informazioni sulle automazioni o i filtri collegati, eccetera.

Quando usiamo Excel, usiamo oggetti (menu, icone, barre, controlli, finestre, filtri, ecc) per agire su o far agire altri oggetti (tabelle, pivot, grafici, ecc) su informazioni o altri oggetti. Anche se in realtà quello che agisce davvero in risposta alle nostre azioni sono automatismi, ogni oggetto e strumento ha decine di automazioni predisposte che si occupano di svolgere attività specifiche su informazioni e oggetti.

Tutte le attività che svolgiamo su Excel funzionano in questo modo, noi agiamo su oggetti per attivare alcuni tra il fiume di automatismi specifici che fanno funzionare Excel e svolgono quello che noi vogliamo.

Gli oggetti di Excel e il Vba

Come abbiamo già visto nella guida al vba e nella guida alle macro, il vba o “Visual basic for application” è il linguaggio predisposto dal produttore di Excel con cui possiamo realizzare routine, sequenze di comandi che Excel esegue per noi, automatismi personalizzati con cui facciamo svolgere al foglio di calcolo azioni ripetitive e molto altro.

Excel è un ambiente di lavoro composto da oggetti e il linguaggio Vba essenzialmente agisce su questi oggetti, creandoli, modificandoli, cambiandone le caratteristiche o facendoli agire, cioè attivando gli automatismi che ci sono dietro.

Per farlo usa comandi realizzati in linguaggio vba chiamati dichiarazioni, che indicano a Excel quale caratteristica di quale preciso oggetto o gruppo di oggetti deve essere modificata o impostata, oppure quale azione deve compiere quale preciso oggetto o gruppo di oggetti.

Gerarchia e insiemi

Come abbiamo detto gli oggetti in Excel possono essere visti come contenitori strutturati di dati che possono contenere o essere contenuti da altri oggetti, o essere composti da altri oggetti. Quindi tra gli oggetti c’è una precisa relazione, o gerarchia.

La gerarchia definisce il rapporto tra gli oggetti, cioè a quale oggetto più “grande” appartengono o di cui fanno parte, quali oggetti contengono, o li compongono. Puoi vedere la gerarchia come il rapporto dei diversi elementi di una matrioska. Per esempio, la pagina di excel (worksheet) è un elemento dell’oggetto foglio di lavoro (workbook) che è un elemento di Excel (application). Application è l’oggetto più grande e di più alto livello che contiene tutti gli altri.

Tutti gli oggetti sono identificati con precisione tramite il nome e di solito sono parte di insiemi di oggetti con le stesse caratteristiche (es: una pagina tra molte pagine). Ogni volta che possono esserci oggetti simili, allora si possono definire degli insiemi di questi oggetti, dove i singoli componenti possono essere distinguibili attraverso il nome.

Quindi si può indicare il singolo oggetto dell’insieme dichiarandone il nome, per esempio: “Workbooks(“Dati”) è il foglio Excel con nome “Dati”. Il nome è lo strumento per identificare e distinguere gli oggetti dagli altri oggetti dello stesso gruppo.

Conoscere gli insiemi e la gerarchia degli oggetti è importante per la comprensione e la scrittura del Vba.

la gerarchia degli oggetti di Excel

Proprietà e metodi

Oggetti e insiemi di oggetti possiedono numerose caratteristiche, o proprietà, che altro non sono che informazioni che gli oggetti sono progettati a contenere, oppure informazioni predefinite e codificate che indicano le singole caratteristiche. Le proprietà rappresentano gli attributi e le caratteristiche che definiscono l’oggetto e lo distinguono dagli altri oggetti simili (es: grandezza del font, colore della cella, altezza della riga, tipo del grafico, nome della pagina, ecc). Ogni oggetto ha una lista di proprietà che lo descrivono.

Oggetti e insiemi di oggetti possono svolgere serie di attività predefinite, grazie a un set di comandi chiamati metodi, che attivano automatismi correlati. Per esempio “copiare” (copy) trasferisce le informazioni relative a celle o a oggetti alla clipboard, oppure “attivare” (activate) porta certi tipi di oggetto in primo piano.

I metodi sono le funzionalità degli oggetti, cioè l’elenco delle azioni che l’oggetto può compiere o può subire (es: l’apertura di un foglio, il suo salvataggio, la selezione di una tabella, eccetera). Ogni oggetto ha una lista di metodi che lo riguardano.

Proprietà e metodi sono aspetti predefiniti degli oggetti, descritti minuziosamente nel loro progetto, o classe.

Gli oggetti di Excel dal punto di vista del Vba

Cerchiamo di capire meglio come il vba “vede” gli oggetti e proviamo a riassumere quanto abbiamo detto con un esempio.

Una pagina di excel (worksheet) di nome “Dati” è un oggetto specifico (worksheets(“Dati”)), parte di un insieme di pagine (worksheets), contenuto nel foglio di lavoro (workbook).

La pagina (worksheet) è composta e contiene oggetti come celle e intervalli di celle (range, cells), tabelle (listobject, pivottables) e grafici (chartobjects), e molti altri.

Tutti questi oggetti hanno un elenco di proprietà, per esempio il valore delle celle (range(“A1”).value), o il nome delle pagine (worksheet(“Dati”).name), e una lista di funzionalità, i metodi, con cui è possibile agire sugli oggetti, come per esempio aggiungere una pagina (worksheets.add), selezionarla (worksheets(“Dati”).select), copiarla (worksheets(“Dati”).copy) e via dicendo.

Come si scrive il codice operativo?

Il codice operativo sono le istruzioni che eseguono operazioni su proprietà e metodi di oggetti. Le istruzioni sono dichiarazioni di metodi e proprietà relative a oggetti o insiemi di oggetti indicati con precisione.

Il modo formale e corretto per dichiarare un oggetto è:

Application.Insieme(OGGETTO).Insieme(OGGETTO).OGGETTO,

o Application.Insieme(OGGETTO).Insieme(OGGETTO),

oppure Application.Insieme(OGGETTO),

a seconda della gerarchia dell’oggetto in questione.

Cioè un’espressione che parte dall’oggetto che contiene tutti, cioè Excel (application), per poi dichiarare gli altri oggetti fino a quello su cui vuoi agire o di cui vuoi richiamare o modificare una proprietà. Per esempio:

  1. Workbooks(“Report”).Worksheets(“Dati”).Range(“C1:C10”), si riferisce a un intervallo di celle,
  2. Workbooks(“Report”).Worksheets(“Dati”), si riferisce a una pagina del foglio,
  3. Workbooks(“Report”), invece indica un foglio Excel preciso.

In realtà scrivere tutta la gerarchia ogni volta richiede tempo, perciò il vba permette di omettere parte degli oggetti della gerarchia.

il ruolo degli oggetti nel vba

L’omissione degli oggetti padre e l’oggetto attivo

In realtà raramente le istruzioni operative indicano dichiarazioni con gerarchia completa, anzi nella maggior parte dei casi se ne omette una buona parte.

Per esempio:

  1. Worksheets(1).Name, restituisce il nome della pagina con indice 1,
  2. Worksheets(“Dati”).Copy, copia la pagina in un nuovo foglio Excel,
  3. Count, conta i fogli Excel aperti,
  4. Worksheets(“Foglio1”).Activate, attiva la pagina “Foglio1”,
  5. Close, chiude tutti i fogli di lavoro aperti,
  6. Worksheets(“Report”).Range(“A2:F40”).Font.Bold, imposta il grassetto nell’intervallo di celle selezionato,
  7. Worksbooks(“Db Kpi Prod”).Worksheets(“Dboard”).PrintOut, stampa la pagina Dboard.

In sostanza l’omissione permette di non indicare gli oggetti attivi, cioè quelli in primo piano. O viceversa, se omettiamo gli oggetti Excel si riferirà e completerà le dichiarazioni con gli oggetti attivi.

In pratica si omette quasi sempre Application, che altro non è che Excel, mentre si omettono fogli e pagine a seconda dell’ambito dell’automatismo. Cos’è l’ambito? E’ l’area di lavoro della macro, o da un altro punto di vista, dove dobbiamo eseguire la macro perché funzioni correttamente, o da un altro punto di vista quanto la macro è dipendente dal focus.

Per esempio, Application.Workbooks(“Report”).Worksheets(“Dati”).Range(“C1:C10”) può essere dichiarato anche:

  1. Workbooks(“Report”).Worksheets(“Dati”).Range(“C1:C10”), la macro può essere lanciata anche in un foglio Excel diverso o dalla cartella macro personale,
  2. Worksheets(“Dati”).Range(“C1:C10”), la macro deve essere lanciata dentro il foglio “Report”, in caso contrario Excel presume che la dichiarazione si riferisca al foglio attivo,
  3. Range(“C1:C10”), la macro deve essere lanciata dentro la pagina “Dati” dentro il foglio “Report”.

Quando Excel non trova l’indicazione degli oggetti “padre”, interpreta il codice come se si riferisse a quelli attivi. Quindi è importante quando progetti e scrivi il codice avere sempre chiaro il focus, cioè quale foglio, pagina, eccetera è o dovrebbe attivo. Uno degli errori classici dei principianti è dimenticarselo e far lavorare il codice sulle pagine attive anche se non sono quelle su cui dovrebbe agire.

Gli oggetti principali di Excel

Gli oggetti fondamentali di Excel e vba sono i seguenti:

Application

Application indica la sessione di Excel, quindi tutti i fogli aperti. Di solito la vedi poco nel codice, perché nella maggior parte dei casi si omette Application, a meno che non ci riferiamo a una delle molte proprietà o metodi. Come per esempio DisplayAlerts, ScreenUpdating o Calculation: Application.DisplayAlerts sospende gli allarmi di excel, mentre Application.ScreenUpdating sospende l’aggiornamento dello schermo.

Workbook

Workbook rappresenta un foglio Excel, o come traducono dall’inglese una cartella di lavoro di Excel, ed è un elemento dell’insieme workbooks. Questo oggetto contiene tutti gli oggetti pagina e di conseguenza tutti gli oggetti che queste contengono. Viene usato poco, soprattutto nel caso di attività che coinvolgono più fogli di lavoro. Per indicare il singolo foglio si usa il nome, es: Workbooks(“Report”), oppure l’indice numerico Workbooks(1).

Worksheet

Worksheet rappresenta la singola pagina excel, è un elemento dell’insieme worksheets e contiene celle, colonne, righe, tabelle, grafici, eccetera. In realtà worksheets descrive solo uno dei 4 tipi di pagine supportate da Excel: pagina standard (worksheet), grafici (chart), pagina macro (macro xlm) e pagine di dialogo (finestra di dialogo Excel 5.0). Gli ultimi due tipi sono caduti in disuso lasciando il campo ai soli Worksheet e Chart. Quindi Worksheet fa parte dell’insieme Worksheets e anche dell’insieme Sheets che rappresenta tutti i tipi di pagina. Per indicare la singola pagina si usa il nome, es: Worksheets(“Dati”), oppure l’indice numerico Worksheets(2).

Excel vba e la programmazione a oggetti

Range

L’oggetto Range rappresenta una cella o un intervallo di celle, di solito indicato con un riferimento a notazione ColonnaRiga (es: C1, o D13). È naturalmente uno degli oggetti più dichiarati, come Range(“A1”) per la singola cella, oppure Range(“B2:C20”) per l’intervallo di celle. Per esempio: Worksheets(1).Range(“A1”).Value = “Titolo” inserisce la stringa nella cella A1. È l’oggetto che possiede più proprietà e metodi ed è più complesso di quello che appare a prima vista.

Chart

Chart rappresenta un grafico o diagramma ed è parte dell’insieme Charts, ma anche dell’insieme Sheets. Come worksheet è un oggetto “pagina”, ma invece di presentare celle, mostra solo un grafico specifico. È un oggetto poco utilizzato rispetto a worksheet, ma è un modo efficace per visualizzare e gestore un grafico. Per esempio “Charts(1).Name = “Produttività” cambia il nome del grafico 1, mentre “Charts(1).PrintOut” lo stampa.

ChartObject

ChartObject è un oggetto che rappresenta anch’esso un grafico, ma incorporato nella pagina (worksheet) ed è membro dell’insieme ChartObjects. I grafici sono strutture complesse e sono caratterizzati da molte proprietà per gestirne i diversi elementi e le loro caratteristiche. Anche in questo caso per indicare in modo preciso il singolo oggetto si usa il nome o l’indice numerico, es: Activesheet.ChartObjects(1).

ListObject

L’oggetto ListObject rappresenta una tabella Excel presente in una pagina (worksheets) ed è membro dell’insieme ListObjects. È a sua volta caratterizzato da numerose proprietà che identificano tra l’altro le molte parti di una tabella (es: listcolumns, listrows, databodyrange, headerrowrange, totalrowrange, ecc), oltre che permetterne di gestire strumenti e impostazioni (es: autofilter, showautofilter, ecc).

La gestione di questi oggetti richiede precisione, ma è meno complessa di quello che può apparire. Per esempio, “Worksheets(1).ListObjects(“ResaR1”). DataBodyRange.Select” seleziona il corpo della tabelle senza intestazioni e totali, “Worksheets(1).ListObjects(“ResaR1”). ShowTotals = True” mostra la riga dei totali in fondo alla tabella.

PivotTable

PivotTable rappresenta una tabella pivot installata in una pagina (worksheets) ed è membro dell’insieme PivotTables. È l’oggetto da usare per gestire le tabelle pivot tramite automatismi, per esempio per preimpostarle in automatico, per copiarle, modificarle e molto altro. D’altra parte il codice per gestire le pivot può essere complesso, per questo spesso si preferisce non automatizzarle.

Gli altri oggetti di Excel

Gli oggetti visti finora sono gli oggetti fondamentali di Excel e sono i più dichiarati nelle istruzioni in Vba. Naturalmente ci sono altri oggetti e tra questi le due categorie più significative sono gli oggetti “secondari” e gli oggetti “elemento”.

Inoltre dobbiamo tenere in considerazione anche gli oggetti restituiti dalle proprietà degli oggetti principali visti finora, divisi in numerose categorie, tra cui i più usati sono gli oggetti “Active” e l’oggetto “Selezione”.

gli altri oggetti di Excel

Gli oggetti di Excel secondari

Gli oggetti secondari sono oggetti meno importanti, correlati o indipendenti dagli oggetti principali, che vengono usati in modo specifico. Questi sono alcuni esempi:

Window

Window è l’oggetto che rappresenta la struttura “cornice” di Excel, quella della finestra che mostra la porzione di pagina Excel, composta da bordi, barre di scorrimento, griglia, righelli, barra delle formule, eccetera. L’oggetto window appartiene all’insieme Windows. Questo oggetto viene di solito dichiarato per gestire la parte “fisica” della struttura della finestra, per esempio per bloccare una parte della pagina (es: ActiveWindow.FreezePanes = True).

Shape

Shape si riferisce alle forme grafiche di Excel, appartiene all’insieme Shapes, ed ha un’ampia lista di proprietà e metodi per gestire le forme che installiamo nelle pagine di Excel. Perché devono interessarci le forme? Per esempio perché possono diventare ottimi controlli da installare nelle nostre pagine, report, dashboard, a cui collegare link e automatismi.

Hyperlink

Sono i collegamenti ipertestuali che permettono di richiamare pagine web, di portare in primo piano fogli e pagine di excel, di aprire file, di inviare mail e altro ancora. Hyperlink è un oggetto dell’insieme Hyperlinks e viene usato unicamente per gestire collegamenti ipertestuali, per esempio Activesheet.Shapes(1).Hyperlink.Follow, apre il collegamento installato nella forma 1 della pagina attiva.

Slicer

Gli Slicer sono i controlli evoluti e professionali che possiamo attivare nelle tabelle excel o pivot per esempio. Sono controlli eleganti, flessibili e configurabili che possiamo installare nelle pagine di Excel, di solito adiacenti agli strumenti a cui sono collegati per filtrarli con uno o due clic. Sono oggetti dell’insieme Slicers e sono usati specificatamente per attivare e gestire questi controlli.

Sparkline

Gli sparkline sono minigrafici installabili in celle delle pagine di Excel, di solito adiacenti o inseriti in tabelle, che vengono usati per mostrare a colpo d’occhio andamenti o valori relativi. Sono strumenti evoluti e molto automatizzati che nelle ultime versioni di Excel possono essere inseriti con qualche clic attraverso strumenti come l’analisi rapida. Nel vba l’oggetto è utilizzato specificatamente per l’inserimento e la gestione di questi strumenti.

FormatConditions

È l’oggetto che rappresenta uno strumento “formattazione condizionale”, cioè un automatismo che verifica le caratteristiche delle celle o dell’intervallo di celle in cui viene installato per modificarne il formato a condizioni precise. L’oggetto viene di solito usato nel vba per l’installazione e la gestione di questi strumenti.

Validation

L’oggetto validation rappresenta un controllo automatico creato con lo strumento Convalida dei dati, automatismi che verificano gli inserimenti e non solo, che installiamo quindi in una cella o un intervallo di celle. L’oggetto viene usato nel vba per l’installazione e la gestione di controlli automatici nelle celle o negli intervalli di celle.

Questi sono solo alcuni esempi di oggetti secondari, usati nel vba solo per attività limitate e specifiche, ma ce ne sono molti altri. A chi vuole studiare il vba consiglio di approfondire i singoli oggetti via via che si presenta la necessità.

gli oggetti elemento

Gli oggetti elemento

Sono gli oggetti elementari che compongono oggetti complessi come per esempio i grafici, le tabelle pivot, ma anche le singole celle. Gli oggetti fondamentali più complessi presentano una serie di oggetti “elemento” che possono essere richiamati e gestiti tramite dichiarazioni delle proprietà relative. Gli oggetti elemento di solito non hanno metodi.

Questi sono alcuni esempi tra gli oggetti elemento i più usati:

Font

Font è un oggetto elemento di Range, ma non solo, che contiene gli attributi del carattere usato per visualizzare valori e testi nell’oggetto relativi, di solito la cella o l’intervallo di celle. Per esempio Range(“A1”).Font.Bold = True imposta il grassetto della cella A1 della pagina attiva.

Interior

L’oggetto interior è un altro elemento di Range che contiene gli attributi dello sfondo della cella o dell’intervallo di celle, come il colore. Per esempio Range(“A1”).Interior.ColorIndex = 3 imposta il colore di fondo della cella A1.

Border

L’oggetto Border è un altro elemento dell’oggetto Range, ma anche di tutti gli oggetti che possono avere un bordo, che contiene gli attributi del bordo dell’oggetto.

Legend

L’oggetto Legend è un elemento dei grafici, cioè degli oggetti Chart e Chartobjects, e rappresenta la legenda del grafico, un piccolo elemento grafico che ci aiuta a identificare le serie di dati visualizzate nel grafico. La legenda non è presente nel grafico, se la proprietà Haslegend non è impostata su True. Legend è un oggetto complesso ed è composto a sua volta da elementi, per esempio Font per il testo.

ChartTitle

ChartTitle è l’elemento titolo del grafico, quindi un elemento di Chart e Chartobjects. Usato per impostare e gestire il testo del titolo, in realtà offre una discreta lista di proprietà utili che per esempio permettono l’impostazione di una formula o un riferimento.

PivotField

È l’oggetto campo della tabella pivot, che contiene attributi e dati di una porzione di valori della tabella a cui è agganciata la pivot. È parte della collezione PivotFields ed è un oggetto fondamentale per l’impostazione e la gestione delle tabelle pivot, uno degli oggetti più complessi di Excel.

Questi sono solo alcuni delle decine di oggetti elementi che compongono gli oggetti complessi di Excel. Trattarli tutti in modo approfondito richiederebbe centinaia di pagine e decine di ore di studio.

macro Excel

Gli oggetti di Excel restituiti dalle proprietà

Nel codice vba ci sono decine di proprietà che restituiscono oggetti o meglio riferimenti a oggetti specifici, per rispondere a bisogni diversi, per esempio sapere qual è l’oggetto selezionato o attivo, o per identificare intervalli di celle particolari come righe o colonne, o l’oggetto padre che contiene l’oggetto specifico e altro ancora.

Questi oggetti “derivati” sono oggetti veri e propri che possono essere usati nelle dichiarazioni e in molti casi sono usati più spesso di tutti gli altri oggetti, come nel caso dell’oggetto selezione (Selection) e degli oggetti “Active”.

Application possiede un’ampia serie di proprietà gestite da Excel con lo scopo di sapere sempre quali sono gli oggetti attivi e quelli selezionati. Queste proprietà restituiscono il riferimento a oggetti precisi e sono di solito usate per dichiarare in modo agile e veloce metodi e proprietà.

Gli oggetti di Excel correlati alla selezione (focus) o agli oggetti attivi sono i seguenti:

Selection

Selection è un oggetto speciale, restituito da una proprietà che memorizza costantemente quali sono gli oggetti selezionati in Excel e quando viene usata, indirizza a questi. Nel Vba gli oggetti selezionati sono quelli oggetto del metodo Select, in Excel sono quelli su cui portiamo il focus tramite mouse o tastiera.

Viene ampiamente usato per semplificare la scrittura del codice quando si deve intervenire ripetutamente sulle proprietà della selezione, per esempio per impostare la formattazione, valori e formule. L’uso di questa proprietà richiede una gestione attenta del focus. Per approfondire l’argomento consiglio la lettura della guida al Vba.

Gli oggetti attivi

Le proprietà che restituiscono oggetti attivi sono i seguenti:

  1. ActiveCell restituisce la cella attiva nella finestra attiva,
  2. ActiveSheet restituisce la pagina attiva,
  3. ActiveWorkbook restituisce il foglio Excel attivo,
  4. ActiveChart restituisce il grafico attivo, che sia Chart o Chartobject,
  5. ActiveWindow restituisce la finestra attiva,

Per esempio, “ActiveSheet.Name” restituisce il nome della pagina attiva, mentre “ActiveWorkbook.Save” salva il foglio Excel attivo.

A questi vale la pena aggiungere anche la proprietà Thisworkbook che restituisce il foglio della macro. Molto utile quando spostiamo il focus all’esterno del foglio.

Queste proprietà possono essere usate per semplificare la scrittura delle dichiarazioni, ma essendo dinamiche e legate al focus è importante usarle con attenzione e precisione per evitare di generare errori indicando oggetti sbagliati o che non esistono.

In realtà in diverse situazioni gli oggetti active non sono necessari, in quanto compensati o equivalenti alla compensazione di Excel per l’omissione degli oggetti padre. Per esempio “ActiveSheet.Range(“C1:C10”)” e “Range(“C1:C10”)” sono equivalenti.

Conclusioni

Come abbiamo visto tutti gli oggetti di Excel sono presenti anche nel linguaggio Vba, il visual basic for application, con cui realizziamo le macro con cui automatizzare i nostri fogli di lavoro. Macro e vba possono agire su tutti gli oggetti di Excel e replicare tutto quello che facciamo sul foglio di calcolo e molto di più. Quindi gli oggetti di Excel sono tutti presenti nel Vba.

Ome abbiamo visto gli oggetti fondamentali sono pochi e utilizzati nell’80% delle dichiarazioni che compongono il codice operativo delle routine che sviluppiamo. Gli molti altri oggetti sono distinguibili in oggetti secondari, in oggetti elemento e in oggetti restituiti da proprietà. Ognuno di essi ha un ruolo e un utilizzo specifico.

Se vuoi imparare l’automazione di Excel, dovrai imparare a usare anche questi oggetti non fondamentali, studiandoli con pazienza via via che ne avrai bisogno, partendo da quelli che abbiamo visto in questo post sull’automazione e sugli oggetti di Excel.

A presto ;D

 

 

 

PS: Se questo post ti è piaciuto o ti è stato utile, condividilo con gli amici sui social.

Puoi farlo attraverso i pulsanti qui di seguito. Grazie

 

Rispondi

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.