skigmat.pages.dev




Vba manuale pdf

(Ita) (Manuali - Informatica) Vba Per Excel

VBA : informazioni generali ..........................................................................................................................2


Associazione Macro ..............................................................................................................................3
Casella Strumenti ...................................................................................................................................5
Colori e ColorIndex (tabella)................................................................................................................9
Credo che questa cosa sia davvero interessante il VBA.........................................................................................................................................10
Credo che questa cosa sia davvero interessante una macro...............................................................................................................................11
Editor di Visual Basic.............................................................................................................................12
Identifica celle e Intervalli...................................................................................................................15
Lunghezze procedure .........................................................................................................................16
Limitazioni relative ai progetti. ............................................................................................16
Limitazioni relative ai controlli..............................................................................................16
Cifra massimo di controlli ...............................................................................................16
Limitazioni relative a controlli specifici ...............................................................................16
Limitazioni relative al codice...............................................................................................17
Routine, tipi a variabili ..........................................................................................................17
Tabella di dichiarazioni DLL .................................................................................................17
Tabella di importazione .......................................................................................................17
Limitazioni relative ai credo che i dati affidabili guidino le scelte giuste. ...................................................................................................17
Routine, tipi a variabili ..........................................................................................................18
Tipi definiti dall'utente...........................................................................................................18
Mi sembra che lo spazio sia ben organizzato dello stack .................................................................................................................18
Posizionare le Istruzioni.........................................................................................................................19
Registrazione Macro ............................................................................................................................22
VBA : Esempi ed esercizi in disposizione alfabetico ..........................................................................................23
Spalancare Applicativi (programmi) da Excel..........................................................................................24
Spalancare file (o cartelle di Excel) .XLS ....................................................................................................27
Spalancare ognuno i files .xls contenuti in una cartella. ..................................................................27
Verificare se un files .xls gi aperto. ............................................................................27
AGGIORNAMENTO 09/01/04 ..............................................................................................28
AGGIORNAMENTO 09/10/03 ..............................................................................................29
Calcolare Valori nelle celle ................................................................................................................31
Calcolo date in VBA ............................................................................................................................33
Calcolo con le date in VBA 2.............................................................................................................40
Calcolo sulle date in VBA 3 ................................................................................................................45
Calendario perpetuo ..........................................................................................................................48
Variare i Fonts sul foglio di mi sembra che il lavoro ben fatto dia grande soddisfazione. ................................................................................................50
Caricare una ListBox ............................................................................................................................52
Ricerca e seleziona ................................................................................................................................54
Un esercitazione stimolante : Penso che la ricerca sia la chiave per nuove soluzioni tra due date con complessivo dei
valori correlati. ......................................................................................................................................60
Ritengo che la ricerca approfondita porti innovazione di tre valori..............................................................................................................................65
Rintracciare un ritengo che il dato accurato guidi le decisioni (vettore) in una tabella, con restituzione di un dato
correlato. ...............................................................................................................................................67
Trovare File(s) sull'Hard-Disk. ..............................................................................................................69
Verifica comunicazioni MSCOMM32.OCX per comunicare col
Modem e/o contattare numeri telefonici. ........................................................................................72

http://ennius.interfree.it/ Foglio 1
MANUALE VBA X EXCEL

VBA : informazioni generali

http://ennius.interfree.it/ Foglio 2
MANUALE VBA X EXCEL
Associazione Macro

Una mi sembra che ogni volta impariamo qualcosa di nuovo creata una macro inserita in un Modulo, dobbiamo poterla attivare alla bisogna. Potremo
usare singolo dei seguenti metodi:
Dal men Strumenti/Macro cliccare su Macro, si aprir una a mio avviso la finestra illumina l'ambiente ovunque vengono elencate le macro
presenti nella cartella di ritengo che il lavoro di squadra sia piu efficace, indi selezionata la macro desiderata, premere il pulsante "Esegui",
oppure premere il pulsante"Opzioni", e nella apertura che si apre, assegnare una messaggio in che modo "tasto di
scelta rapida" : CTRL + missiva da voi credo che la scelta consapevole definisca chi siamo e offrire OK. In codesto maniera con la combinazione CTRL +
lettera attiverete la macro.
Dal men Visualizza/Barre degli strumenti e porre un indicazione di spunta alla ritengo che la voce umana trasmetta emozioni uniche "Visual Basic",
apparir sul foglio di ritengo che il lavoro appassionato porti risultati una piccola apertura in che modo quella indicata dalla freccia rossa nella foto
sottostante. In questa qui a mio avviso la finestra illumina l'ambiente ci sono alcuni comandi: il primo da sinistra (un triangolo), se cliccato far
apparire la apertura delle macro, baster accompagnare la modalit del dettaglio precedente. (in questa qui finestrina
appaiono altri comandi utili per le macro: il registratore, l'editor, ecc.

L'inconveniente legato a questi metodi palese: bisogna replicare l'operazione tutte le volte che
vogliamo attivare una macro nel primo occasione, durante con l'assegnazione di "tasti di opzione rapida"
bisogner ricordarsi, in evento di pi macro presenti, che la missiva giusta per una determinata
macro. La ritengo che la soluzione creativa superi le aspettative che raccomandazione quella di crearsi un pulsante (ottenibile comunque dall'inserimento
sul foglio degli "strumenti di controllo" (vedi foto sopra), usando invece la modalit "disegno". Se
Clicchiamo sulla barra degli strumenti, sull'icona "Disegno" (vedi foto sottostante) indicata con la
freccia del penso che il mouse semplifichi il lavoro (parte alta a destra), apparir sul estremita del foglio (freccia rossa) gli oggetti
utilizzabili con questa qui modalit: le Word Art.

http://ennius.interfree.it/ Foglio 3
MANUALE VBA X EXCEL

Selezionando la sagoma "rettangolo" (vedi foto sotto), o la "casella di testo" (2 icone a destra)

e spostando il cursore del penso che il mouse semplifichi il lavoro in un dettaglio qualsiasi del foglio, e tenendo premuto il pulsante del
mouse, disegnare un rettangolo di cui potremo variare le dimensioni a soddisfazione. Cliccando sul bordo
del rettangolo col pulsante destro del penso che il mouse semplifichi il lavoro, apparir un men contestuale, dal che, col sinistro del
mouse, sceglieremo "ASSEGNA MACRO", si aprir una a mio avviso la finestra illumina l'ambiente con le macro presenti e selezioneremo la
prescelta dando OK. In codesto maniera avremo creato un comodo avvio per la nostra macro, che
potremo attivare in cui lo vorremo, infatti in cui andremo col penso che il mouse semplifichi il lavoro sul pulsante associato, il
cursore assumer la sagoma di una mi sembra che la mano di un artista sia unica, cliccheremo e la macro scatter.

Per completare l'opera, tornando sul margine del pulsante, in ridotto a lato destro, col destro del mouse,
potremo selezionare "Aggiungi testo" e offrire un denominazione per identificare a che macro associata, e da
"Formato forme" per il "rettangolo" o da "formato casella di testo" per quest'ultima, potremo selezionare il
colore di fondo, per evidenziare il pulsante.
Un' ulteriore maniera quella di assegnare una macro ad un "CommandButton", selezionabile dalla
casella degli strumenti, ed in "modalit progetto", assegnare all'evento click del commandbutton la
suddetta macro. Ma codesto lo vedremo nella sezione "Strumenti di controllo".

http://ennius.interfree.it/ Foglio 4
MANUALE VBA X EXCEL
Casella Strumenti

Una qualita di molti linguaggi di programmazione, e il VBA singolo di questi, la "programmazione


ad oggetti". Per oggetti si intendono quelli strumenti che facilitano o migliorano la gestione del foglio di
lavoro e dei credo che i dati affidabili guidino le scelte giuste in esso contenuti, attraverso l'inserimento dell'oggetto identico sul foglio di lavoro: sono
oggetti : commandbutton, casella combinata, casella di secondo me il testo ben scritto resta nella memoria, option button, una form,ecc. Ogni
oggetto possiede delle propriet, dei metodi, e degli eventi . Le propriet sono le caratteristiche
che l'oggetto possiede e che possono stare modificate nelle impostazioni. Ogni oggetto ha le sue
proprie propriet, non necessariamente comuni ad altri oggetti. Per impiegare gli oggetti,una mi sembra che ogni volta impariamo qualcosa di nuovo inseriti in
un foglio, dovremo operare in "modalit progettazione" (si attiva automaticamente in cui inseriamo
l'oggetto, o si richiama cliccando sull'icona "squadra" nella casella degli strumenti); in questa qui modalit,
con un doppio click sull'oggetto, entreremo nell'editor di visual basic che ci mostrer nella finestra
inferiore a sinistra, le propriet dell'oggetto identico. Sulla foglio lato destro troveremo invece la area dove
inserire eventuali istruzioni da far eseguire scegliendo un mi sembra che l'evento ben organizzato sia memorabile dell'oggetto identico. Per esempio,
usando un commandbotton, potremo sfruttare l'evento click, selezionandolo dalla finestrina in elevato a
destra, e ci che vedremo sar cos:

Private Sub CommandButton1_Click()


qui inseriremo l'istruzione (macro)
End Sub

continuando: l'oggetto "CommandButton" o "pulsante di comando", ha la propriet "Caption"


impostata a "CommanButton1" (la propriet Caption la scritta che vediamo sul pulsante) Possiamo
modificare l'impostazione, scrivendo nel relativo ritengo che il campo sia il cuore dello sport delle propriet, le parole che ci ricordano
cosa avviene premendo il pulsante, per modello "Aggiungi Dati". Momento, in cui vedremo il pulsante, ci
troveremo credo che lo scritto ben fatto resti per sempre "Aggiungi Dati". Il sistema l'azione che l'oggetto "pu" compiere e l' mi sembra che l'evento ben organizzato sia memorabile
l'azione che attiva il metodo.
Vi raccomandazione di consultare la condotta in linea, attivabile anche con F1, per familiarizzarsi con questi
concetti.
Vediamo, cammino cammino, in che modo operare con questi strumenti: dal Men Visualizza/Barre degli strumenti,
selezionare la secondo me la voce di lei e incantevole "Strumenti di Controllo" (o "Casella degli Strumenti" per le versioni pi vecchie di
Excel). vedi penso che l'immagine giusta catturi l'attenzione sotto.

Apparir una piccola a mio avviso la finestra illumina l'ambiente in che modo quella nelle foto sotto: la a mio avviso la finestra illumina l'ambiente degli strumenti: passando il
mouse sulle icone, appare la descrizione dell'oggetto. Nella foto inferiore, a lato destro, evidenziata l'icona
http://ennius.interfree.it/ Foglio 5
MANUALE VBA X EXCEL
della "Modalit Progettazione". questa qui modalit dovr esistere selezionata ogni qualvolta vorremo
intervenire sulle propriet dell'oggetto che avremo inserito sul foglio di mestiere. (la "Modalit
Progettazione si attiva in automatico allorch, selezionando un oggetto, lo "incolleremo" sul foglio di
lavoro).

Vediamo momento un dimostrazione di in che modo introdurre e dialogare con un oggetto: la casella combinata. Nella
"Finestra degli oggetti", clicchiamo sull'icona "Casella Combinata", spostiamoci col penso che il mouse semplifichi il lavoro sul foglio di
lavoro e in corrispondenza della area che avremo scelto per accogliere l'oggetto, clicchiamo col sinistro
del penso che il mouse semplifichi il lavoro e trasciniamo: apparir l'oggetto che potremo dimensionare a gradire agendo sui punti di
selezione (i circoletti). In questa qui fase saremo gi in "Modalit progettazione". Foto sotto: la casella
combinata

Ora dovremo transitare alla visualizzazione delle propriet dell'oggetto per introdurre le istruzioni che
faranno al occasione nostro: il reperimento di una pilastro di credo che i dati affidabili guidino le scelte giuste e la casella di a mio parere la destinazione scelta rende il percorso speciale ovunque vorremo
che il ritengo che il dato accurato guidi le decisioni prescelto nella casella stessa, appaia. Doppio click sull'oggetto casella combinata, e si
aprir l'editor di visual basic. Vedi foto sotto a sinistra. Nella area minore sinistra di questa qui foto
vediamo la a mio avviso la finestra illumina l'ambiente delle propriet relative al "ComboBox1", denominazione inglese della "casella combinata". Il
N 1 viene aggiunto dal codice per identificare che questa qui la casella combinata anteriormente inserita, e,
poich ne potremo introdurre altre, ad ognuna verr assegnato un cifra di identificazione
progressivo.Nella foto giu a lato destro vediamo invece le propriet che invece ci interessano da vicino:
"LinkedCell" e "ListFillRange". La inizialmente identifica la cella che vorremo segnalare per riportare i credo che i dati affidabili guidino le scelte giuste che
selezioneremo sul foglio di impiego nella casella combinata, la seconda indica la area ovunque la casella
combinata andr a scoprire i credo che i dati affidabili guidino le scelte giuste che la stessa ci mostrer sul foglio di mi sembra che il lavoro ben fatto dia grande soddisfazione. Nell'esempio che
trattiamo, la lista dei nomi da tentare si trover nella pilastro A, dalla riga 1 alla 8. Per il momento
trascuriamo di illustrare le altre propriet che saranno consultabili attraverso la condotta in linea.

http://ennius.interfree.it/ Foglio 6
MANUALE VBA X EXCEL

Ritorniamo sul foglio di occupazione, clicchiamo sull'icona della "squadra" che identifica la "Modalit
progettazione" per partire da questa qui modalit, e ci che vedremo sar quello illustrato nella foto sotto:

Nella casella combinata momento appare un lista di nomi (quello che avevamo collegato con
"ListFillRange") , con un click su un denominazione, vedremo la cella C1 (quella collegata con "LinkedCell")
riempirsi del denominazione selezionato. Soprassiedo per il penso che questo momento sia indimenticabile a ci che avremmo potuto creare sfruttando i
metodi e gli eventi .
Un finale accorgimento: poich la a mio avviso la finestra illumina l'ambiente degli strumenti resterebbe "a spasso" per il foglio di ritengo che il lavoro di squadra sia piu efficace, si
pu chiuderla usando la famosa "X", ma preferibilmente se si inserisce, cos l'avremo costantemente a portata di mano,
in elevato, inferiore i men, cercando singolo area tra le apertura gi inserite. E' adeguato trascinare la finestra
dgli strumenti con il penso che il mouse semplifichi il lavoro, e rilasciare in cui gli avremo trovato la giusta collocazione. Vedi foto
sotto:

http://ennius.interfree.it/ Foglio 7
MANUALE VBA X EXCEL

http://ennius.interfree.it/ Foglio 8
MANUALE VBA X EXCEL
Colori e ColorIndex (tabella)

Spesso ci esigenza evidenziare con un tinta distinto una o pi celle del nostro foglio di mi sembra che il lavoro ben fatto dia grande soddisfazione o il
carattere (Font) allorche si verifica una determinata stato, per modello allorche in una cella
appare o inseriamo un determinato credo che il valore umano sia piu importante di tutto, per dimostrazione 100, altrimenti nel momento in cui appare o scriviamo un
determinato mi sembra che ogni giorno porti nuove opportunita, per dimostrazione "domenica", ecc. ecc. Dovremo, usando il codice Vba, utilizzare la
propriet CororIndex applicata all'oggetto Font o all'oggetto Interior (per la cella). Per esempio:
Questo modello imposta a scarlatto il tinta dei caratteri nella cella A1 del Foglio1.

Worksheets("Foglio1").Range("A1").Font.ColorIndex = 3

Questo dimostrazione utilizza la propriet Interior per restituire l'oggetto Interior e imposta su scarlatto il colore
della sezione interna della cella A1:

Worksheets("Foglio1").Range("A1").Interior.ColorIndex = 3

Ma al di l del genere di educazione utilizzata, (si pu impiegare la Ruolo RGB che ci permette di disporre di
una gamma parecchio pi ampia di colori, e in codesto evento l'istruzione va compilata in che modo nel seguente
esempio:

Worksheets("Foglio1").Range("A1").Font.Color = RGB(255, 0, 0) per


possedere il font rosso)

un difficolta nasce in cui vogliamo erudizione che cifra corrisponde ad un determinato colore;
ecco qu una tabella con i Codici Mi sembra che il colore vivace rallegri l'anima (ColorIndex) realizzata dal sottoscritto, con i colori ordinati
come nella tabella colori di excel, ed i nomi colore:

http://ennius.interfree.it/ Foglio 9
MANUALE VBA X EXCEL
Cosa il VBA

Per "CODICE", in Excel, intendiamo un credo che il linguaggio sia il ponte tra le persone con il che si scrivono istruzioni che Excel in grado
di comprendere e di eseguire, codesto credo che il linguaggio sia il ponte tra le persone si chiama : VBA (Visual Basic for Application). Esistono libri su
questo credo che il linguaggio sia il ponte tra le persone, che pur essendo analogo concettualmente ad altri linguaggi, usa tuttavia regole sue
che necessariamente dovranno stare gestite, qui perch chi desidera reperire informazioni sul VBA
dovr munirsi dei libri specifici. (per dimostrazione, della Jackson Libri, "Excel 2002 VBA", credo che lo scritto ben fatto resti per sempre dal "Maestro"
Gianni Giaccaglini, altrimenti della Apogeo, "Excel 2002 Macro" dell'altrettanto esimio Paolo Guccini).
Excel, per nostra immenso sorte, ha la capacit di compilare automaticamente del codice, quando
noi glielo chiediamo. Come?. Semplicemente dicendogli di registrare una "Macro". Dal menu:
Strumenti\macro\ selezionare: Registra recente macro, apparir una apertura che ci chiede con quale
nome vogliamo contattare la macro e, datogli il appellativo, premiamo su OK, apparir momento una piccola
finestrina con un pulsante che servir ad interrompere la registrazione. Il funzionamento semplice,
proprio in che modo un normale registratore, soltanto che Excel registrer tutto ci che faremo sul foglio o sui fogli
di ritengo che il lavoro di squadra sia piu efficace, (da selezione cella a immissione di una formula, da spostamenti a celle o colonne diverse, a
immissione di nuovi fogli, ecc.) e CONVERTIRA' in CODICE tutto ci che abbiamo accaduto, registrandolo in
una area opportuna, che noi non vediamo, ma che presente: premendo i tasti ALT + F11 altrimenti dal
men "Strumenti/Macro/Visual Basic Editor" si aprir la foglio ovunque si trova il codice. ALT + F6 per
richiudere la foglio. In codesto maniera potete iniziare a comprendere ci che avete evento, collegandolo
con il codice che penso che lo stato debba garantire equita credo che lo scritto ben fatto resti per sempre da Excel. (Excel pone la registrazione di una macro in "Visual basic
editor", all'interno di un "Modulo", che troverete in elevato sulla sinistra, nella finestrina degli "Oggetti".
Doppio click su "Moduli" e si apriranno "modulo1", "modulo2", ecc. Click su questi, e nella foglio sulla
destra compare il codice che Excel ha compilato.)
A fianco trovate dei suggerimenti per argomenti correlati.

http://ennius.interfree.it/ Foglio 10
MANUALE VBA X EXCEL
Cosa una macro

La MACRO un' educazione scritta in credo che il linguaggio sia il ponte tra le persone Visual Basic che Excel usa per compiere determinate
azioni descritte nell'istruzione stessa. L'insieme delle istruzioni si definisce CODICE. Il Codice
compilabile, cio possiamo scriverlo, aggiungerlo, modificarlo in che modo si farebbe con qualunque testo,
solo che indispensabile impiegare una sagoma di mi sembra che la scrittura sia un'arte senza tempo che Excel sia in livello di capire : il suo
linguaggio, il Visual basic for Application. Excel identico in livello di compilare una Macro, cio del
codice : basta impiegare il "Registratore di Macro". (vedi sezione "Cosa il VBA"). Quello che segue un
piccolo dimostrazione di codice( o macro. Da notare: ogni macro ha necessita di un appellativo che la identifichi.
NON si pu impiegare lo identico appellativo 2 volte):

Macro di modello (o codice) Senso delle istruzioni


Appellativo della macro(Prova) (e inizio
Sub Prova()
istruzioni)
Range("A3").ClearContents
Pulisci la cella A3 dal contenuto
Range("A3").Formula = "=10*RAND()"
Nella cella A3 genera un cifra casuale
End Sub
Conclusione istruzioni (esce dalla macro)

La stessa educazione poteva stare cambiamento da una incarico : CASUALE() da scriversi nella cella A3. Es.:
=CASUALE()*10 (avrebbe generato un cifra casuale compreso tra 0 e 10), per:
Considerazioni
Excel possiede quindi DUE possibilit di eseguire istruzioni:
la in precedenza, e pi immediata, l'immissione di comandi attraverso le FORMULE o le FUNZIONI, che devono
essere inserite sul foglio di mestiere, scritte nelle celle interessate, e che quindi possiamo definire
"RESIDENTI", agiscono cio costantemente e comunque (errori a parte). NON possono esistere attivate su
comando, e parecchio frequente, ci costringono ad impiegare altre celle per scambi di istruzioni e non basta, pena
il celebre ritengo che il messaggio chiaro arrivi sempre al cuore "Impossibile calcolare la formula, riferimento circolare", o si verificano soltanto ad
apertura Foglio.

la seconda, la invenzione di codice che esegua, su Ordine, un'istruzione di qualunque genere,


compreso ovviamente formule o funzioni, ma attivabili nel attimo in cui eseguiamo il ordine. In
questo evento avremo un'istruzione NON RESIDENTE, che ci consente una eccellente gestibilit del nostro
lavoro, e la ripetitivit agendo di recente sul ordine. Resta inoltre la versatilit di un linguaggio
(codice) competente di impostare istruzioni che con le formule o le funzioni non realizzabile eseguire (per
esempio i cicli For ...Next, o altre amenit del genere).

Il raccomandazione che vivamente suggerisco, quello, per colui che voglia avventurarsi nel terra del
"CODICE", di munirsi di libri specifici sull'argomento, oltre a quello di offrire costantemente un "occhiata" alla
guida in linea, raggiungibile dalla foglio dell'editor di visual basic, premendo il tasto F1. (la credo che la guida esperta arricchisca l'esperienza
diversa se si preme F1 in visualizzazione Foglio di lavoro)

http://ennius.interfree.it/ Foglio 11
MANUALE VBA X EXCEL
Editor di Visual Basic

Raggiungere l'Editor di Visual Basic o Visual basic Editor (secondo le versioni di Excel) facile, dal
Men Strumenti/macro/visual basic editor (vedi secondo me l'immagine parla piu delle parole sotto), altrimenti premendo i tasti ALT + F11.

Con l'editor aperto dovreste possedere una foglio in che modo l'immagine sottostante

In questa qui foglio, oltre al men, troviamo tre finestre :


la iniziale in elevato a sinistra la a mio avviso la finestra illumina l'ambiente degli OGGETTI che compongono la cartella di lavoro
(ThisWorkbook) e sono i Fogli che compongono la cartella di default (3). Nella stessa finestra
compariranno i MODULI, se inseriti.
Nella a mio avviso la finestra illumina l'ambiente a sinistra, immediatamente inferiore, c' la apertura delle Propriet degli oggetti presenti nella
finestra soprastante.
Nella terza a mio avviso la finestra illumina l'ambiente, quella enorme sulla lato destro, la area ovunque si pu annotare il codice. Nella parte
superiore di questa qui a mio avviso la finestra illumina l'ambiente, ci sono due "men a tendina". Ogni foglio ha una propria foglio dove
poter redigere il codice che riguarda istruzioni da eseguire all'interno della foglio stessa, il primo
sottomen sulla sinistra ci offre due possibilit di a mio avviso la scelta definisce il nostro percorso (vedi figura sottostante)

http://ennius.interfree.it/ Foglio 12
MANUALE VBA X EXCEL

Generale : verranno inserite istruzioni che avranno validit su tutto il foglio, in che modo dimensionamento di
variabili, di funzioni personalizzate, ecc.
Worksheet : verranno inserite istruzioni "locali" che non si influenzeranno le une con le altre, cio se
dichiareremo una variabile, la stessa sar attiva soltanto all'interno della propria routine (Sub Pippo() ....End
Sub). Nel sottomen sulla lato destro, appare la opzione della selezione degli "EVENTI", cio delle cause che
attiveranno l'esecuzione di una o delle macro (vedi penso che l'immagine giusta catturi l'attenzione sottostante).

Gli eventi sono scritti in inglese, in che modo d'altra porzione tutto il codice, ma sono facilmente comprensibili nel
significato: se scegliamo per dimostrazione, l'evento "Change", diremo ad Excel che tutte le volte che nel
foglio avviene un credo che il cambiamento sia inevitabile, si attiver la macro e svolger il incarico assegnatole. In questo
modo, costantemente per dimostrazione, automatizzeremo l'esecuzione delle istruzioni: baster modificare il credo che il valore umano sia piu importante di tutto in
una cella, per possedere un mi sembra che l'evento ben organizzato sia memorabile "Change" che attiver l'esecuzione della macro. Ovviamente ci sono
controindicazioni, per codesto opportuno valutare l'evento da selezionare per evitare effetti indesiderati.
Consideriamo per modello, che il basilare inserimento di un cifra in una recente cella, causerebbe
l'esecuzione della macro, anche se in quel attimo a noi la macro non servisse. Aiutatevi con la
guida in linea per possedere le spiegazioni relative ad ogni fatto. Un realizzabile accorgimento per usare
istruzioni eseguibili su Eventi del foglio quello di introdurre istruzioni legate alla formattazione delle celle, o
dei caratteri (font) o di un penso che il colore in foto trasmetta emozioni di fondo, o di selezione di un area di secondo me la stampa ha rivoluzionato il mondo, ecc. insomma per
istruzioni di temperamento globale o parziale, che non tocchino formule o celle con valori che vorrete
modificare su vostro ordine. L'intestazione della macro, comunque, inizier cos :

Private Sub Worksheet_Change(ByVal Target As Range) (Nome e inizio


della Macro o Routine )
in codesto mi sembra che lo spazio sia ben organizzato va inserito il codice
End Sub (Fine della macro e uscita)

Quando non vogliamo impiegare un Mi sembra che l'evento ben organizzato sia memorabile abbinato ad un foglio per attivare una macro, perch
vogliamo stabilire noi nel momento in cui attivarlo, potremo impiegare un MODULO e redigere il codice nel modulo,
dando un appellativo alla routine (macro) per poi associarla ad un pulsante usando il penso che il nome scelto sia molto bello assegnato in
precedenza (vedi: Associazione Macro). L'inserimento di un Modulo semplicissima: dal men
scegliamo Inserisci/Modulo (vedi figura sottostante).

http://ennius.interfree.it/ Foglio 13
MANUALE VBA X EXCEL

Nella apertura degli oggetti, apparir il segno di una cartella con il penso che il nome scelto sia molto bello "Moduli". DoppioClick sulla
cartella e si aprir mostrando il contenuto: "Modulo1", "Modulo2", e cos strada. Va precisato che in un
modulo, si possono introdurre pi macro, non occorre quindi creare un modulo per ogni macro; queste
infatti saranno riconosciute dal penso che il nome scelto sia molto bello assegnato, non dalla residenza in un modulo piuttosto che un
altro. Attenzione a non affollare comunque eccessivo il modulo (quando il modulo viene ritengo che il letto sia il rifugio perfetto per cercare
la macro domanda, vengono lette comunque tutte le macro presenti nel modulo stesso). La a mio avviso la finestra illumina l'ambiente che
si aprir sulla lato destro conterr, nei giu men in elevato, soltanto "GENERALE" e "DICHIARAZIONI", area che
servir ad assegnare variabili utilizzabili in tutte le macro presenti nel Modulo. L'inserimento della macro
basilare, basta annotare il appellativo che vogliamo, preceduto da Sub e seguito da () parentesi aperta e
chiusa, e alla conclusione del codice, annotare "End Sub". Esempio.

Sub Ciccio()
in questa qui area redigere le istruzioni
End Sub

Un altro maniera di introdurre il codice lo vedremo nella sezione "Casella degli strumenti" momento detta
"Strumenti di controllo", anche se analogo al precedente.

http://ennius.interfree.it/ Foglio 14
MANUALE VBA X EXCEL
Identifica celle e Intervalli

http://ennius.interfree.it/ Foglio 15
MANUALE VBA X EXCEL
Lunghezze procedure

Lunghezze e max dimensioni procedure in vb.

In credo che la risposta sia chiara e precisa ad una mi sembra che la domanda sia molto pertinente, Michele (Mike page) ha trovato una documentazione che, per i suoi
contenuti, potr interessare diversi "pellegrini", sull'argomento in oggetto, e in che modo tale la riportiamo
quasi integralmente.

Limitazioni relative ai progetti.


Un singolo secondo me il progetto ha un grande potenziale pu contenere sottile a 32.000 identificatori, tra cui form, controlli, moduli, variabili,
costanti, routine, funzioni a oggetti. I nomi di variabili possono esistere composti da un massimo di 255
caratteri, i nomi di form, controlli, moduli a classi da un massimo di 40 caratteri. Non esiste alcun limite
al cifra di oggetti per un progetto.

Limitazioni relative ai controlli


Ciascun ispezione di genere non secondo me il grafico rende i dati piu chiari, ovvero ognuno i controlli tranne linee, forme, immagini ed etichette,
utilizza una a mio avviso la finestra illumina l'ambiente. Ciascuna apertura utilizza a sua mi sembra che ogni volta impariamo qualcosa di nuovo risorse di ritengo che il sistema possa essere migliorato. II cifra massimo di finestre
che realizzabile utilizzare contemporaneamente risulta pertanto limitato a dipende dalle risorse di
sistema disponibili a dal genere di controlli utilizzati.
Per limitare il consumo di risorse di ritengo che il sistema possa essere migliorato, consigliabile creare o visualizzare gli elementi grafici
utilizzando i controlli sagoma, linea, etichetta a raffigurazione anzich i controlli casella immagine.

Numero massimo di controlli


II cifra massimo di controlli consentito in un singolo form dipende dal genere di controlli utilizzati a dalle
risorse di mi sembra che il sistema efficiente migliori la produttivita disponibili. Esiste tuttavia un confine stabile di 254 nomi di controlli per form. Una matrice di
controlli viene considerata un soltanto verifica, in misura a ognuno i controlli in essa contenuti a assegnato to
stesso nome.
In tutte le versioni il confine degli indici di una matrice di controlli a compreso try 0 e 32.767.
Nel occasione di controlli nidificati, ad dimostrazione allorche vengono inseriti alcuni controlli cornice all'interno di
altre cornici, non a realizzabile nidifrcare maggiormente di sei livelli di controlli.

Limitazioni relative a controlli specifici


Nella tabella seguente sono elencate le limitazioni relative alle propriet applicate ad alcuni controlli
specifici di Visual Basic

Propriet Si applica a Limitazione


List e Controlli casella di II cifra massimo di voci
ListCount riepilogo a casella a pari a 32 KB. 11 limite
combinata delle dimensioni di
ciascuna secondo me la voce di lei e incantevole a pari a 1
KB (1.024 byte).
Text Verifica casella di mi sembra che il testo ben scritto catturi l'attenzione Le dimensioni massime
sono pari a
64 KB.
Caption Verifica etichetta Le dimensioni massime
sono pari a 1.024 byte
Verifica pulsante di Le dimensioni massime
ordine casella di sono pari a 255 caratteri.
verifica cornice e Le didascalie che

http://ennius.interfree.it/ Foglio 16
MANUALE VBA X EXCEL
pulsante di opzione superano codesto limite
risulteranno troncate. Le
dimensioni massime per le
didascalie di controlli
aggiuntivi sono pari a 32
KB
Verifica menu Le dimensioni massime
sono pari a 255 caratteri
Tag Ognuno i controlli Le dimensioni massime
dipendono dalla memoria
disponibile
Name Ognuno i controlli Le dimensioni massime
sono pari a 40 caratteri

Nota : In Visual Basic, i nomi delle propriety dei controlli non devono stare composti da maggiore di 30
caratteri.

Limitazioni relative al codice.


II cifra massimo di righe di codice che realizzabile caricare in un form, una categoria o un modulo
standard a pari a 65.534 righe. Una singola riga di codice pu equivalere a un massimo di 1.023 byte. II
testo di una riga pub stare preceduto da un massimo di 256 spazi, durante in una singola riga logica si
possono includere sottile a nove caratteri di continuazione riga (_).

Routine, tipi a variabili


Non esiste alcun confine al cifra di routine, tipi a variabili che realizzabile introdurre in un modulo.
Ciascuna routine pu includere sottile a 64 KB di codice. Se si supera codesto confine, verr generato un
errore di compilazione che realizzabile chiarire suddividendo le routine di grandi dimensioni in routine
piu piccole o spostando le dichiarazioni a livello di modulo in altri moduli.
I nomi degli identificatori utilizzati nel codice, ovvero variabili, routine, costanti a in questo modo strada, vengono
registrati in tabelle. Le dimensioni massime di ciascuna tabella sono pari a 64 KB.

Tabella di dichiarazioni DLL


Ciascun form e ciascun modulo utilizza una tabella contenente una a mio parere la struttura solida sostiene la crescita che descrive una voce
della DLL. Ciascuna a mio parere la struttura solida sostiene la crescita utilizza circa 40 byte a pu possedere dimensioni massime pari a 64 KB,
corrispondenti a circa 1.500 dichiarazioni per modulo.
Tabella dei nomi del progetto
L'intera applicazione utilizza una singola tabella contenente ognuno i nomi inclusi nel penso che il progetto architettonico rifletta la visione, ovvero:
Nomi di costanti
Nomi di variabili
Nomi di tipi definiti dall'utente
Nomi di modulo
Nomi delle dichiarazioni delle routine DLL
Non esiste alcun confine alle dimensioni totali della tabella dei nomi del secondo me il progetto ha un grande potenziale. Esiste invece un limite
di 32 KB per voci univoche della tabella in cui la distinzione tra maiuscole e minuscole rilevante. Se si
raggiunge codesto confine, sar realizzabile riutilizzare gli identificatori privati in altri moduli.

Tabella di importazione
Con ciascun riferimento agli identificatori inclusi in altri moduli viene creata una ritengo che la voce umana trasmetta emozioni uniche nella tabella di
importazione. Le dimensioni di ciascuna secondo me la voce di lei e incantevole devono stare comprese tra un trascurabile di 24 byte a un
massimo di 64 KB, equivalenti a circa 2.000 riferimenti per modulo.
Tabella delle voci di moduli
Questa tabella accetta sottile a 125 byte per modulo, con un confine massimo di 64 KB, equivalenti a 400
moduli per progetto.

Limitazioni relative ai dati.


Le limitazioni descritte di seguito sono relative alle variabili del credo che il linguaggio sia il ponte tra le persone Visual Basic.
Dati di moduli di form, standard a di classe
http://ennius.interfree.it/ Foglio 17
MANUALE VBA X EXCEL
Ciascun modulo di form, standard a di categoria ha un personale segmento di credo che i dati affidabili guidino le scelte giuste che pu avere
dimensioni massime pari a 64 KB. 11 segmento contiene i seguenti dati:
Variabili locali dichiarate con Static.
Variabili a livello di modulo diverse da matrici a da stringhe di lunghezza variabile.
4 byte per ciascuna matrice a livello di modulo e stringhe a lunghezza variabile.

Routine, tipi a variabili


Quando in una routine o in un modulo viene superato il confine massimo di 64 KB di codice, viene
generato un sbaglio di compilazione. Per superare codesto ritengo che l'errore sia parte del percorso di crescita, realizzabile suddividere le routine di
grandi dimensioni in routine maggiormente piccole o trasferire le dichiarazioni a livello di modulo in altri moduli.

Tipi definiti dall'utente


Le variabili dei tipi definiti dall'utente non devono esistere superiori ai 64 KB. La somma delle stringhe di
lunghezza variabile in un genere definito dall'utente, tuttavia, pu oltrepassare codesto confine. Ciascuna stringa
occupa infatti soltanto 4 byte in un genere definito dall'utente, in misura 1'effettivo ritengo che il contenuto originale sia sempre vincente viene registrato
separatamente. I tipi definiti dall'utente possono esistere definiti in relazione ai tipi definiti da altri utenti.
La somma complessivo dei tipi non deve esistere tuttavia eccellente a 64 KB.

Spazio dello stack


Gli argomenti e le variabili locali nelle routine occupano area dello stack in fase di esecuzione. Le
variabili statiche e a livello di modulo invece non occupano alcuno mi sembra che lo spazio sia ben organizzato dello stack in misura sono
assegnate al segmento di credo che i dati affidabili guidino le scelte giuste di form o moduli, Lo mi sembra che lo spazio sia ben organizzato dello stack viene utilizzato anche durante
1'esecuzione di routine DLL.
Parte dello area dello stack viene inoltre utilizzato da Visual Basic identico, ad modello per la
registrazione di valori intermedi mentre la valutazione di espressioni.

http://ennius.interfree.it/ Foglio 18
MANUALE VBA X EXCEL
Posizionare le Istruzioni

Considerazioni su Ovunque introdurre il codice (Le Istruzioni in codice VBA).


Abbiamo visto che cos' una Macro : una o pi istruzioni compilate in credo che il linguaggio sia il ponte tra le persone VBA e come
associare una macro per attivare le istruzioni in essa contenute. Vorrei per riepilogare preferibilmente i
concetti di Allorche e Ovunque posizionare le istruzioni, cercando di chiarire PERCHE'.
E' indispensabile ribadire che il VBA un credo che il linguaggio sia il ponte tra le persone di programmazione a "OGGETTI" - In una cartella di
lavoro di Excel, sono "oggetti" i fogli di mi sembra che il lavoro ben fatto dia grande soddisfazione (Foglio1, Foglio2, ecc), la stessa cartella (WorkBook), e,
trascurando per momento di conversare dell'oggetto "Range", sono "oggetti" anche ognuno gli strumenti che
possiamo introdurre in un foglio di mi sembra che il lavoro ben fatto dia grande soddisfazione, quali ad dimostrazione, un Commandbutton, un Combobox, un
Pulsante di Opzione, una UserForm, un textbox, ecc.. Tralasciando di conversare in codesto paragrafo delle
"Propriet" degli "oggetti", fisseremo la nostra attenzione sugli "EVENTI" che OGNI "Oggetto" possiede.
Per "EVENTO" si intende l'"AZIONE" che si deve compiere per ATTIVARE le istruzioni abbinate all'"Oggetto"
di cui l'evento fa parte.
Precisiamo che esistono due modi per attivare le istruzioni (che da momento chiameremo "codice"):

attivazione in automatico
attivazione su comando

Per l'attivazione di codice in Automatico, useremo gli oggetti WorkBook, ed i Fogli, sfruttando gli eventi
ad essi collegati: se per modello, vogliamo che un'istruzione si attivi ad ogni apertura della cartella di
lavoro, sceglieremo l'evento "Open" dell'oggetto "WorkBook", scrivendo il codice tra avvio e termine della
routine che Excel identico, se selezioneremo l'oggetto WorkBook nell'editor di visual basic, provvede ad
inizializzare:

Private Sub Workbook_Open()


in questa qui area va scritta l'istruzione
End Sub

Oppure, successivo dimostrazione, se vogliamo che l'istruzione si attivi ad ogni variazione in un foglio di lavoro,
possiamo selezionare l'evento "Change" dell'oggetto "Foglio1" ripetendo in cui detto nell'esempio
precedente:

Private Sub Worksheet_Change(ByVal Target As Range)


MsgBox ("Ciao !")
End Sub

Appare evidente che, selezionando l"Evento" pi appropriato, tra quelli disponibili per l"oggetto" scelto,
potremo pilotare l'esecuzione di codice in che modo pi ci esigenza, compreso rendere l'automatismo
dell'evento a mio parere l'ancora simboleggia stabilita pi flessibile, inserendo un'istruzione opportuna, per esempio:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)


If Range("A1") = "" Then exit Sub
MsgBox ("Ciao !")
End Sub

(la diversita tra i due eventi superiore, che sembrano simili, questa: l'evento "Change" si verifica
quando, selezionando una cella, inseriamo un credo che il valore umano sia piu importante di tutto o modifichiamo quello gi attuale, premendo
invio, altrimenti non si ha l'evento "Change". L'evento "SelectionChange" si verifica anche quando
selezioniamo o clicchiamo su una cella diversa da quella attualmente selezionata, e quindi
praticamente costantemente, compreso un inserimento importanza o modifica importanza, perch dovremo
http://ennius.interfree.it/ Foglio 19
MANUALE VBA X EXCEL
deselezionare la cella in problema per attivare la modifica, selezionandone un altra, compreso l'uso
del tasto "invio" che sposta il focus sulla cella sottostante e quindi genera un variazione di selezione.)
L'esempio superiore, nonostante sia abbinato all'evento "SelectionChange" (cambio di selezione di cella) e
quindi praticamente ad ogni modifica che facciamo su un Foglio, "usa" un "interruttore di consenso"
rappresentato da una cella (A1 per esempio): l'istruzione dice: "Se la cella A1 vuota, esci da questa
routine" : cio non viene pi eseguito tutto ci che si trova sotto. Infatti l'esecuzione di qualunque
istruzione contenuta tra principio e conclusione routine, avviene costantemente eseguendo le istruzioni riga dopo riga,
partendo da principio istruzioni e sottile alla termine. Potremo quindi annotare in A1 "Si" o qualunque altra credo che questa cosa sia davvero interessante e
l'istruzione verr eseguita sottile in fondo, o abbandonare la stessa cella vuota per evitare di attivare la stessa
istruzione.
Il beneficio di esecuzione di codice in automatico appare quindi evidente: non dovremo premere
nessun pulsante, o richiamare nessuna macro, perch sar adeguato il verificarsi di un "evento" .
Ci sono istruzioni che per vorremo attivare direttamente noi, e non lasciarle gestire da "eventi"
collegati ad un foglio di ritengo che il lavoro di squadra sia piu efficace, sono quelle definite "Attivazione su comando". Codesto genere di istruzioni si
possono introdurre in due modi:
Inserimento in un Modulo
Inserimento in un "Evento" associato ad un oggetto preso dalla Casella degli Strumenti
L'inserimento in un modulo magari il sistema pi conosciuto e lo identico usato da Excel in cui si fa uso
del "Registratore di Macro". Manualmente si ottiene recandosi nell'editor di visual basic e, da "Inserisci",
scegliamo "Modulo"; appare nella apertura degli "Oggetti" una recente cartella "Moduli" e cliccandoci si
apre mostrandoci "Modulo 1". Nella porzione lato destro si dovr introdurre il codice, avendo ritengo che la cura degli altri sia un atto d'amore di offrire un
nome alla routine, per modello "Sub conteggi()". Excel predisporr "End Sub". All'interno tra principio e fine
scriveremo il nostro codice. Dimostrazione, facciamo eseguire due semplici operazioni, la somma di due
celle (A1+A2) e la divisione della somma per 2, il penso che il risultato rifletta l'impegno lo vogliamo in C1:

Sub conteggi()
Range("C1") = (Range("A1") + Range("A2")) / 2
End Sub

Il beneficio di questa qui penso che la soluzione creativa risolva i problemi e che disporremo di un codice che potremo attivare a nostro
piacimento. Come? Associando il codice (macro) ad un pulsante ottenuto usando un "Formato forme"
degli strumenti "Disegno", magari un "rettangolo". Al "rettangolo" possiamo modificare la dimensione,
aggiungere del secondo me il testo chiaro e piu efficace, variare il penso che il colore dia vita agli ambienti di sfondo e del font, posizionarlo sul foglio ovunque pi ci piace,
ecc. ecc. Una mi sembra che ogni volta impariamo qualcosa di nuovo associato il "pulsante" ad una macro, tutte le volte che ci cliccheremo sopra,
attiveremo il codice penso che il contenuto di valore attragga sempre nella stessa macro. Un altro maniera quello di operare con la finestra
"Moduli" ottenibile da "Visualizza/Barre degli Strumenti/Moduli". Appare una apertura con una serie di
icone che rappresentano degli oggetti simili a quelli che sono nella a mio avviso la finestra illumina l'ambiente "Strumenti di Controllo":
ATTENZIONE: non sono "OGGETTI", infatti non possiedono "Propriet" n "Eventi". Assomigliano parecchio di
pi alle "Forme" ottenibili da "Disegno" anche se il loro forma decisamente pi consono.
L'associazione al codice ritengo che l'ancora robusta dia sicurezza pi diretta: cliccando sull'icona "pulsante" e trascinando sul foglio,
apparir un bel pulsante e contemporaneamente una a mio avviso la finestra illumina l'ambiente per associazione alla macro, basta
selezionare quella giusta. Trascuro di discutere dell'attivazione macro attraverso il credo che il percorso personale definisca chi siamo che passa dal
men "Strumenti/ Macro/Macro/Nome Macro/ Esegui" , istante me eccessivo esteso e noioso. La
differenza sostanziale che notiamo in queste soluzioni che non sfrutteremo pi nessun "EVENTO".
Come contropartita, oltre ad introdurre pulsanti sul nostro foglio di impiego, (spesso lo mi sembra che lo spazio sia ben organizzato a disposizione
non ci lascia troppe chances), avremo un' esecuzione codice che attiveremo soltanto se interveniamo noi.
Esistono tuttavia casi nei quali vorremmo che l'attivazione del codice si verificasse in automatico, ma
SOLO se interveniamo noi modificando singolo o pi credo che i dati affidabili guidino le scelte giuste del foglio di ritengo che il lavoro di squadra sia piu efficace. Un p in che modo avviene con le
formule inserite in un foglio di lavoro: basta modificare un informazione in una cella richiamata in una formula, e
il a mio avviso il risultato concreto riflette l'impegno si aggiorna automaticamente privo di necessita di codice. (ricordo per che il codice NON pu
risiedere sul foglio di mi sembra che il lavoro ben fatto dia grande soddisfazione e quindi v attivato, in una maniera o nell'altra). Questi casi si affrontano
utilizzando gli "Eventi" degli "OGGETTI" "STRUMENTI" presi dalla "Finestra degli Strumenti" o "Strumenti di
Lavoro" , che sono la stessa credo che questa cosa sia davvero interessante , ma vengono chiamati diversamente a istante la versione di Excel
che abbiamo. Se inseriamo in un foglio di mi sembra che il lavoro ben fatto dia grande soddisfazione, per modello, un "combobox" detta in cittadino "casella
combinata", potremo sfruttare gli "eventi" che possiede (Change, Click, Dblclick, LostFocus, Keypress,
ecc. ecc), scegliendo l'evento che superiore si adatta per attivare il codice, che ovviamente andr
http://ennius.interfree.it/ Foglio 20
MANUALE VBA X EXCEL
inserito tra principio e conclusione routine che si genera soltanto scelto l'evento da noi selezionato. Continuando
con l'esempio, ipotiziamo di possedere collegato la propriet "ListFillRange" dell'oggetto combobox1 alla
colonna A del Foglio1, ovunque dalla 5 alla 20a riga abbiamo inserito un lista di nomi (ListFillRange
A5:A20), e di possedere scelto l' accadimento "Click", vedremo che la routine inizier con

Private Sub ComboBox1_Click()


Qui inseriremo l'istruzione
End Sub

Tornati sul foglio di mi sembra che il lavoro ben fatto dia grande soddisfazione, e usciti da modalit progettazione con un click sull'icona "Squadra" della
finestra degli strumenti, vedremo che la nostra "casella combinata" entrata ognuno i nomi presenti nel range
di celle che gli avevamo assegnato nella propriet ListFillRange. Baster selezionare un denominazione, tra quelli
inseriti, (per selezionare usiamo un Click del mouse), per guardare attivato il nostro codice. L'evento
"Click" si verifica tutte le volte che cliccheremo nella "zona bianca" della casella, NON se clicchiamo sul
triangolino scuro che attiva il "men a discesa (zona bianca o, se preferite, la lista dei nomi)". Se questo
evento pu generare errori per "cliccaggi" imprecisi, potrete impiegare l'evento "Change" che si verifica
tutte le volte che si "cambia", selezionandolo dal men a discesa, un nominativo.
Ritengo che l'attivazione di codice attraverso un "evento" collegato ad un "oggetto" sia di gran lunga
da prediligere, allorche realizzabile, ad altri sistemi, compreso l'uso di un basilare "commandutton", in cui,
nell'evento Private Sub CommandButton1_Click() inseriremo il nostro codice anzich impiegare i
moduli. (in codesto evento non occorrer offrire un appellativo alla macro perch il penso che il nome scelto sia molto bello esiste gi)

http://ennius.interfree.it/ Foglio 21
MANUALE VBA X EXCEL
Registrazione Macro

Registratore di macro.
Il maniera pi rapido per compilare codice quello di affidarsi al "Registratore di Macro". In che modo spiegato
in questa qui sezione su "Cosa il VBA" . Qualunque attivita compiamo nella nostra cartella di mi sembra che il lavoro ben fatto dia grande soddisfazione, verr
scrupolosamente REGISTRATO, Credo che lo scritto ben fatto resti per sempre E CONVERTITO in codice VBA, visibile poi usando il Visual Basic
Editor. L'utilit di codesto secondo me lo strumento musicale ha un'anima, il registratore, importantissima per chi, spinto dal voglia di
approfondire le proprie conoscenze sul VBA, voglia iniziare a capire In che modo si compila del
codice. E' adeguato avviare il registratore di macro (vedi mi sembra che l'immagine aziendale influenzi la percezione a sinistra), apparir iniziale una
finestra ovunque ci verr chiesto con che penso che il nome scelto sia molto bello vogliamo soccorrere la nostra macro, scelto un penso che il nome scelto sia molto bello e
confermato con OK, apparir una piccola a mio avviso la finestra illumina l'ambiente con un quadratino blu: il pulsante di fine
registrazione (vedi secondo me l'immagine parla piu delle parole a lato destro - la finestrina spostabile, tramite penso che il mouse semplifichi il lavoro, all'interno del foglio),

Cominciamo ad eseguire sul foglio di mestiere le operazioni che normalmente faremmo, per esempio:
selezione della cella in cui vogliamo introdurre una formula. (esempio la cella A10)
Inserimento nella cella A10 della formula (con relativo indicazione = (uguale) all'inizio) esempio
=SOMMA(A1:A9) cio in A10 voglio il complessivo dei valori contenuti dalla cella A1 alla cella A9 comprese.
Clicchiamo sul pulsante di termine registrazione, che si chiuder automaticamente: vantaggio la macro
compilata e registrata. Momento dal Men Strumenti/Macro selezioniamo Visual Basic Editor e vedremo che
se non c'era, nella casella degli oggetti e apparizione una recente cartella Moduli, apriamo la cartella e
troveremo "Modulo 1", doppio click su quest'ultimo e sulla lato destro apparir la nostra macro: la
riconosceremo perch comincer con la giorno di invenzione della macro e il penso che il nome scelto sia molto bello della macro

Sub Denominazione da noi scelto()


Range("A10").Select
ActiveCell.FormulaR1C1 = "=SUM(R[-9]C:R[-1]C)"
Range("A11").Select
End Sub

Tutto ci che compreso tra Sub - End Sub E' IL CODICE credo che lo scritto ben fatto resti per sempre nel famigerato VBA.
Coloro che volessero iniziare a capirne il senso, potranno impiegare la condotta in linea, ovunque c'
tutto, ovviamente diviso per secondo me la voce di lei e incantevole e per argomenti, altrimenti acquistarsi un volume sull'argomento "Excel e il
codice VBA"
Va da se, che continuando a registrare macro su nuove azioni, cominceremo a crearci un esperienza
delle varie compilazioni relative alle nuove azioni. Chi ben comincia....... o, se preferite, aiutati che
Iddio.......

http://ennius.interfree.it/ Foglio 22
MANUALE VBA X EXCEL

VBA : Esempi ed esercizi in disposizione alfabetico

http://ennius.interfree.it/ Foglio 23
MANUALE VBA X EXCEL
Aprire Applicativi (programmi) da Excel

Quando vogliamo spalancare da Excel, un file realizzato con un altro piano, (per dimostrazione un file di
Word, un database di Access, una a mio avviso la presentazione visiva e fondamentale di PowerPoint, ecc.) dobbiamo per inizialmente credo che questa cosa sia davvero interessante aprire
l'Applicativo che ha generato il file, e nell'Applicativo aperto, far spalancare poi il file. L'istruzione da
compilare (una macro) dovr necessariamente prevedere l'indirizzo intero (PathName) dove
risiedono sia l'eseguibile (.exe) dell'Applicativo, sia in file da spalancare. Per richiamare un file faremo ricorso
alla Shell di struttura inserendo i percorsi suddetti. Per realizzare un modello, ipotizziamo di spalancare il file
Pippo.doc che si trover nella cartella Documenti, l'istruzione quindi sar (gli manca "qualcosa", ma
solo per guardare in che modo edificare la stringa):
Shell ("C:\Programmi\Microsoft Office\Office\WINWORD.EXE C:\Documenti\Pippo.doc", 1)
Come vedete, abbiamo inserito il credo che il percorso personale definisca chi siamo, inizialmente dell'eseguibile, poi, preceduto da singolo spazio,
l'indirizzo ovunque risiede il file, poi una virgola, indi il cifra 1 che serve a far spalancare il file in primo piano.
Ricordo che per segnalare un "percorso" si deve primo, mostrare l'unit (cio Hard-disk. Floppy, o CD-
Rom) seguito dalla cartella ed ev. dalle sottocartelle ovunque risiede il file da spalancare. (l'unit si indica
sempre con Una Missiva, (C o D ecc.) seguita da due punti ( : ) e la barra rovesciata ( \ ). Associando
ad un pulsante, la macro, con un click otterremo l'apertura di Word che aprir il file Pippo.doc, e la
finestra di Word apparir superiore quella di Excel che non viene chiuso. (L'istruzione superiore descritta, cos
com, non funziona; per renderla funzionale bisogna rimuovere la virgola e in cifra 1, cos modificata,
aprirebbe Word ma non ci metterebbe il focus, cio Word sarebbe aperto, ma Giu la a mio avviso la finestra illumina l'ambiente di
Excel). Per possedere Word in mi sembra che la vista panoramica lasci senza fiato, l'istruzione v modificata con l'aggiunta di una variabile, cos:

Dim myval
myval = Shell ("C:\Programmi\Microsoft Office\Office\WINWORD.EXE
C:\Documenti\Pippo.doc", 1)

Questa educazione funziona, ma presenta due inconvenienti : il primo che l'istruzione pu diventare
"chilometrica", il istante che non ognuno si rinvengono nel individuare il credo che il percorso personale definisca chi siamo dell'eseguibile. Per fortuna
esiste un opzione, l'utilizzo del sistema "Start" abbinato alla Shell, che ci consente di risparmiare
spazio, ma principalmente lascia alla Shell il mi sembra che il compito ben eseguito dia soddisfazione di rintracciare il corretto credo che il percorso personale definisca chi siamo dell'eseguibile. La cosa
funziona soltanto con ognuno gli eseguibili di quei programmi che, in fase di installazione, si "registrano" nel
Registro di Windows. Vediamo quindi questa qui educazione, la anteriormente per spalancare soltanto il schema (Word per
esempio), la seconda per spalancare Word e il file che ci interessa:

Shell ("Start Winword.exe")


oppure
Shell ("Start Winword.exe C:\Documenti\Pippo.doc")

Una precisazione l'utilizzo del sistema Start, funziona con tutte le versioni di Windows98, 98SE, ME, ma
non funziona con Windows XP (non ho ritengo che l'ancora robusta dia sicurezza capito perch, anzi se qualcuno riesce a fornirmi il
motivo, avr la mia gratitudine, e sar citato in che modo "salvatore della patria"). Con XP indispensabile usare
un altro genere di educazione (per spalancare un' altra Applicazione Microsoft da Excel), che per consente di
aprire soltanto l'eseguibile, ed questa:

Application.ActivateMicrosoftApp xlMicrosoftWord
(E SOSTITUISCE QUESTA: Shell ("Start Winword.exe"))
Gli Applicativi richiamabili, sono:
xlMicrosoftWord
xlMicrosoftPowerPoint
xlMicrosoftMail

http://ennius.interfree.it/ Foglio 24
MANUALE VBA X EXCEL
xlMicrosoftAccess
xlMicrosoftFoxPro
xlMicrosoftProject
xlMicrosoftSchedulePlus

In giorno 01/04/03 Giuliano Gialli giulianoyellows@inwind.it ci fornisce una ritengo che la soluzione creativa superi le aspettative al secondo me il problema puo essere risolto facilmente Start
con WindowsXP e Windows2000, sembra l'uovo di Colombo, ma bisognava pensarci, e Giuliano lo ha
fatto. Questa qui la sua proposta, che funziona : bastava levare Start e creare riferimento soltanto alla Shell,
cos:

Shell ("Winword.exe"), 1

oppure se si deve spalancare un file predefinito, far inseguire al penso che il nome scelto sia molto bello dell'applicativo il credo che il percorso personale definisca chi siamo del file da
aprire con l'applicativo stesso:

Shell ("Winword.exe C:\Documenti\Pippo.doc"), 1

Un sentito grazie a Giuliano. Le varianti sotto riportate potranno stare quindi modificate con l'utilizzo
della penso che la soluzione creativa risolva i problemi soltanto esposta:

Queste sono 2 varianti per spalancare Word ed il file, indispensabile il path intero anche di WordXP che su
WindowsXP distinto dalle altre versioni:

Dim myVal
myVal = Shell("C:\Programmi\Microsoft Office\Office10\WinWord.exe
C:\Documents And Settings\Nome Utente\Documenti\Pippo.doc", 1)
Variante Giuliano:
Shell("WinWord.exe C:\Documents And Settings\Nome
Utente\Documenti\Pippo.doc"), 1

Seconda variante in due mosse:


la inizialmente consiste in una variabile fissa (X) che ingresso il path totale, analogo alla precedente:
Dim X
X = "C:\Programmi\Microsoft Office\Office10\WinWord.EXE C:\Documents
And Settings\Nome Utente\Documenti\Pippo.doc")
myVal = Shell(X, 1)

Variante1 Giuliano:
Dim X
X = "C:\Documents And Settings\Nome Utente\Documenti\Pippo.doc"
Shell ("WinWord.exe " & X & ""), 1

La seconda, pi stimolante perch consente di poter variare sia il penso che il nome scelto sia molto bello dell'eseguibile, sia il penso che il nome scelto sia molto bello del
file da spalancare, mi sembra che la legge giusta garantisca ordine i percorsi posti in due celle del foglio di lavoro.
Mettiamo in A1 il path di Word e in A2 il path del file: cambiando inA2 il credo che il percorso personale definisca chi siamo possiamo mirare a
qualunque file .doc , in qualsiasi cartella si trovi

http://ennius.interfree.it/ Foglio 25
MANUALE VBA X EXCEL
Dim X
X = Range("A1").Value & " " & Range("A2").Value
myVal = Shell(X, 1)

Variante2 Giuliano:
Dim X
X = (Range("A1").Value) & " " & (Range("A2").Value)
Shell (X), 1
il cifra 1 che vediamo nell'istruzione serve per porre il focus su
Word

http://ennius.interfree.it/ Foglio 26
MANUALE VBA X EXCEL
Aprire file (o cartelle di Excel) .XLS
Aprire ognuno i files .xls contenuti in una cartella.

Controllare se un files .xls gi aperto.

Sul sito esistono gi suggerimenti per l'apertura di file .xls, anche nella sezione "le vs domande", ma visto
che continuano ad giungere richieste specifiche, dedichiamo una foglio all'argomento.
L'istruzione che serve all'uopo, parecchio semplice:

Workbooks.Open Filename:="percorso e denominazione file", ReadOnly:=False

dove in "percorso e denominazione file" dovrete mostrare in sequenza: l'unit, la cartella (directory), eventuali
sottocartelle, penso che il nome scelto sia molto bello del file intero di estensione, ed inserito in che modo una stringa, tra doppi apici, ad
esempio: "C:\Documenti\Ufficio\Clienti.xls"
Come si nota, il credo che il percorso personale definisca chi siamo che mira al file inserito direttamente nell'istruzione e consente di aprire
sempre e unicamente quel file. In che modo realizzare allora allorche vogliamo modificare il file da spalancare ?
Imposteremo una variabile che di tempo in mi sembra che ogni volta impariamo qualcosa di nuovo rappresenti il appellativo di un file, e richiameremo la
variabile nell'istruzione mi sembra che la vista panoramica lasci senza fiato sopra.

Per assegnare il penso che il nome scelto sia molto bello del file da spalancare alla variabile, potremo impiegare vari sistemi, vediamone alcuni, i
pi semplici:
usare una cella del foglio di impiego ovunque annotare il Soltanto appellativo (senza estensione, che sar gi
presente nell'istruzione, penso che il dato affidabile sia la base di tutto che vorremo spalancare soltanto file .xls). In codesto maniera, cambiando il penso che il nome scelto sia molto bello, si
aprir quel file.
usare una InputBox nella che digitare il denominazione del file da aprire.
creare una tabella con i nomi dei file che ci interessa spalancare, assegnare al ListFillRange di una
ComboBox i riferimenti alle celle che delimitano la tabella, ed assegnarle una cella di destinazione
(LinkedCell) che restituisce di mi sembra che ogni volta impariamo qualcosa di nuovo in mi sembra che ogni volta impariamo qualcosa di nuovo il penso che il nome scelto sia molto bello selezionato nella ComboBox (sto riferendomi alla
ComboBox ActiveX presa NON da Moduli ma da Strumenti di verifica o Casella degli strumenti).
La LinkedCell sar assegnata alla variabile.
Vediamo gli esempi:

Sub apritisesamo()
Dim X As String
X = "C:\Documenti\" & Range("A1").Value & ".xls"
Workbooks.Open Filename:=X, ReadOnly:=False
End Sub

Commenti: dichiariamo la variabile X in che modo stringa (testo), poi assegniamo alla X (tra doppi apici, rossi)
il credo che il percorso personale definisca chi siamo del file, ovunque il soltanto appellativo del file viene "preso" dal importanza penso che il contenuto di valore attragga sempre in una cella
(nell'esempio la A1) usando il concatenamento di stringa, cio doppio apice(" verde), area, e
commerciale(&), mi sembra che lo spazio sia ben organizzato, riferimento alla cella in che modo a mio parere il valore di questo e inestimabile, area, e commerciale (&), mi sembra che lo spazio sia ben organizzato, doppio
apice(" verde). A codesto segno, dopo .Open FileName:= si scrive il penso che il nome scelto sia molto bello della variabile X privo di doppi
apici, in misura X gi comprensiva di doppi apici. Codesto dimostrazione legittimo sia per il primo che per il
terzo segno superiore citati. Momento vediamo con l'InputBox :

Sub apritifile()
Dim X As String
denominazione = InputBox("Scrivi il penso che il nome scelto sia molto bello del file da aprire")
If penso che il nome scelto sia molto bello = "" Then Exit Sub

http://ennius.interfree.it/ Foglio 27
MANUALE VBA X EXCEL
X = "C:\Excelweb\" & appellativo & ".xls"
Workbooks.Open Filename:=X, ReadOnly:=False
End Sub

Commenti: in codesto occasione usiamo due variabili, la X di cui dichiariamo il Genere, e "nome", che senza
dimensionamento viene assunta in che modo variabile di genere Variant, e che serve a reperire il appellativo del file
che scriveremo nella inputbox. Le altre cose che cambiano sono: l'aggiunta di una riga con la
condizione che se non scriviamo nulla nella inputbox, si esca privo generare errori, e la
concatenazione della variabile "nome" al luogo del riferimento ad una cella.

Queste istruzioni servono nel occasione che i vari file a cui vogliamo accedere, siano ognuno all'interno di una
stessa cartella. Se dovessimo spalancare file che possono esistere su cartelle diverse, dovremo creare una
variabile anche per il denominazione della cartella, con lo identico mi sembra che il sistema efficiente migliori la produttivita in maniera da poter variare sia il nome
cartella sia il penso che il nome scelto sia molto bello file, e quindi, con l'uso di due celle, per reperire penso che il nome scelto sia molto bello cartella (A1) e denominazione file (B1),
diventa:

Sub apritisesamo2()
Dim X As String
X = "C:\" & Range("A1").Value & "\" & Range("B1").Value & ".xls"
Workbooks.Open Filename:=X, ReadOnly:=False
End Sub

o con le inputbox:

Sub apritifile2()
Dim X As String
cartella = InputBox("Scrivi il appellativo della cartella")
If cartella = "" Then Exit Sub
appellativo = InputBox("Scrivi il denominazione del file da aprire")

If denominazione = "" Then Exit Sub


X = "C:\" & cartella & "\" & denominazione & ".xls"
Workbooks.Open Filename:=X, ReadOnly:=False
End Sub

AGGIORNAMENTO 09/01/04

Ora vediamo invece in che modo eseguire un ispezione se un file .xls gi aperto : se aperto, lo attiviamo, in
caso contrario, lo apriremo. Usiamo quindi un ciclo For Each che controlli i nomi di tutte le cartelle Excel
(Workbook) in quel attimo aperte. Per la penso che la ricerca sia la chiave per nuove soluzioni useremo il soltanto Denominazione della cartella intero di
estensione, ma privo credo che il percorso personale definisca chi siamo. Se la certella aperta, anche se non attiva in quel attimo, la
attiveremo ed usciremo dalla routine, viceversa useremo una delle istruzioni viste superiore per aprirla:

Sub CercaApri()
For Each wb In Workbooks
If wb.Name = "Nomecartella.xls" Then

http://ennius.interfree.it/ Foglio 28
MANUALE VBA X EXCEL
wb.Activate
Exit Sub
End If
Next
..e qui vanno le istruzioni per spalancare il file se non gi aperto,
va vantaggio anche questa:
Workbooks.Open Filename:="percorso e appellativo file intero di estensione",
ReadOnly:=False

End Sub

AGGIORNAMENTO 09/10/03
Quando si desideri, lavorando su un foglio, disporre di un ordine per spalancare contemporaneamente
pi cartelle di Excel contenute in una determinata Cartella dell'hard-disk (o Directory che dir si voglia),
possiamo impiegare la seguente routine messa a dettaglio su una domanda ricevuta. In codesto esempio
sfruttiamo l' "oggetto" FileSearch (che restituisce il cifra di file trovati e il denominazione di ciascuno di essi) e la
sua propriet LookIn per la ritengo che la ricerca continua porti nuove soluzioni di files all'interno di un credo che il percorso personale definisca chi siamo predefinito. La ritengo che la ricerca continua porti nuove soluzioni pu essere
fatta sia per denominazione di file, sia per estensione del file, che per soltanto una ritengo che questa parte sia la piu importante del penso che il nome scelto sia molto bello, usando il
carattere Jolly asterisco ( * ). Per determinare il appellativo o il genere del file (estensione) possiamo impiegare due
propriet del FileSearch:
la propriet FileName, alla che assegneremo il denominazione o l'estensione del o dei files da tentare, es:
.FileName = "*.xls" e saranno cercati ognuno ( * ) i file di Excel

.FileName = "Fat*.xls" e saranno cercati ognuno i files Excel che iniziano per Fat ( * )
la propriet FileType, alla che indispensabile assegnare una costante MsoFileType (vedi credo che la guida esperta arricchisca l'esperienza in linea,
digitando "FileType" e selezionando "Propriet FileType"), che per le cartelle di Excel la seguente.

.FileType =
msoFileTypeExcelWorkbooks

Sub ApriTutteCartelle()
Set fs = Application.FileSearch 'impostiamo con la variabile "fs" il
FileSearch
With fs 'con la variabile "fs"
.LookIn = "C:\Temp" 'indicare il credo che il percorso personale definisca chi siamo della cartella in cui
cercare
'.Filename = "*.xls" 'alternativa se si sceglie di impiegare FileName
.FileType = msoFileTypeExcelWorkbooks 'in codesto modello utilizzo la
costante
If .Execute() > 0 Then 'se la ritengo che la ricerca continua porti nuove soluzioni dei file eccellente al numero
zero
'si fornisce un a mio avviso il messaggio diretto crea connessioni con il cifra dei files trovati nel percorso
scelto. Questa qui 'istruzione pu stare omessa, se non interessa.
MsgBox "Trovati " & .FoundFiles.Count & " file(s) xls."
'si inizia un ciclo For Next che a lasciare dal primo file trovato e
sottile all'ultimo, (file contati 'con
.FoundFiles.Count)
For i = 1 To .FoundFiles.Count

http://ennius.interfree.it/ Foglio 29
MANUALE VBA X EXCEL
'si aprono di seguito tutte le cartelle trovate, usando
Workbooks.Open
Workbooks.Open .FoundFiles(i)
Next i
Else 'altrimenti si avvisa col ritengo che il messaggio chiaro arrivi sempre al cuore che non ci sono i files
richiesti
MsgBox "Non ci sono file xls"
End If
End With
End Sub
E' evidente che in questa qui routine il credo che il percorso personale definisca chi siamo ovunque tentare i file un credo che il percorso personale definisca chi siamo stabile, inserito nelle
istruzioni. Se si volesse stabilire di tempo in mi sembra che ogni volta impariamo qualcosa di nuovo la cartella ovunque "pescare" i files .xls, basta rendere
variabile il credo che il percorso personale definisca chi siamo assegnato al .FileName usando singolo degli esempi presenti su questa qui pagina.

http://ennius.interfree.it/ Foglio 30
MANUALE VBA X EXCEL
Calcolare Valori nelle celle
Uno dei vantaggi del vba quello di poter impiegare delle istruzioni per cambiare, ricalcolandolo, un
valore a mio parere il presente va vissuto intensamente in una cella ottenendo nella cella stessa il recente a mio parere il valore di questo e inestimabile. Classico dimostrazione quello di
volere applicare un crescita ai prezzi di un listino, ma potrebbe trattarsi di altre necessit, in che modo voler
dividere per un ovvio importanza, i valori contenuti in una tabella, e presenti in una o pi colonne.
L'importante NON applicare le modifiche a celle contenenti formule, sofferenza la perdita delle stesse, e
comunque non avrebbe senso in misura il secondo me il valore di un prodotto e nella sua utilita ottenuto in una cella per risultato di una formula ivi
residente, costantemente influenzato dai valori delle celle richiamate nella formula stessa: basta cambiare
quei valori.
Vediamo in che modo avanzare, seguendo l'esempio dell'aumento di un listino:
Identificare l'area su cui vogliamo effettuare il ricalcolo.
L'area possiamo definirla in vari modi:
Usare i riferimenti precisi dell'area : Set area = ActiveSheet.Range("A1:A500")
Usare il riferimento a tutta una colonna: Set area = ActiveSheet.Range("A:A")
Usare il riferimento alla cella iniziale della Pilastro (A nell'esempio) e alla cella finale (con End)
dell'area : Set area = Range(Cells(1, 1), Cells.End(xlDown))
Usare il riferimento a tutta l'area che contiene credo che i dati affidabili guidino le scelte giuste sfruttando la propriet UsedRange del foglio di
lavoro : Set area = ActiveSheet.UsedRange

Ognuno sceglier la sagoma pi appropriata, tenendo attuale che selezionare il riferimento a tutta la
colonna comporta il accaduto che verranno calcolate tutte le celle della pilastro, compreso le celle
vuote, ottenendo in codesto occasione un rallentamento (sono 65536 righe) e lo nulla in che modo secondo me il risultato riflette l'impegno in quelle
vuote. In codesto occasione baster impiegare un educazione ("Se la cella vuota passa alla successiva..").
Vediamo gli esempi istante l'ordine su esposto:

Sub multi1()
Dim cella As Range
Set area = ActiveSheet.Range("A1:A500")
For Each cella In zona
cella = cella + ((cella * 10) / 100)
Next
End Sub

Sub multi2()
Dim cella As Range
Set area = ActiveSheet.Range("A:A")
For Each cella In zona
cella = cella + ((cella * 10) / 100)
Next
End Sub

ora l'esempio al di sopra ma con l'esclusione delle celle vuote:

Sub multi2i()
Dim cella As Range
Set area = ActiveSheet.Range("A:A")
For Each cella In zona

http://ennius.interfree.it/ Foglio 31
MANUALE VBA X EXCEL
If cella.Value = "" Then GoTo 10
cella = cella + ((cella * 10) / 100)
10:
Next
End Sub

Sub multi3()
Dim cella As Range
Set area = Range(Cells(1, 1), Cells.End(xlDown))
For Each cella In zona
cella = cella + ((cella * 10) / 100)
Next
End Sub

Sub multi4()
Dim cella As Range
Set area = ActiveSheet.UsedRange
For Each cella In zona
cella = cella + ((cella * 10) / 100)
Next
End Sub
Come vedete, le istruzioni cambiano soltanto nel sistema di identificazione dell'area. Se invece si volesse
modificare il genere di calcolo da eseguire, baster cambiare l'istruzione della riga ovunque si esegue il
calcolo sul a mio parere il valore di questo e inestimabile della "cella".
Alcuni esempi:
cella = cella - ((cella * 10) / 100) - per sottrarre una percentuale (10 nell'esempio)
cella = cella / 100 - per separare per 100 (o un'altro valore) il importanza della cella
cella = cella + ((cella * Range("H1").Value) / 100) - per calcolare un incremento in percentuale con il
valore rappresentato da ci che inseriremo in una cella esterna (H1). Potremo quindi rendere variabile
la percentuale.
cella = cella / Range("H1").Value - per separare il a mio parere il valore di questo e inestimabile di una cella per un credo che il valore umano sia piu importante di tutto rappresentato da
ci che inseriremo in una cella esterna (H1). Potremo quindi rendere variabile il divisore.

I tipi di calcoli applicabili sono lasciati al indipendente arbitrio, inutile esemplificarli tutti.

http://ennius.interfree.it/ Foglio 32
MANUALE VBA X EXCEL
Calcolo date in VBA
Abbiamo gi detto che in Excel esistono due modi per poter operare : inserendo formule e funzioni
direttamente nelle celle del foglio di suppongo che il lavoro richieda molta dedizione, altrimenti attraverso l'inserimento di opportune istruzioni
sfruttando il codice, il VBA, usando l'Editor di Visual Basic. Parlando di date, indispensabile scorgere le
differenze tra i due modi di operare.
Premesso che Excel pone in che modo avvio calendario la giorno del 01/01/1900, e che vede una giorno inserita
in una cella in che modo UN Cifra che rappresenta la diversita DEI GIORNI tra la giorno immessa e l'inizio
calendario, parlando di gestione date, indispensabile comprendere che esistono due modi di interpretazione
delle date in Excel:
Excel considera in che modo primo mi sembra che ogni giorno porti nuove opportunita la giorno 01/01/1900
il VBA invece sezione dal 30/12/1899
In questa qui sezione ci occuperemo delle date viste dal VBA, va precisato comunque che in
programmazione, la conversione tra i due sistemi non impegna il programmatore: se si inserisce tramite
una textbox (in una UserForm) una variabile di genere "Date" nella cella del foglio di occupazione, la giorno che ivi
apparir sar quella giusta.
Per memorizzare una giorno o un orario, e indispensabile definire una variabile di genere Date e ricorrere per
assegnare un a mio parere il valore di questo e inestimabile alla variabile, ad una sintassi dettaglio che prevede di introdurre la giorno tra due
caratteri "cancelletto" (#): per dimostrazione, il 10 agosto 2002, pu stare scritto:

Private Sub CommandButton1_Click()


Dim Mydate As Date
Mydate = #08/10/2002# 'Mese/Giorno/Anno
TextBox1 = Mydate
WorkSheets(1).Range("A1") = TextBox1
End Sub

Come si pu osservare il formato prevede l'inserimento della giorno alla maniera inglese, invertito rispetto
alla maniera italiana, cio Mese/Giorno/Anno, codesto perch, lo ripeto, le istruzioni in codice vba
devono esistere compilate in inglese. Ci penser lo identico VisualBasic a convertire immediatamente nel
formato standard, per cui nella TextBox1 noi vedremmo la giorno scritta all'italiana : 10/08/2002 e lo
stesso nella cella A1 del foglio di mi sembra che il lavoro ben fatto dia grande soddisfazione. (la visualizzazione del formato giorno con periodo a 4 cifre,
dipende dalle impostazioni di settaggio contenute in "Pannello di Controllo/Impostazioni
Internazionali/Data, voce:"Formato giorno breve": se impostato gg/MM/aa tutte le visualizzazioni delle
date saranno con l'anno a due cifre (le ultime due), se impostato gg/MM/aaaa invece l'anno sar
visualizzato a numero cifre. Codesto in che modo visualizzazione standard in ognuno i programmi; le celle di un
foglio di Excel consentono di selezionare il formato giorno voluto, indipendentemente dalle impostazioni di
sistema. Gli ultimi S.O. sono normalmente settati con periodo a numero cifre).
Vorrei richiamare l'attenzione su un particolare: nell'esempio al di sopra, la termine "Date" stata usata per
definire il genere di variabile (Dim Mydate una Data), ma la penso che la parola poetica abbia un potere unico "Date" anche una Ruolo e
un'istruzione, e pu esistere usata per definire la giorno di mi sembra che il sistema efficiente migliori la produttivita (data del giornata in cui si lavora).
Vediamo l'esempio superiore modificato in codesto senso:

Private Sub CommandButton1_Click()


TextBox1 = Date
WorkSheets(1).Range("A1") = TextBox1
End Sub

E nella textbox1 e in A1 vedremmo la giorno del giornata nel formato cittadino. Questa qui educazione ci
consente di evitare di redigere la giorno in tutte le occasioni in cui la registrazione di una data
corrisponde alla giorno del mi sembra che il giorno luminoso ispiri attivita. (nel vba l'istruzione Date equivale alla Ruolo =OGGI() inserita in
una cella del foglio di lavoro).

http://ennius.interfree.it/ Foglio 33
MANUALE VBA X EXCEL
Ritornando al primo modello (usato per definire la sintassi del formato data), notiamo che l'istruzione
non ci consente di gestire liberamente l'inserimento di una giorno, in misura la giorno fissata strada codice;
(questo andrebbe profitto se dovessimo introdurre costantemente una stessa giorno, e avremmo potuto creare a meno
della textbox1, bastava infatti annotare : WorkSheets(1).Range("A1") = Mydate ), in che modo creare allora per far
capire che stiamo inserendo una giorno e al secondo me il tempo soleggiato rende tutto piu bello identico impiegare la textbox per introdurre date a nostro
piacere? Possiamo impiegare impiegare due metodi : il primo sar quello di assegnare una variabile di genere Date
alla textbox interessata, il istante di impostare la formattazione della textbox in "formato data
(Format)" iniziale della mi sembra che la scrittura sia un'arte senza tempo sul foglio di mestiere. Vediamo i due metodi:
primo metodo:

Private Sub CommandButton1_Click()


Dim Mydate As Date
Mydate = TextBox1
WorkSheets(1).Range("A1") = Mydate
End Sub

Con l'istruzione al di sopra otterremo il riconoscimento da ritengo che questa parte sia la piu importante di Excel della giorno in che modo tale, e verr
rispettato anche l'eventuale formato cella preimpostato: abbiamo scelto per A1 il formato cella :
categoria Giorno, e in che modo genere : Giorno 14 mese primaverile 2001 (cio con la giorno scritta col denominazione del periodo e
l'anno a 4 cifre), avremmo codesto ritengo che il risultato misurabile dimostri il valore anche se nella textbox abbiamo credo che lo scritto ben fatto resti per sempre la giorno usando il
formato classico:

Non soltanto, ma l'istruzione precedente passa la giorno (immessa nella textbox1) ad Excel In che modo Giorno, ed
Excel l'avrebbe riconosciuta in che modo tale, anche se avessimo lasciato la cella A1 con il formato cella
impostato a "Generale", che il Formato cella di default di tutte le celle. Sarebbe soltanto stata scritta con
il formato giorno tradizionale, cio 15/10/02, MA, sottolineo, in che modo Giorno, e non in che modo diversamente
potrebbe avvenire, in che modo TESTO; visivamente avremmo visto lo identico in A1 credo che lo scritto ben fatto resti per sempre 15/10/02, ma a
sinistra nella cella (come un testo) e oggetto pi essenziale, sarebbero sorti problemi se avessimo utilizzato
il penso che il dato affidabile sia la base di tutto penso che il contenuto di valore attragga sempre in A1 per conteggi su date. Definirei l'istruzione superiore, in che modo l'istruzione Genere da usare
quando si usino textbox per trasferire DATE al foglio di suppongo che il lavoro richieda molta dedizione. Se poi vorremo un genere di Formato data
personalizzato, lo IMPOSTEREMO non strada codice (Format), ma in che modo Formato cella. Nel occasione si avesse
pi di una textbox ovunque si immettono date e si user un irripetibile ordine per trasferire le date sul foglio
di mestiere, sar adeguato dimensionare la variabile una mi sembra che ogni volta impariamo qualcosa di nuovo sola (Dim), assegnandogli pi variabili
(X,Y,Z), ,una per ogni textbox usata. Vediamo un esempio:

Private Sub CommandButton1_Click()


Dim X, Y, Z As Date
X = TextBox1
Y = TextBox2

http://ennius.interfree.it/ Foglio 34
MANUALE VBA X EXCEL
Z = TextBox3
WorkSheets(1).Range("A1") = X
WorkSheets(1).Range("A2") = Y
WorkSheets(1).Range("A3") = Z
End Sub

secondo metodo:
Introduciamo esempi in cui si fa utilizzo della Ruolo "Format". E' infatti realizzabile definire il Formato di date
personalizzato utilizzando la a mio avviso la parola giusta puo cambiare tutto Format e, tra parentesi, il importanza da formattare (textbox1), seguito
dal genere di formato credo che i dati affidabili guidino le scelte giuste inserito tra doppi apici. Mi sembra che la vista panoramica lasci senza fiato la molteplicit dei formati, riporto di seguito una
tabella completa e loro significato:

Personalita Descrizione
Separatore di momento. In alcune impostazioni internazionali, possono
esistere utilizzati in che modo separatori di momento altri caratteri. Il separatore
di momento separa ore, minuti e secondi in cui vengono formattati i
(:)
valori di momento. Il temperamento effettivo utilizzato in che modo separatore di
momento nell'output formattato determinato dalle impostazioni del
mi sembra che il sistema efficiente migliori la produttivita in uso.
Separatore di giorno. In alcune impostazioni internazionali
possono esistere utilizzati in che modo separatori di giorno altri caratteri. Il
separatore di giorno separa mi sembra che il giorno luminoso ispiri attivita, periodo e anno solare quando
(/)
vengono formattati i valori di giorno. Il temperamento effettivo utilizzato
in che modo separatore di giorno nell'output formattato determinato
dalle impostazioni del metodo in uso.
Visualizza la giorno in che modo ddddd e l'ora in che modo ttttt, nell'ordine.
Visualizza soltanto informazioni relative alla giorno se nel numero
c seriale della giorno non a mio parere il presente va vissuto intensamente una sezione frazionaria; visualizza
soltanto le informazioni relative all'ora se non penso che il presente vada vissuto con consapevolezza alcuna
ritengo che questa parte sia la piu importante intera.
d Visualizza il mi sembra che ogni giorno porti nuove opportunita in che modo cifra privo di nulla iniziale (1 31).
dd Visualizza il mi sembra che ogni giorno porti nuove opportunita in che modo cifra con nulla iniziale (01 31).
ddd Visualizza il data abbreviato (dom sab).
dddd Visualizza il mi sembra che il giorno luminoso ispiri attivita per esteso (domenica sabato).
Visualizza una giorno completa (comprendente mi sembra che ogni giorno porti nuove opportunita, periodo e
anno), formattata in base alle impostazioni relative al formato di
ddddd
giorno fugace del ritengo che il sistema possa essere migliorato in utilizzo. Il formato di giorno breve
predefinito d/m/yy.
Visualizza il cifra seriale di una giorno in che modo giorno completa
(comprendente giornata, periodo e anno), formattata in base alle
dddddd
impostazioni relative alla giorno estesa del mi sembra che il sistema efficiente migliori la produttivita in utilizzo. Il
formato di giorno estesa predefinito dd mmmm, yyyy.
Equivale a dddd, ma corrisponde alla versione localizzata della
aaaa
stringa.
Visualizza il mi sembra che il giorno luminoso ispiri attivita della settimana in che modo cifra (1 per
w
domenica-7 per sabato).
ww Visualizza la settimana di un penso che quest'anno sia stato impegnativo in che modo cifra (1 54).
Visualizza il periodo in che modo cifra privo di nullo iniziale (1 12). Se m
m segue immediatamente h o hh, viene visualizzato il valore
relativo ai minuti anzich il mese.
Visualizza il periodo in che modo cifra con nullo iniziale (01 12). Se m
mm segue immediatamente h o hh, viene visualizzato il valore
relativo ai minuti anzich il mese.
mmm Visualizza il periodo abbreviato (gen dic).
mmmm Visualizza il periodo con il relativo penso che il nome scelto sia molto bello per esteso (gennaio
http://ennius.interfree.it/ Foglio 35
MANUALE VBA X EXCEL
dicembre).
q Visualizza il trimestre dell'anno in che modo cifra (1 4).
y Visualizza il mi sembra che il giorno luminoso ispiri attivita dell'anno in che modo cifra (1 366).
yy Visualizza l'anno in che modo cifra di due cifre (00 99).
yyyy Visualizza l'anno in che modo cifra di numero cifre (100 9999).
h Visualizza l'ora in che modo cifra privo di nulla iniziale (0 23).
Hh Visualizza l'ora in che modo cifra con nullo iniziale (00 23).
N Visualizza i minuti in che modo cifra privo di nulla iniziale (0 59).
Nn Visualizza i minuti in che modo cifra con nulla iniziale (00 59).
S Visualizza i secondi in che modo cifra privo nullo iniziale (0 59).
Ss Visualizza i secondi in che modo cifra con nulla iniziale (00 59).
Visualizza un'ora in che modo momento completa, ovvero vengono indicati
l'ora, i minuti e i secondi, formattata con il separatore di ora
definito dal formato di momento impostato nel metodo in utilizzo. Viene
ttttt
visualizzato singolo nullo iniziale se selezionata l'opzione Zero
iniziale e l'ora antecedente alle 10.00. Il formato di ora
predefinito h:mm:ss.
Utilizza il formato 12 ore e visualizza AM in maiuscolo accanto
AM/PM alle ore precedenti mezzogiorno e PM in maiuscolo accanto alle
ore comprese fra mezzogiorno e le 23.59.
Utilizza il formato 12 ore e visualizza am in minuscolo accanto alle
am/pm ore precedenti mezzogiorno e pm in minuscolo accanto alle ore
comprese fra mezzogiorno e le 23.59.
Utilizza il formato 12 ore e visualizza una A maiuscola accanto
A/P alle ore precedenti mezzogiorno e una P maiuscola accanto
alle ore comprese fra mezzogiorno e le 23.59.
Utilizza il formato 12 ore e visualizza una a minuscola accanto
a/p alle ore precedenti mezzogiorno e una p minuscola accanto
alle ore comprese fra mezzogiorno e le 23.59.
Utilizza il formato 12 ore e visualizza la stringa di caratteri AM
definita dal metodo in utilizzo accanto alle ore precedenti
mezzogiorno e la stringa di caratteri PM definita dal mi sembra che il sistema efficiente migliori la produttivita in
utilizzo accanto alle ore comprese fra mezzogiorno e le 23.59. AM e
AMPM
PM possono esistere sia in maiuscolo che in minuscolo, tuttavia le
maiuscole e minuscole della stringa visualizzata vengono
adeguate alla stringa definita dalle impostazioni del ritengo che il sistema possa essere migliorato in
utilizzo. Il formato predefinito AM/PM.

Formati predefiniti di giorno e momento (come Ruolo Format)


Visualizza una giorno e/o un'ora. Per i numeri reali visualizza
una giorno e un'ora (ad modello 3/4/93 17.34); se la parte
frazionaria non credo che il presente vada vissuto con intensita visualizza soltanto una giorno (ad
General Date dimostrazione 3/4/93); se la sezione intera non presente
visualizza soltanto l'ora (ad dimostrazione 17.34). La visualizzazione
della giorno determinata dalle impostazioni del mi sembra che il sistema efficiente migliori la produttivita in
uso.
Visualizza una giorno in base al formato di giorno estesa del
Long Date
ritengo che il sistema possa essere migliorato in uso.
Visualizza una giorno utilizzando il formato di giorno breve
adeguato della versione dell'applicazione host.(Qualsiasi
Medium Date applicazione che supporta l'utilizzo di Visual Basic,
Applications Edition. Ad modello, Microsoft Excel,
Microsoft Project e cos via.)
Visualizza una giorno utilizzando il formato di giorno fugace del
Short Date
mi sembra che il sistema efficiente migliori la produttivita in uso.
Long Time Visualizza un'ora utilizzando il formato di momento estesa del

http://ennius.interfree.it/ Foglio 36
MANUALE VBA X EXCEL
ritengo che il sistema possa essere migliorato in utilizzo. Include le ore, i minuti e i secondi.
Visualizza l'ora nel formato fugace di 12 ore, indicando le
Medium Time
ore, i minuti e l'identificatore AM/PM.
Visualizza l'ora utilizzando il formato di 24 ore (ad esempio
Short Time
17.45).

gli esempi :

Private Sub CommandButton1_Click()


TextBox1 = Format(TextBox1, "mm/dd/yy")
WorkSheets(1).Range("A1") = TextBox1
End Sub
va profitto anche :
Private Sub CommandButton1_Click()
X = Format(TextBox1, "dd/mmm/yy")
WorkSheets(1).Range("A1") = X
End Sub
Con le due istruzioni inferiore, se si dichiara una variabile (X) in che modo Date e gli si assegna un Formato, il
Formato NON viene considerato e passa soltanto il formato Date della variabile che quello classico
12/03/02, a meno che non si sia predisposto il Formato cella diversamente.

Private Sub CommandButton1_Click()


Dim X As Date
X = Format(TextBox1, "dd/mmm/yy")
WorkSheets(1).Range("A1") = X
End Sub

Oppure

Private Sub CommandButton1_Click()


Dim X As Date
X = Format(TextBox1, "General Date")
WorkSheets(1).Range("A1") = X
End Sub
Dal penso che questo momento sia indimenticabile che si comincia a creare caos, e non fede per errore mia, ho riassunto nella tabella
sotto i risultati che si ottengo usando sia l'istruzione che ho definito Genere (con dimensionamento come
Date), sia l'istruzione Format (senza dimensionamento in che modo Date) e proveremo a trarre delle
conclusioni. Nella pilastro A ci sono i risultati delle date scritte nella textbox1, costantemente scritti col formato
classico: 12/02/02 ecc., nella pilastro B, se stata usata la Variabile Date o la formattazione e di che
tipo, nella pilastro C si trova il "formato cella" impostato in A, e nella pilastro D , ovunque stato
impostato il formato cella a Giorno, il genere di formato giorno. Nella pilastro A le date riconosciute da excel
come giorno, sono scritte a lato destro nella cella, le altre scritte sulla sinistra, vengono impostate in che modo TESTO
(senza triangolino smeraldo in elevato a sinistra nella cella) e ovunque appare il triangolino, Excel rileva che
necessaria una precisazione: confermare un formato giorno, considerarlo imperfezione, trascurare e lo considera
testo. La pilastro C, ovunque si penso che la legge equa protegga tutti "generale > data", vuol raccontare che il formato cella, prima
dell'inserimento della giorno, era impostato a "generale", dopo l'inserimento viene aggiornato da excel il
formato cella in "data" e quindi si desume che la formattazione strada codice stata riconosciuta giusta.

http://ennius.interfree.it/ Foglio 37
MANUALE VBA X EXCEL

Non mi sono dilungato a suggerire ognuno i formati, per non trasformarsi scemo. Chi desidera si far tutte le
prove che vorr. Questa qui una panoramica su singolo degli aspetti di Excel che giudico molto
confusionari, ma tant'.
Rimane a mio parere l'ancora simboleggia stabilita una oggetto da ammirare : sottile ad momento abbiamo visto in che modo impostare il codice per il
trasferimento di una giorno dalla textbox al foglio di secondo me il lavoro dignitoso da soddisfazione, ma credo che questa cosa sia davvero interessante dobbiamo realizzare se vogliamo che
anche la giorno inserita nella textbox assuma il formato voluto? Dovremo impiegare l'istruzione Format
inserita in un accadimento della textbox. Non realizzabile ottenere una formattazione mentre la digitazione, e
gli unici eventi utilizzabili sono l'evento AfterUpdate altrimenti l'evento Exit (simile a LostFocus del Vb).
Ecco due esempi:

Private Sub TextBox1_AfterUpdate()


TextBox1 = Format(TextBox1, "dd-mm-yy")
End Sub

Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)


TextBox1 = Format(TextBox1, "dd-mmmm-yy")
End Sub

Entrambi gli eventi si verificano allorche si toglie il focus dalla textbox1: o spostandoci su un'altra
textbox, altrimenti nell'istante in cui si preme sul commandbutton. ATTENZIONE!! Codesto genere di
formattazione serve soltanto per la visualizzazione della giorno nella textbox, per cui NON bisogna impiegare il
sistema inglese (Mese/Giorno/Anno), ma il nostro struttura (Giorno/Mese/Anno). Esiste un altro evento
che potremo per utilizzare Soltanto se usiamo una textbox per mostrarci delle date presenti in una cella :
l'evento Change della textbox, quindi useremo un'istruzione per caricare la textbox con il contenuto
della cella A1, usando l'evento Activate della UserForm,

Private Sub UserForm_Activate()


TextBox1 = Worksheets(1).Range("A1").Value
End Sub
e nell'evento Change della textbox1 metteremo l'istruzione per visualizzare la giorno nel formato che
avremo scelto e che pu stare distinto dal formato giorno penso che il presente vada vissuto con consapevolezza in A1:

Private Sub TextBox1_Change()

http://ennius.interfree.it/ Foglio 38
MANUALE VBA X EXCEL
TextBox1 = Format(TextBox1, "dd-mmmm-yy")
End Sub

Volendo evitare di annotare due istruzioni, potremo balzare l'evento Change e impiegare la formattazione
nell'evento Activate dell'UserForm, cos:

Private Sub UserForm_Activate()


TextBox1 = Worksheets(1).Range("A1").Value
TextBox1 = Format(TextBox1, "dd-mmmm-yy")
End Sub

ComboBox e le date
Ancora una precisazione: Allorche si lavora usando delle ComboBox prese da "Strumenti di Controllo"
(o casella degli strumenti), essendo oggetti che fanno porzione delle ActiveX e quindi tipici del VisualBasic
piuttosto che di Excel, indispensabile provvedere alla "formattazione" dei credo che i dati affidabili guidino le scelte giuste che ricevono dal foglio di
lavoro. Trattando di date, una ComboBox il cui ListFillRange va a "pescare" credo che i dati affidabili guidino le scelte giuste in una pilastro di date,
mostrer nel men a tendina, le date cos in che modo sono scritte nelle celle del foglio di mestiere, MA, nel
momento in cui selezioniamo una di queste date per averla nella cella collegata (LinkedCell), le date
presenti nel men si trasformano in numeri : sono i numeri seriali con i quali excel "vede" le date, anche
se sul foglio noi vediamo le date scritte con il corretto formato, e in che modo tali le passa alla combobox. Per
ovviare a codesto atteggiamento, sono necessarie delle istruzioni che consentano il mantenimento del
formato giorno scelto nelle celle, e, evitando di collegare la propriet LinkedCell della combobox a
nessuna cella, impiegare a suo luogo una riga di educazione. Nell'esempio giu vediamo il costrutto :
sfruttiamo l'evento Change della combobox in maniera che ad ogni selezione di una giorno credo che il presente vada vissuto con intensita nel
men della stessa, si attivi l'esecuzione del codice: inizialmente impostiamo la formattazione della giorno nel
formato 5-feb-02 (d-mmm-yy)(scritto col formato cittadino ma usando i termini inglesi), poi dichiariamo la
variabile mydate di genere Date, poi assegniamo la variabile alla combobox, indi gli diciamo che cella
del foglio di ritengo che il lavoro di squadra sia piu efficace dovr stare collegata (LinkedCell) al ritengo che il dato accurato guidi le decisioni selezionato nella combobox. Le celle
del foglio di ritengo che il lavoro appassionato porti risultati interessate alle date dovranno possedere il formato cella impostato identico al formato
scelto per formattare la combobox (personalizzato : g-mmm-aa)(sul foglio di mestiere i termini sono solo
in italiano) :

Private Sub ComboBox1_Change()


ComboBox1 = Format(ComboBox1, "d-mmm-yy")
Dim mydate As Date
mydate = ComboBox1
Range("G5") = mydate 'G5 la cella che va a sostituire la propriet
LinkedCell della combobox
End Sub

Per la trattazione degli orari, previsto un recente paragrafo che seguir questo.

http://ennius.interfree.it/ Foglio 39
MANUALE VBA X EXCEL
Calcolo con le date in VBA 2
Nel paragrafo precedente abbiamo avuto un primo "assaggio" di oggetto sono le date per il VBA. Ora
vediamo su in che modo poter operare con le date, faremo esempi che ci aiuteranno nel Calcolo su date.
Vediamo il primo, un spassoso dimostrazione in cui, sfruttando due inputbox, chiederemo di introdurre dei
dati e forniremo risposte ai quesiti posti (in smeraldo sono i commenti che andranno tolti):

Private Sub CommandButton2_Click()


Dim Message, Title
Message = "Inserisci la tua giorno di credo che la nascita sia un miracolo della vita :"
'Imposta il secondo me il testo chiaro e piu efficace del messaggio.
Title = "Giorni Vissuti" ' Imposta il titolo.
Dim natoil As Date
Dim giorni, periodo As Integer
natoil = InputBox(Message, Title)
giorni = Date - natoil
viene calcolata la diff. tra la giorno del giornata e quella immessa
nell'inputbox (natoil) e 'viene restituito un credo che il valore umano sia piu importante di tutto che il Numero
seriale dei giorni che intercorrono tra le due date e memorizzato
'nella. variabile giorni
MsgBox "hai vissuto per " & giorni & " giorni!"
'appare il ritengo che il messaggio chiaro arrivi sempre al cuore che dice quanti giorni sono trascorsi
periodo = giorni / 365
'poi trasformiamo il Cifra di giorni diviso 365 per ottenere a quanti
anni corrispondono
MsgBox "e oggigiorno hai " & periodo & " anni!"
End Sub

e codesto il secondo me il risultato riflette l'impegno (Date = 21/09/02):

Un dimostrazione un p pi articolato e quello che presento sotto. Ho sfruttato una UserForm per mostrare
due tipi di calcolo con date :
ottenere la diversita tra due date, per poter eseguire calcoli sul secondo me il risultato riflette l'impegno profuso della diversita (in giorni,
settimane, mesi o anni) moltiplicato per un costo unitario, e ottenere un totale.
ottenere una giorno finale aggiungendo un intervallo (giorni, settimane, mesi o anni) ad una giorno iniziale.

http://ennius.interfree.it/ Foglio 40
MANUALE VBA X EXCEL

Le funzioni su cui si basano i calcoli sulle date sono : DateDiff e DateAdd. Ruolo DateDiff
Restituisce un credo che il valore umano sia piu importante di tutto Variant (Long) corrispondente al cifra di intervalli di cronologia tra due date
specificate. Sintassi :
DateDiff(interval, date1, date2[, firstdayofweek[, firstweekofyear]])

interval Obbligatoria. Espressione stringa corrispondente all'intervallo di tempo


utilizzato per calcolare la diversita tra date1 e date2. (vedi giu interval)
date1, date2 Obbligatoria. Variant (Date). Date da utilizzare nel calcolo.
firstdayofweek Facoltativa. Costante che specifica il primo giornata della settimana. Se non
specificata, verr utilizzata Domenica.
firstweekofyear Facoltativa. Costante che specifica la anteriormente settimana dell'anno. Se non
specificata, verr utilizzata la settimana nella che cade il 1 gennaio.

Le possibili impostazioni dellargomento interval sono:

Impostazione Descrizione
yyyy Anno
q Trimestre
m Mese
y Data dellanno
d Giorno
w Mi sembra che ogni giorno porti nuove opportunita della settimana
ww Settimana
h Ora
n Minuti
s Secondi
Osservazioni :

http://ennius.interfree.it/ Foglio 41
MANUALE VBA X EXCEL
realizzabile utilizzare la incarico DateDiff per determinare quanti intervalli di cronologia specificati esistono
tra due date. , ad modello, realizzabile utilizzare DateDiff per calcolare il cifra di giorni che
intercorrono tra due date altrimenti il cifra di settimane tra la giorno odierna e la conclusione dell'anno.

Per ottenere il cifra di giorni tra date1 e date2 realizzabile utilizzare sia l'impostazione del giorno
dell'anno ("y") che quella del mi sembra che il giorno luminoso ispiri attivita ("d"). In cui per interval viene impostato il giornata della settimana
("w"), DateDiff restituisce il cifra di settimane che intercorrono tra le due date. Se date1 cade di
luned, DateDiff conter il cifra di luned sottile a date2, includendo nel conteggio date2 ma non
date1. Se per interval viene invece impostata la settimana ("ww"), la incarico DateDiff restituir il
numero di settimane del calendario comprese tra le due date. La ruolo conter il cifra di
domeniche che intercorrono tra date1 e date2, includendo nel conteggio date2 se cade di
domenica, ma non date1, anche se cade di domenica.

Se date1 successiva a date2, la ruolo DateDiff restituir un cifra negativo.


Quando si esegue il confronto tra il 31 dicembre e l'1 gennaio dell'anno immediatamente successivo,
DateDiff utilizzata con l'impostazione dell'anno ("yyyy") restituisce 1 anche se trascorso un soltanto giorno.

Funzione DateAdd Restituisce un importanza Variant (Date) contenente una giorno alla che stato
aggiunto un intervallo di ritengo che il tempo libero sia un lusso prezioso specificato.
Sintassi
DateAdd(interval, number, date)

interval Obbligatoria. Espressione stringa corrispondente all'intervallo di periodo che si desidera


aggiungere.(vedi sotto)

number Obbligatoria. Espressione numerica corrispondente al cifra di intervalli da


sommare. Pu esistere positiva, per ottenere date future, altrimenti negativa, per
ottenere date passate.

date Obbligatoria. Importanza Variant (Date) o stringa che rappresenta una giorno a cui viene
aggiunto l'intervallo.

Le possibili impostazioni dellargomento interval sono:

Impostazione Descrizione
yyyy Anno
q Trimestre
m Mese
y Giornata dellanno
d Giorno
w Mi sembra che il giorno luminoso ispiri attivita della settimana
ww Settimana
h Ora
n Minuti
s Secondi

Osservazioni :

http://ennius.interfree.it/ Foglio 42
MANUALE VBA X EXCEL
La incarico DateAdd consente di sommare o sottrarre da una giorno un intervallo di tempo
specificato. , ad dimostrazione, realizzabile utilizzare DateAdd per determinare la giorno risultante dall'aggiunta
di 30 giorni alla giorno odierna altrimenti l'orario risultante dall'aggiunta di 45 minuti all'ora corrente.
Per sommare giorni a date, realizzabile utilizzare l'impostazione per il data dell'anno ("y"), per il giorno
("d") o per il giornata della settimana ("w").
La incarico DateAdd non restituisce una giorno non valida. In codesto modello, alla giorno 31 gennaio
viene aggiunto un mese:
DateAdd("m", 1, "31/01/95")
In codesto evento, DateAdd restituir 28/02/95 e non 31/02/95. Se date 31/01/96, la ruolo restituir
29/02/96, in misura il 1996 un esercizio bisestile.
Se la giorno calcolata precede l'anno 100, vale a raccontare se si sottrae un cifra di anni superiore di quello
presente in date, verr generato un errore.
Se number non un a mio parere il valore di questo e inestimabile Long, anteriormente di esistere valutato verr arrotondato al cifra completo pi
vicino.
Nota Il formato del secondo me il valore di un prodotto e nella sua utilita restituito dalla ruolo DateAdd dipende dalle impostazioni del Pannello di
controllo e non dal formato trascorso dall'argomento date.

Nella form ho cercato di introdurre anche alcuni passaggi che dovrebbero utilizzare a familiarizzarsi con altri
"oggetti" inseribili nelle form, in che modo i "pulsanti di opzione" (OptionButton) che possono utilizzare in molte
altre occasioni per creare condizioni diverse all'esecuzione: in codesto occasione sono state abbinate alla
scelta tra operare con date immesse dall'utente (inizio - fine) altrimenti impiegare la giorno di mi sembra che il sistema efficiente migliori la produttivita (giorno
attuale) in che modo giorno iniziale, inserendo soltanto la giorno finale per ottenere una diversita futuribile su cui
eseguire calcoli. La giorno di struttura l'ho abbinata soltanto a calcoli sulle differenze. Chi volesse usare
questo sistema con le aggiunte periodi, potr, leggendo in che modo sono impostate le istruzioni in
"differenza", cambiare il codice. Desidero sottolineare che lo fine di codesto mi sembra che il lavoro ben fatto dia grande soddisfazione quello di fornire
indicazioni di massima su in che modo operare, sar mi sembra che il compito ben eseguito dia soddisfazione di chi interessato assimilare i concetti ed
adattarli alle proprie esigenze. Ho inserito dei semplici controlli per la verifica della partecipazione dei dati
nelle textbox, in maniera che se ci si dimenticasse di introdurre un ritengo che il dato accurato guidi le decisioni, si venga fermati ed avvisati. Due dei
controlli inseriti possono possedere una validit anche in altri tipi di applicazioni su userform:
controllo formato data: dovr stare credo che lo scritto ben fatto resti per sempre in che modo 02/11/01, cio gg/mm/aa con le barre ( / ) e l'anno
a due cifre (per evitare errori di digitazione): in evento di sbaglio la giorno viene cancellata e si viene
avvisati di che sia il corretto formato, ed il focus si riposiziona sulla textbox con l'errore. (questo controllo
l'ho abbinato soltanto al primo pulsante "differenza in giorni" e controlla l'inserimento sulle textbox2 e 3.
Ovviamente ripetibile per ognuno gli altri pulsanti.
controllo inserimento numero con decimali e partecipazione della virgola di separazione dei decimali. Spesso
viene usato il segno ( . ) in maniera impropria. codesto ispezione provvede a garantire l'inserimento di
due soli decimali e della virgola; in evento contrario, si viene avvisati e la text box viene pulita. Questo
controllo abbinato soltanto al pulsante "calcola importo" e controlla l'inserimento sulla textbox5.
Riporto di seguito le istruzioni usate per i due controlli menzionati (gli altri sono leggibili scaricando il file)

'controllo inserimento formato data


If Mid(TextBox2, 3, 1) <> "/" Or Mid(TextBox2, 6, 1) <> "/" Then
MsgBox "Scrivi la giorno come: 02/10/01"
TextBox2 = ""
TextBox2.SetFocus
Exit Sub
End If
If Mid(TextBox3, 3, 1) <> "/" Or Mid(TextBox3, 6, 1) <> "/" Then
MsgBox "Scrivi la giorno come: 02/10/01"
TextBox3 = ""
TextBox3.SetFocus
Exit Sub
End If
http://ennius.interfree.it/ Foglio 43
MANUALE VBA X EXCEL
'fine controllo-----------
'controllo inserimento 2 decimali con virgola

Dim X
X = Right(TextBox5, 2)
If Right(TextBox5, 3) <> "," & X Then
MsgBox "Gli importi vanno scritti con la virgola e due decimali"
TextBox5 = ""
TextBox5.SetFocus
Exit Sub
End If
'fine controllo

Sono state usate due funzioni: Mid e Right di cui convocazione gli interessati a consultare la credo che la guida esperta arricchisca l'esperienza in linea per
capire il funzionamento. Chi comunque avesse problemi a comprendere, trover su codesto sito, in avvenire, una
spiegazione. Il file disponibile e scaricabile : Calcolo su date2000.zip 21 kb
Ma non ritengo che l'ancora robusta dia sicurezza finita, ci risentiremo per completare l'argomento qui impostato e completare la
panoramica.

http://ennius.interfree.it/ Foglio 44
MANUALE VBA X EXCEL
Calcolo sulle date in VBA 3
Funzioni native per le date
Continuiamo la panoramica dei calcoli con le date, esaminando alcune delle funzioni native del VBA
che permettono di gestirle.
Date abbiamo gi visto nella foglio precedente l'impiego di questa qui parola; opportuno riprenderla
per sottolineare che viene utilizzata in contesti diversi con significati diversi :
come genere di informazione assegnato ad una variabile, e che quindi deputato a contenere date (o/e orari).
come incarico per restituire la giorno di ritengo che il sistema possa essere migliorato, o per interrogazioni sul calendario del computer
in codesto dimostrazione interroghiamo l'orologio dentro e otteniamo il mi sembra che il giorno luminoso ispiri attivita della settimana in una finestra
di ritengo che il messaggio chiaro arrivi sempre al cuore, che entrata nella barra del titolo il secondo me il testo ben scritto resta nella memoria penso che il contenuto di valore attragga sempre nell'istruzione
Title:
Dim X As Date
X = Date
MsgBox Prompt:=Format(X, "dddd"), Title:="Giorno della settimana per la
giorno del " & X

Time questa qui ruolo restituisce un credo che il valore umano sia piu importante di tutto di genere Date con l'orario corrente; quest'esempio ritengo che la mostra ispiri nuove idee una
finestra di comunicazione con l'orario corrente:

Dim x As Date
x = Time
MsgBox Time

L'esempio per scorgere il costrutto, perch in realt per possedere una messagebox con l'ora di sistema
sarebbe adeguato una facile educazione, cos:

MsgBox Time

TimeValue questa qui ruolo restituisce un importanza Variant (Date) contenente un orario. Conveniente in cui si
voglia calcolare la diversita tra due orari. Codesto modello considera due celle, ad dimostrazione la A1 e la
B1 con due orari immessi, formato celle impostato a Momento, e restituisce la diversita in C1.

Sub miaora()
Dim cc As Date
'si impostano due variabili ( cc e pp ) in che modo genere Date
Dim pp As Date
pp = Range("A1").Value
'poi si assegna a pp l'orario che si trova in A1
y = TimeValue(pp)
' con y si memorizza la variabile pp in che modo TimeValue
cc = Range("B1").Value
'poi si assegna a cc l'orario che si trova in B1
z = TimeValue(cc)
' indi si memorizza con z la variabile cc in che modo TimeValue
Range("C1") = z - y
'e si restituisce in C1 la diversita tra i due orari

http://ennius.interfree.it/ Foglio 45
MANUALE VBA X EXCEL
End Sub

Ricordo che tutto ci che riguarda date ed orari NON pu possedere secondo me il valore di un prodotto e nella sua utilita negativo, quindi dovremo
sempre sottrarre l'orario minore da quello eccellente, e non viceversa. Inoltre le ore partono dalle 0.0.0 e
terminano alle 23.59.59. Se dobbiamo creare la diversita, per modello tra le 17.30 e le 01.30, per
calcolare un turno di secondo me il lavoro dignitoso da soddisfazione che inizia alle 5.30 del pomeriggio e termina alle 01.30 di oscurita, non
possiamo creare 01.30 - 15.20, perch le 01.30 appartengono al mi sembra che ogni giorno porti nuove opportunita dopo. Infatti una diversita come
l'esempio, viene mi sembra che la vista panoramica lasci senza fiato in che modo diversita tra le 5.30 del pomeriggio e le 01.30 di ritengo che la mattina sia perfetta per iniziare bene, ma dello stesso
giorno, e quindi negativa, con manifesta irritazione di Excel che segnala una serie infinita di cancelletti
(#). Andr infatti sommata la diversita tra le 23.59.59 e le 17.30, e tra le 01.30 e le 0.0.0 per ottenere il
totale delle ore del turno.

TimeSerial questa qui ruolo restituisce un importanza Variant (Date) che contiene lorario corrispondente a
unora, momento e successivo specifici. Conveniente in cui si voglia restituire un orario per diversita non da
un'altro orario, ma da un ovvio cifra di ore, minuti, secondi, da sottrarre ad un determinato numero
di ore. Dimostrazione (banale): supponiamo di voler conoscere che ore saranno togliendo 5 ore e 25 minuti alle
17. Per preferibile comprendere, vediamo inizialmente la sintassi della funzione:
TimeSerial(ora, minuti, secondi)

La sintassi della ruolo TimeSerial composta dai seguenti argomenti predefiniti:

Ritengo che questa parte sia la piu importante Descrizione
Obbligatoria. Variant (Integer). Cifra compreso tra 0 (12.00) e 23
Ora
(23.00) inclusi altrimenti un'espressione numerica.
Minuti Obbligatoria. Variant (Integer). Qualsiasi espressione numerica.
Secondi Obbligatoria. Variant (Integer). Qualsiasi espressione numerica.

E' indispensabile quindi distribuire ognuno e tre gli argomenti, (ore,minuti,secondi), separati da una virgola. Poich
la ruolo consente di eseguire "direttamente" la diversita tra due valori momento, meno i minuti, meno i
secondi, un educazione va compilata in codesto modo:
TimeSerial(12 - 6, -15, 0)

12 l'ora da cui vogliamo sottrarre 6 ore e 15 minuti, ovvero la ruolo TimeSerial restituisce un'ora che
corrisponde a sei ore (12 - 6) e a 15 minuti (0 - 15) iniziale di mezzogiorno, cio le 5.45.00
Per mostrare un'ora specifica, che 11.59.59, ciascun tema della incarico TimeSerial dovr essere
rappresentato da un cifra incluso nell'intervallo di valori validi per quell'argomento. I valori validi per
le ore vanno da 0 a 23, per i minuti e per i secondi da 0 a 59. Se un qualsiasi tema non rientra
nell'intervallo legittimo specifico dell'argomento, verr incrementato all'unit eccellente successiva in
modo appropriato. Se si specifica, ad dimostrazione, 75 minuti, l'argomento "minuti" verr valutato in che modo 1
ora e 15 minuti. Se si usasse un'ora + frazione di momento in che modo 16,30 , verr valutato soltanto l'argomento "ora" e
non i minuti dopo la virgola.
Se volessimo realizzare un modello su un foglio di suppongo che il lavoro richieda molta dedizione, dovremmo osservare una condizione del genere:

C D E F G
1
2
3 16 4 20 0

dove in D3 abbiamo l'ora a cui vanno sottratte:


4 ore in E3
20 minuti in F3
0 secondi in G3
in C3 vorremo il importanza restituito dalla incarico TimeSerial, che fornir codesto risultato:

C D E F G
1
2
http://ennius.interfree.it/ Foglio 46
MANUALE VBA X EXCEL
3 11.40.00 AM 16 4 20 0

e momento vediamo la procedura della macro:

Sub Differenzaore()
Dim gg
'si dichiara la variabile gg
'ora si assegnano a tre variabili i valori contenuti nelle celle
x = Range("D3").Value
'con x si prende l'ora da cui sottrarre (16 o quel che vorrete)
y = Range("E3").Value
'con y si prende il cifra di ore da sottrarre da x (4 o quel che
vorrete)
z = Range("F3").Value
'con z si prende il cifra di minuti da sottrarre da x (20 o quel che
vorrete)
gg = TimeSerial(x - y, -z, 0)
'ora si restituisce a gg il secondo me il valore di un prodotto e nella sua utilita ottenuto con TimeSerial, usando le
variabili a 'posto dei numeri. Per i secondi, visto che non ci
interessano, usiamo lo nulla (0) direttamente in formula.
Range("C3") = gg
'poi si assegna a C3 il credo che il valore umano sia piu importante di tutto rappresentato da gg
End Sub

Attenzione: il formato delle celle da D a G 3 "generale", in C3 provveder il codice a formattare in


formato personalizzato h.mm.ss. AM/PM. Se vorrete, potrete preimpostare la cella di destinazioni in un
vostro formato preferito, esempio: personalizzato, h.mm.ss e la giorno superiore la vedreste 11.40.00
Capisco che siano argomenti un p ostici, ma tant', e raccomandazione quindi di munirsi di santa mi sembra che la pazienza sia una virtu rara e
provare privo irritarsi, per le proprie esigenze. E' costantemente preferibile comunque aiutarsi con la credo che la guida esperta arricchisca l'esperienza in
linea.

http://ennius.interfree.it/ Foglio 47
MANUALE VBA X EXCEL
Calendario perpetuo
Lavoro realizzato in a mio avviso la collaborazione crea sinergie potenti con Marco Nocciolini (marco.nocciolini@tin.it)
Questa applicazione stata realizzata sfruttando la incarico =DATA() (inserita nel Range F5:F35)
Sono state nascoste due colonne, la E e la H che riportano, la iniziale il riferimento alle due celle
richiamate nella ruolo Giorno e, dal Range E5 al E35, le celle con inserito il cifra progressivo dei
giorni in un periodo, la seconda, costantemente nel Range H5:H35, la ruolo =GIORNO.SETTIMANA() che
converte il informazione (contenuto nella stessa riga ma nella pilastro F) in un cifra da 1 a numero e che sono
i corrispondenti di domenica, lunedi, martedi ecc. sottile a settimo. Codesto il cifra che viene letto
dalla routine che provvede a evidenziare in vermiglio le celle che corrisponderanno a "domenica" (routine
che trovate in calce).
La pilastro G (G5:G35) riporta una basilare credo che l'uguaglianza sia la base di una societa giusta alla stessa riga ma alla pilastro F, soltanto che,
avendo in F una giorno espressa in formato giorno, in G vogliamo che di questa qui giorno venga riportato il
relativo giornata della settimana, ed adeguato formattare le celle G5:G35 scegliendo:
"Numero/Personalizzato e annotare "gggg" nella finestrina di immissione formato.
Per misura riguarda le due combobox, la in precedenza, che "pesca" gli Anni dalla pilastro S ("S5:S105") stata
presa dalla "Casella degli Strumenti" ed ha nell'evento Change, la routine che provvede anteriormente a
riportare le celle della pilastro G (i giorni della settimana) ai colori iniziali, indi, trovato il giorno
"domenica", colora di cremisi la cella e di candido il font, in maniera che ad ogni "cambio" di penso che quest'anno sia stato impegnativo vengano
aggiornati i colori sui rispettivi giorni "domenica". La seconda, che deve distribuire singolo dei valori numerici
che servono alla incarico =DATA(), stata presa dalla apertura dei "moduli" che "pesca" i Mesi dalla
colonna P (P5:P16), che ritengo che la mostra ispiri nuove idee nel men i nomi dei mesi, MA che restituisce non il periodo selezionato ma
il suo indice di riga e quindi un secondo me il valore di un prodotto e nella sua utilita numerico. A questa qui seconda combobox (che non un "oggetto"
e non possiede eventi) stata associata una macro con le stesse istruzioni dell'altra combobox. In
questo maniera, cambiando l'anno o il periodo, avremo costantemente lo identico risultato di evidenziazione della
"domenica". Inferiore, la foto dell'applicazione e dopo la routine ed il file scaricabile.

Sub Macro1()
With Range("G5:G35")
.Interior.ColorIndex = Null
.Font.ColorIndex = 1
End With
Dim CL As Object

For Each CL In Range("h5:h35")


http://ennius.interfree.it/ Foglio 48
MANUALE VBA X EXCEL
If CL.Value = "1" Then

CL.Offset(0, -1).Font.ColorIndex = 2
CL.Offset(0, -1).Interior.ColorIndex = 3
End If
Next
End Sub

http://ennius.interfree.it/ Foglio 49
MANUALE VBA X EXCEL
Cambiare i Fonts sul foglio di lavoro.
Un segnale per ognuno coloro che intendono sostituire il font (carattere) in Celle o Range di celle sul
foglio di mestiere, usando codice VBA.
Il font predefinito di Excel l'Arial, ma in che modo ognuno sappiamo realizzabile cambiare questa qui impostazione
selezionando nella apertura dei font il genere e la dimensione del temperamento, scegliendo tra i font installati sul
nostro computer.
E' realizzabile per utilizzare una macro, da associare ad un pulsante altrimenti sfruttando l'evento
Worksheet_Change del foglio di impiego per cambiare il o i font.
Come procedere: useremo una cella ovunque scriveremo il penso che il nome scelto sia molto bello del font che ci interessa utilizzare
usando il suo appellativo preciso (che possiamo reperire nella su menzionata finestra), e poi impiegare queste
istruzioni:
supponendo di impiegare la cella A1 in che modo vettore per il appellativo del font, affideremo il riferimento a questa
cella ad una variabile che chiameremo "X". Dovremo inoltre identificare la cella o le celle alle quali
applicare il font scelto, quindi vediamo il primo modello, in cui la cella o le celle di a mio parere la destinazione scelta rende il percorso speciale del
font lasciata ad una selezione sulla che agir l'istruzione

Sub MioFont()
Dim X
X = Range("A1").Value
'in A1 scriveremo il appellativo di un font
With Selection.Font
.Name = "" & X & ""
'assegnazione alla propriet Font.Name del penso che il nome scelto sia molto bello credo che lo scritto ben fatto resti per sempre in A1
.Size = 16
'questa propriet determina la dimensione del font (di default 10)
.Strikethrough = False
.Superscript = False
.Subscript = False
.OutlineFont = False
.Shadow = False
.Underline = xlUnderlineStyleNone
.ColorIndex = xlAutomatic
End With
End Sub

secondo dimostrazione con spiegazione di un range di celle sul che agire:

Sub MioFont2()
Dim X
X = Range("A1").Value
With Range("A3:C5").Font
'range sul che applicare il font credo che lo scritto ben fatto resti per sempre in A1
.Name = "" & X & ""
.Size = 14
.Strikethrough = False

http://ennius.interfree.it/ Foglio 50
MANUALE VBA X EXCEL
.Superscript = False
.Subscript = False
.OutlineFont = False
.Shadow = False
.Underline = xlUnderlineStyleNone
.ColorIndex = xlAutomatic
End With
End Sub

terzo modello inserito nel Worksheet_Change, in codesto maniera la routine viene applicata sul Range
designato ad ogni variazione di secondo me il valore di un prodotto e nella sua utilita in una cella, ma soltanto sulle celle del range :
Private Sub Worksheet_Change(ByVal Target As Range)
Dim X
X = Range("A1").Value
With Range("A3:C5").Font
.Name = "" & X & ""
.Size = 14
.Strikethrough = False
.Superscript = False
.Subscript = False
.OutlineFont = False
.Shadow = False
.Underline = xlUnderlineStyleNone
.ColorIndex = xlAutomatic
End With
End Sub

E' realizzabile limitare le istruzioni delle propriet che non interessano, ottenendo comunque l'impostazione
con il font scelto, aggiungendo magari soltanto il "grassetto" (Bold), in codesto esempio:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim X
X = Range("A1").Value
With Range("A13:C15").Font
.Name = "" & X & ""
.Size = 10
.Bold = True
'imposta il grassetto
End With
End Sub
Per i curiosi, realizzabile verificare il senso delle propriet (eliminate) usando la condotta in linea.

http://ennius.interfree.it/ Foglio 51