Variables i constants en VBA

A VBA, com en qualsevol altre llenguatge de programació, les variables i constants s'utilitzen per emmagatzemar qualsevol valor. Com el seu nom indica, les variables poden canviar, mentre que les constants emmagatzemen valors fixos.

Per exemple, una constant Pi emmagatzema el valor 3,14159265... El número "Pi" no canviarà durant l'execució del programa, però encara és més convenient emmagatzemar aquest valor com a constant.

Al mateix temps, podem utilitzar la variable sVAT_Rate per emmagatzemar el tipus d'IVA dels béns comprats. Valor variable sVAT_Rate pot variar segons el producte comprat.

Tipus de dades

Totes les variables i constants són d'un tipus de dades particular. La taula següent enumera els tipus de dades utilitzats a VBA amb una descripció i un rang de valors possibles:

Tipus de dades midaDescripcióGamma de valors
ByteBytes 1Nombres enters positius; s'utilitza sovint per a dades binàriesde 0 255 a
BooleàBytes 2Pot ser vertader o falsCert o fals
SencerBytes 2Nombres enters (sense part fraccionària)de -32 a +768
LlargBytes 4Nombres enters grans (sense part fraccional)от -2 147 483 648 до +2 147 483 647
nomésBytes 4Número de coma flotant de precisió únicade -3.4e38 a +3.4e38
Feu dobleBytes 8Nombre de coma flotant de doble precisióde -1.8e308 a +1.8e308
MonedaBytes 8Número de coma flotant, amb un nombre fix de decimalsот -922 337 203 685 477.5808 до +922 337 203 685 477.5807
DataBytes 8Data i hora: les dades del tipus Data es representen amb un nombre de coma flotant. La part entera d'aquest nombre expressa la data i la part fraccional expressa l'hora.de l'1 de gener de 100 al 31 de desembre de 9999
ObjecteBytes 4Referència d'objecteQualsevol referència d'objecte
Cadenaestà canviantConjunt de caràcters. El tipus String pot ser de longitud fixa o variable. S'utilitza més habitualment amb longitud variableLongitud fixa: fins a uns 65 caràcters. Longitud variable: fins a aproximadament 500 mil milions de caràcters
variantestà canviantPot contenir una data, un flotant o una cadena de caràcters. Aquest tipus s'utilitza en els casos en què no se sap per endavant quin tipus de dades s'introduiran.Número - Doble, cadena - Cadena

Òbviament, utilitzant la taula anterior i escollint el tipus de dades adequat, podeu utilitzar la memòria de manera més econòmica (per exemple, trieu el tipus de dades Sencer en lloc Llarg or només en lloc Feu doble). Tanmateix, quan utilitzeu tipus de dades més compactes, heu de tenir cura que el vostre codi no intenti incloure-hi valors desproporcionadament grans.

Declaració de variables i constants

Nota del traductor: Parlant de variables a VBA, val la pena esmentar un punt més molt important. Si declarem una variable però no li assignem cap valor, s'inicializarà amb un valor per defecte:

• les cadenes de text s'inicialitzen amb cadenes buides;

• nombres — valor 0;

• variables de tipus Booleà - Fals;

• dates – 30 de desembre de 1899.

Abans de poder utilitzar una variable o constant, s'ha de declarar. Per fer-ho, afegiu la següent línia senzilla de codi a la macro:

Dim Имя_Переменной As Тип_Данных

A la línia de codi anterior Nom_variable és el nom de la variable que s'utilitzarà al codi, i Tipus_dada és un dels tipus de dades de la taula que es mostra una mica abans en aquest article. Per exemple:

Dim sVAT_Rate As Single Dim i As Integer

Les constants es declaren de manera similar, però quan es declaren constants, el seu valor s'ha d'indicar immediatament. Per exemple, així:

Const iMaxCount = 5000 Const iMaxScore = 100

No és necessari declarar variables a Excel. Per defecte, totes les variables introduïdes però no declarades a Excel tindran el tipus variant i podrà acceptar valors tant numèrics com de text.

Així, el programador pot utilitzar la nova variable en qualsevol moment (encara que no s'hagi declarat) i Excel la tractarà com una variable de tipus variant. Tanmateix, hi ha diverses raons per les quals no s'ha de fer això:

  1. Ús de memòria i velocitat de càlcul. Si no declareu una variable amb una indicació del tipus de dades, per defecte s'establirà en el tipus variant. Aquest tipus de dades utilitza més memòria que altres tipus de dades. Uns quants bytes addicionals per variable poden no semblar gaire, però a la pràctica, els programes poden tenir milers de variables (especialment quan es treballa amb matrius). Per tant, la memòria addicional utilitzada per variables com variant, en comparació amb variables de tipus Sencer or només, pot sumar una quantitat significativa. A més, operacions amb variables de tipus variant s'executen molt més lentament que amb variables d'altres tipus, respectivament, mil variables addicionals de tipus variant pot alentir significativament els càlculs.
  2. Prevenció d'errors ortogràfics en els noms de variables. Si es declaren totes les variables, es pot utilitzar la instrucció VBA − Opció Explícita (en parlarem més endavant) per tal d'identificar totes les variables no declarades. Això elimina l'aparició d'un error al programa com a resultat d'un nom de variable escrit incorrectament. Per exemple, utilitzant una variable anomenada sVAT_Rate, podeu fer una errada i, assignant un valor a aquesta variable, escriure: “VATRate = 0,175”. S'espera que a partir d'ara, la variable sVAT_Rate hauria de contenir el valor 0,175, però és clar que no. Si el mode de declaració obligatòria de totes les variables utilitzades està habilitat, el compilador VBA indicarà immediatament un error, ja que no trobarà la variable. IVATaxa entre els anunciats.
  3. Ressaltar valors que no coincideixen amb el tipus declarat d'una variable. Si declareu una variable d'un determinat tipus i intenteu assignar-li dades d'un altre tipus, obtindreu un error que, si no es corregeix, pot provocar que el programa es bloquegi. A primera vista, això pot semblar una bona raó per no declarar variables, però de fet, que abans resulta que una de les variables va rebre les dades incorrectes que se suposava que havia de rebre, molt millor! En cas contrari, si el programa continua funcionant, els resultats poden ser incorrectes i inesperats, i serà molt més difícil trobar la causa dels errors. També és possible que la macro s'executi amb "èxit". Com a resultat, l'error passarà desapercebut i el treball continuarà amb dades incorrectes!

En aquest sentit, és convenient detectar un tipus de dades incorrecte i corregir aquests errors en el codi tan aviat com sigui possible. Per aquests motius, es recomana que declareu totes les variables quan escriviu una macro VBA.

Opció Explícita

Operador Opció Explícita fa que es declarin totes les variables que s'utilitzaran al codi VBA i marca totes les variables no declarades com a errors durant la compilació (abans que comenci l'execució del codi). Aplicar aquest operador no és difícil; només cal que escriviu aquesta línia a la part superior del fitxer VBA:

Option Explicit

Si voleu inserir sempre Opció Explícita a la part superior de cada mòdul VBA nou creat, això es pot fer automàticament. Per fer-ho, heu d'activar l'opció Requereix declaració de variables a la configuració de l'editor VBA.

Això es fa així:

  • Al menú de l'Editor de Visual Basic, feu clic a instruments > opcions
  • Al diàleg que apareix, obriu la pestanya Editor
  • Marqueu la casella Requereix declaració de variables i premi OK

Quan està activat, la cadena Opció Explícita s'inserirà automàticament al començament de cada mòdul nou creat.

Àmbit de variables i constants

Cada variable o constant declarada té el seu propi abast limitat, és a dir, una part limitada del programa en què existeix aquesta variable. L'abast depèn d'on es va fer la declaració de la variable o constant. Prenguem, per exemple, la variable sVAT_Rate, que s'utilitza a la funció Cost total. La taula següent analitza dues opcions per a l'abast variable sVAT_Ratedeclarades en dues posicions diferents en el mòdul:

Opció Explicit Dim sVAT_Rate Com a funció única Total_Cost() Com a doble... Funció final
Si la variable sVAT_Rate declarada al principi del mòdul, llavors l'abast d'aquesta variable serà tot el mòdul (és a dir, la variable sVAT_Rate serà reconegut per tots els procediments d'aquest mòdul).

Per tant, si a la funció Cost total variable sVAT_Rate se li assignarà algun valor, aleshores la següent funció executada dins del mateix mòdul utilitzarà la variable sVAT_Rate amb el mateix significat.

Tanmateix, si s'anomena alguna funció situada en un altre mòdul, llavors la variable sVAT_Rate no es coneixerà.

Opció Funció explícita Total_Cost() Com a doble Dim sVAT_Rate Com a funció única... Final
Si la variable sVAT_Rate declarada a l'inici de la funció Cost total, aleshores el seu abast es limitarà només a aquesta funció (és a dir, dins de la funció Cost total, podeu utilitzar la variable sVAT_Rate, però no fora).

Quan s'intenta utilitzar sVAT_Rate en un altre procediment, el compilador VBA informarà d'un error perquè aquesta variable no s'ha declarat fora de la funció Cost total (sempre que s'utilitzi l'operador Opció Explícita).

A l'exemple mostrat anteriorment, la variable es declara a nivell de mòdul amb la paraula clau Dim. Tanmateix, pot ser necessari que les variables declarades es puguin utilitzar en altres mòduls. En aquests casos, per declarar una variable en lloc d'una paraula clau Dim s'ha d'utilitzar la paraula clau Públic.

Per cert, per tal de declarar una variable a nivell de mòdul, en lloc de la paraula clau Dim es pot utilitzar la paraula clau Privat, que indica que aquesta variable només està pensada per utilitzar-la al mòdul actual.

També podeu utilitzar paraules clau per declarar constants. Públic и Privat, però no en lloc de la paraula clau Const, juntament amb ell.

Els exemples següents mostren l'ús de paraules clau Públic и Privat aplicat a variables i constants.

Opció Explicit Public sVAT_Rate As Single Public Const iMax_Count = 5000...    
En aquest exemple, la paraula clau Públic utilitzat per declarar una variable sVAT_Rate i constants iMax_Count. L'abast dels elements declarats d'aquesta manera serà el conjunt del projecte actual.

Això significa que sVAT_Rate и iMax_Count estarà disponible en qualsevol mòdul del projecte.

Opció Privada explícita sVAT_Rate As Single Private Const iMax_Count = 5000...    
En aquest exemple, per declarar una variable sVAT_Rate i constants iMax_Count paraula clau utilitzada Privat. L'abast d'aquests elements és el mòdul actual.

Això significa que sVAT_Rate и iMax_Count estarà disponible en tots els tràmits del mòdul actual, però no estarà disponible per als tràmits d'altres mòduls.

Deixa un comentari