Variables e constantes en VBA

En VBA, como en calquera outra linguaxe de programación, as variables e as constantes úsanse para almacenar calquera valor. Como o nome indica, as variables poden cambiar, mentres que as constantes almacenan valores fixos.

Por exemplo, unha constante Pi almacena o valor 3,14159265... O número "Pi" non cambiará durante a execución do programa, pero aínda é máis conveniente almacenar tal valor como unha constante.

Ao mesmo tempo, podemos usar a variable sVAT_Rate para almacenar o tipo de IVE dos bens comprados. Valor variable sVAT_Rate pode variar dependendo do produto adquirido.

Tipos de datos

Todas as variables e constantes son dun tipo de datos particular. A seguinte táboa enumera os tipos de datos utilizados en VBA cunha descrición e un rango de valores posibles:

Tipo de datos tamañodescriciónRango de valores
ByteBytes 1Enteiros positivos; frecuentemente usado para datos binariosde 0 a 255
BooleanoBytes 2Pode ser verdadeiro ou falsoVerdadeiro ou falso
IntegerBytes 2Números enteiros (sen parte fraccionaria)de -32 a +768
LongoBytes 4Números enteiros grandes (sen parte fraccional)от -2 147 483 648 до +2 147 483 647
únicoBytes 4Número de coma flotante de precisión únicade -3.4e38 a +3.4e38
Dúas vecesBytes 8Número de coma flotante de dobre precisiónde -1.8e308 a +1.8e308
MoedaBytes 8Número de coma flotante, cun número fixo de cifras decimaisот -922 337 203 685 477.5808 до +922 337 203 685 477.5807
dataBytes 8Data e hora: os datos do tipo Data represéntanse cun número de coma flotante. A parte enteira deste número expresa a data e a fraccionaria a hora.dende o 1 de xaneiro de 100 ata o 31 de decembro de 9999
obxectoBytes 4Referencia de obxectoCalquera referencia de obxecto
Cordaestá cambiandoConxunto de personaxes. O tipo String pode ser de lonxitude fixa ou variable. Úsase máis habitualmente con lonxitude variableLonxitude fixa: ata aproximadamente 65 caracteres. Lonxitude variable: ata aproximadamente 500 mil millóns de caracteres
varianteestá cambiandoPode conter unha data, un flotante ou unha cadea de caracteres. Este tipo utilízase nos casos nos que non se sabe de antemán que tipo de datos se introducirán.Número - Dobre, cadea - Cadena

Obviamente, usando a táboa anterior e escollendo o tipo de datos correcto, pode usar a memoria de forma máis económica (por exemplo, escolla o tipo de datos Integer no canto Longo or único no canto Dúas veces). Non obstante, ao usar tipos de datos máis compactos, debes ter coidado de que o teu código non intente encaixar neles valores desproporcionadamente grandes.

Declaración de variables e constantes

Nota do tradutor: Falando de variables en VBA, paga a pena mencionar un punto máis moi importante. Se declaramos unha variable pero non lle asignamos ningún valor, entón inicialízase cun valor predeterminado:

• as cadeas de texto inícianse con cadeas baleiras;

• números — valor 0;

• variables de tipo Booleano - Falso;

• datas – 30 de decembro de 1899.

Antes de poder utilizar unha variable ou constante, debe ser declarada. Para iso, engade a seguinte liña sinxela de código á macro:

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

Na liña de código anterior Nome_variable é o nome da variable que se utilizará no código, e Tipo_datos é un dos tipos de datos da táboa que aparece un pouco antes neste artigo. Por exemplo:

Dim sVAT_Rate As Single Dim i As Integer

As constantes decláranse de xeito similar, pero ao declarar constantes, o seu valor debe ser indicado inmediatamente. Por exemplo, así:

Const iMaxCount = 5000 Const iMaxScore = 100

Non é necesario declarar variables en Excel. Por defecto, todas as variables introducidas pero non declaradas en Excel terán o tipo variante e poderá aceptar valor tanto numérico como de texto.

Así, o programador pode usar a nova variable en calquera momento (aínda que non fose declarada), e Excel trataraa como unha variable de tipo variante. Non obstante, hai varias razóns polas que non se debe facer isto:

  1. Uso da memoria e velocidade de cálculo. Se non declara unha variable cunha indicación do tipo de datos, por defecto establecerase o tipo variante. Este tipo de datos usa máis memoria que outros tipos de datos. Uns poucos bytes adicionais por variable poden non parecer moito, pero na práctica, os programas poden ter miles de variables (especialmente cando se traballa con matrices). Polo tanto, a memoria extra utilizada por variables como variante, en comparación con variables de tipo Integer or único, pode sumar unha cantidade significativa. Ademais, operacións con variables de tipo variante execútanse moito máis lentamente que con variables doutros tipos, respectivamente, mil variables extra de tipo variante pode ralentizar significativamente os cálculos.
  2. Prevención de erros tipográficos nos nomes de variables. Se se declaran todas as variables, pódese usar a instrución VBA − Opción Explícita (falaremos máis adiante) para identificar todas as variables non declaradas. Isto elimina a aparición dun erro no programa como resultado dun nome de variable escrito incorrectamente. Por exemplo, usando unha variable denominada sVAT_Rate, podes cometer un erro e, asignando un valor a esta variable, escribe: “VATRate = 0,175”. Espérase que a partir de agora, a variable sVAT_Rate debería conter o valor 0,175, pero por suposto que non. Se se activa o modo de declaración obrigatoria de todas as variables usadas, o compilador VBA indicará inmediatamente un erro, xa que non atopará a variable Taxa IVA entre os anunciados.
  3. Resaltar valores que non coinciden co tipo declarado dunha variable. Se declara unha variable dun determinado tipo e tenta asignarlle datos dun tipo diferente, obterá un erro que, se non se corrixe, pode provocar que o programa falle. A primeira vista, isto pode parecer unha boa razón para non declarar variables, pero de feito, que antes, resulta que unha das variables recibiu os datos incorrectos que se supón que debía recibir, moito mellor! En caso contrario, se o programa segue a executarse, os resultados poden ser incorrectos e inesperados, e será moito máis difícil atopar a causa dos erros. Tamén é posible que a macro se execute "con éxito". Como resultado, o erro pasará desapercibido e o traballo continuará con datos incorrectos.

Neste sentido, é desexable detectar un tipo de datos incorrecto e corrixir tales erros no código o antes posible. Por estes motivos, recoméndase que declare todas as variables ao escribir unha macro VBA.

Opción Explícita

Operador Opción Explícita fai que se declaren todas as variables que se usarán no código VBA e marca todas as variables non declaradas como erros durante a compilación (antes de que se inicie a execución do código). Aplicar este operador non é difícil; só tes que escribir esta liña na parte superior do ficheiro VBA:

Option Explicit

Se queres inserir sempre Opción Explícita na parte superior de cada novo módulo VBA creado, isto pódese facer automaticamente. Para iso, cómpre activar a opción Require declaración de variable na configuración do editor de VBA.

Isto faise así:

  • No menú Editor de Visual Basic, fai clic ferramentas > Opcións
  • No diálogo que aparece, abra a pestana Editor
  • Marca a caixa Require declaración de variable e prensa OK

Cando está activado, a cadea Opción Explícita inserirase automaticamente ao comezo de cada novo módulo creado.

Ámbito de variables e constantes

Cada variable ou constante declarada ten o seu propio alcance limitado, é dicir, unha parte limitada do programa no que existe esta variable. O alcance depende de onde se fixo a declaración da variable ou constante. Tomemos, por exemplo, a variable sVAT_Rate, que se usa na función Custo_total. A seguinte táboa analiza dúas opcións para o alcance variable sVAT_Ratedeclarado en dúas posicións diferentes no módulo:

Opción Explícito Dim sVAT_Rate como función única Custo_total() como dobre... Función final
Se a variable sVAT_Rate declarado ao principio do módulo, entón o alcance desta variable será todo o módulo (é dicir, a variable sVAT_Rate serán recoñecidos por todos os procedementos deste módulo).

Polo tanto, se na función Custo_total variable sVAT_Rate asignarase algún valor, entón a seguinte función executada dentro do mesmo módulo usará a variable sVAT_Rate co mesmo significado.

Non obstante, se se chama a algunha función situada noutro módulo, entón para ela a variable sVAT_Rate non se coñecerá.

Opción Función explícita Custo_total() Como dobre Dim sVAT_Rate Como único ... Función final
Se a variable sVAT_Rate declarado ao comezo da función Custo_total, entón o seu alcance limitarase só a esta función (é dicir, dentro da función Custo_total, pode usar a variable sVAT_Rate, pero non fóra).

Cando se intenta usar sVAT_Rate noutro procedemento, o compilador VBA informará dun erro porque esta variable non foi declarada fóra da función Custo_total (sempre que se utilice o operador Opción Explícita).

No exemplo mostrado anteriormente, a variable declárase a nivel de módulo coa palabra clave Dim. Non obstante, pode ser necesario que as variables declaradas se poidan utilizar noutros módulos. Nestes casos, para declarar unha variable en lugar dunha palabra clave Dim debe utilizarse a palabra clave público.

Por certo, para declarar unha variable a nivel de módulo, en lugar da palabra clave Dim pódese usar a palabra clave Privado, o que indica que esta variable está pensada para usar só no módulo actual.

Tamén pode usar palabras clave para declarar constantes. público и Privado, pero non en lugar da palabra clave Const, xunto con el.

Os seguintes exemplos mostran o uso de palabras clave público и Privado aplicado a variables e constantes.

Opción Explicit Public sVAT_Rate As Single Public Const iMax_Count = 5000...    
Neste exemplo, a palabra clave público usado para declarar unha variable sVAT_Rate e constantes iMax_Count. O ámbito de elementos declarados deste xeito será a totalidade do proxecto actual.

Isto significa que sVAT_Rate и iMax_Count estará dispoñible en calquera módulo do proxecto.

Opción Privada explícita sVAT_Rate As Single Private Const iMax_Count = 5000...    
Neste exemplo, para declarar unha variable sVAT_Rate e constantes iMax_Count palabra clave utilizada Privado. O alcance destes elementos é o módulo actual.

Isto significa que sVAT_Rate и iMax_Count estará dispoñible en todos os procedementos do módulo actual, pero non estará dispoñible para os procedementos doutros módulos.

Deixe unha resposta