2011-09-28 18 views
5

Escribí macro en Excel que usa una matriz dinámica. Los usuarios agregarán elementos a esa matriz.¿Es posible almacenar elementos de matriz de forma permanente en VBA en Excel?

¿Es posible almacenar elementos de forma permanente, por lo que los elementos estarán disponibles incluso después de cerrar el libro de trabajo?

El truco es que no quiero almacenar elementos en una hoja de trabajo e insertarlos de nuevo en la matriz cuando el libro está abierto, pero para tener elementos guardados de forma permanente en la matriz.

+0

Lo que está mal con el almacenamiento en una hoja? – Reafidy

+0

Vea también: http://stackoverflow.com/questions/7350388/saving-vba-dictionary-object-in-excel/7350849#7350849 Hay algunas notas. – Fionnuala

+2

Recuerde aceptar respuestas que funcionen. Hay un icono de flecha en la esquina superior izquierda de las respuestas; puede seleccionarlo para aceptar la respuesta. – aevanko

Respuesta

5

Una de sus mejores apuestas es almacenar los valores de matriz en una hoja de cálculo y marcar la hoja de trabajo como oculta utilizando VBA.

Me.Worksheets("ArrayValuesWorksheet").Visible = False 

Si utiliza otras cosas como archivos CSV locales, registro, etc, entonces el código se comportará de manera diferente simplemente moviendo el libro de trabajo para diferentes máquinas y perderá la capacidad de tener múltiples copias de la matriz.

Editar (excelente sugerencia de @ comentarios de Reafidy abajo)

+14

Use 'Sheets (" ArrayValuesWorksheet "). Visible = xlVeryHidden' para evitar que la hoja aparezca en la lista de piezas sueltas. – Reafidy

+1

También puede proteger con contraseña su código y las hojas "Muy ocultas" yendo a Herramientas/Propiedades del proyecto VBA/Pestaña Protección e ingresando una contraseña. El usuario no podrá mostrar hojas "Muy ocultas". PD LOL en el término de Microsoft "Muy escondido". Quiero decir, lo entiendo porque estuve allí ... es divertido ver un Enum con ese nombre. – ray

+0

Gracias por las sugerencias chicos, pero no quiero almacenar datos en las hojas de trabajo ocultas, ya que quiero distribuir macro como una especie de extensión, complemento (aún no lo sé), así que funcionará en cualquier libro de trabajo cada vez que se abre el excel Creo que no será posible compartir macro de esta manera si hay una hoja de trabajo oculta adjunta. Por cierto, ¿puedes aconsejar cuál es la mejor forma de distribuir macro? – user652061

0

Para leer Array/escritura en la hoja se puede utilizar

Sub WriteArray() 
Dim MyArray As Variant 

MyArray = Array("x", "y", "z") 

Range("A1:C1").Value = MyArray 

End Sub 

Sub ReadArray() 

Dim MyArray As Variant 

MyArray = Range("A1:C1").Value 

End Sub 

Después se puede utilizar la propiedad Visible de la hoja de ocultar a medida que han respondido

2

También puede almacenar una matriz con un nombre de la colección de nombres, y este nombre puede estar oculto.

Names.Add Name:="StoredArray", RefersTo:=myArray, Visible:=False 
+1

Eso lo almacenará como una cadena, no como una matriz. – Reafidy

+0

Gracias Ronie y Reafidy. No es un problema si almacena los datos como una cadena ya que sospecho que puedo leer la cadena de regreso a la matriz. Lo que es interesante para mí es que cuando comparto esta macro como algún tipo de complemento (extensión), ¿será posible guardar los datos en la colección de nombres? – user652061

+0

Esta es la respuesta, no es difícil volver a leerla desde la constante nombrada en una matriz al inicializar. –

1

Para responder a su pregunta directamente: No, no hay manera de almacenar una matriz que tiene una vida útil más allá de la aplicación en la memoria - que tendrá que guardar en algún lugar.

Hay varias opciones disponibles, pero lo mejor es guardarla en una hoja. Las hojas 'Muy ocultas' solo son visibles a través del código VBA, por lo que para el usuario es lo mismo que la matriz siempre presente y activa en la memoria.

0

"no hay forma ...", >>> sí puede hacer!

algunos ejemplos: cuadro de lista/ComboListBox (en una hoja) = array ...

Para la variante matriz 2D: rango() = matriz.

o almacenarlo en un (multidimensional aquellos se pueden hacer) commandbarMenu

o whateverthat mantiene después de cargar de libro ...

Cuestiones relacionadas