2011-10-02 11 views
13

Tenga en cuenta las declaracionesVBA valores por defecto la variable/array

Dim x As Double 
Dim avg(1 To 10) As Double 

¿Cuáles son los valores por defecto en x y avg?

A través de las pruebas, quiero decir que x se inicializa a cero. Del mismo modo, quiero decir que todos los elementos en avg se inicializaron a cero.

Sin embargo, ¿puedo escribir el código que depende de esto? ¿O los valores de inicialización predeterminados son realmente indeterminados?

Respuesta

14

Si especifica un tipo de datos pero no especifica un inicializador, Visual Basic inicializa la variable al valor predeterminado para su tipo de datos, que para todos los tipos numéricos es 0 (cero).

Cuando ejecuta una macro, todas las variables se inicializan en un valor. Una variable numérica se inicializa a cero, una cadena de longitud variable es inicializada en una cadena de longitud cero (""), y una cadena de longitud fija es rellenada con el código ASCII 0. Las variables de variantes se inicializan en Vacío. Una variable vacía se representa con un cero en un contexto numérico y una cadena de longitud cero ("") en un contexto de cadena.

Ref.

+0

Bastante seguro de que esto es correcto. Sin embargo, tenga en cuenta que si utiliza matrices dinámicas, ningún elemento se inicializa y hace referencia a arr (0) antes de establecer explícitamente que devuelve un error. – dmogle

+1

Aparte, estoy bastante seguro (al buscar SO) de que no es posible especificar un inicializador en la declaración en Excel VBA, ya que eso es algo de .NET. ¡Gracias por la Ref.! Eso disipa totalmente cualquier duda de que 'x 'tiene cero. ¿Aunque es cierto que cada elemento de una matriz fija también se inicializa a cero? De hecho, ya había descubierto que las matrices dinámicas no se inicializan (solo se asignan) en la declaración, y solo quería asegurarme de que la declaración de arreglos fijos no se comportara de la misma manera. –

+0

@Prashant, ¿por qué no agregar un reloj a la variable y probarlo usted mismo? – Reafidy

1

Sí, debería poder depender de que los tipos de número se inicialicen a 0 en VBA, ya que ese es su valor predeterminado.

Sin embargo, si te preocupa, y los valores iniciales son tan importantes, entonces mi recomendación es que simplemente les asignes explícitamente el valor 0 (aunque en realidad no es necesario).

4

Usted puede escribir código que depende implícitamente en el valor predeterminado de un tipo de datos determinado, pero eso no quiere decir que siempre debe , ya que no es tan obvio lo que está haciendo, lo que puede confundir la siguiente persona que lea tu código (y esa persona podría ser tu dentro de un año).

No se puede equivocar al asignar explícitamente un valor inicial a sus variables. Si lo desea, puede hacer eso en la misma línea que la declaración:

Dim x As Double: x = 0 

Por supuesto, es un poco más complicado para las matrices, pero por lo general hay un lugar conveniente para inicializar ellos más adelante en su código, en donde los estás atravesando de todos modos.

Cuestiones relacionadas