Variables publicas vs Propiedades personalizadas

francolaca
13 de Junio del 2008
Saludos a todos estoy trabajando con VBA para excel y hace semanas que tengo un problema que me esta volando la cabeza. Espero que alguien pueda ayudarme pk ya no se que hacer.

La idea es escrivir un codigo que me genere programaticamente controles (opttion y command butons, image controls, etc). Una vez generados los controles ese codigo me tiene que generar programáticamente el codigo correspondiente a los controles. Como "complicacion" adicional todo (absolutamente todo) el codigo debe estar escrito en el módulo de objeto ThisWorkbook.

Les comento que avance bastante hasta que me tope con un problema que no puedo solucionar.

Lo primero que hice es utilizar el evento Workbook_Open() para iniciar todo. El evento Workbook_Open llama a otros procedimientos sub (tambien escritos en ThisWorkbook) que van generando los controles e introduciendolos en una hoja del libro (que por cierto, tambien se crea programaticamente desde el evento Workbook_Open).

Luego se carga la referencia "Microsoft Visual Basic for Applications Extensibility 5.3". Esta _
biblioteca de objetos permite generar programaticamente los eventos de los controles. Ahora puedo utilizar metodos (pertenecientes a la biblioteca anterior) para generar programaticamente los eventos de los controles creados previamente (si los controles se ubicaron en HojaX los eventos se deben ubicar tambien en HojaX).

Esta aqui todo bien. Escriviendo codigo sólo en ThisWorkbook y utilizando el evento Workbook_Open pude lograr, o al menos eso pense, lo que queria.

El problema me surgio cuando quice poner a preba los eventos. Cuando le daba click a algun control me salia el siguiente error:

Error de compilacion: no se ha definido sub o function

Despues de probar mucho me di cuenta que era porque en ThisWorkbook defini variables publicas que no eran reconocidas por los eventos. Por ejemplo, en thisworkbook declaro la variable de objeto miRango:

Public miRango as Range

set miRango = Activesheet.Range("A1:C2")

Tengo un command button que al hacer click en el me debe cambiar el contenido del rango anterior. El evento del comman button que se ingreso programaticamente (desde thisworkbook) es algo así:

private sub Commandbutton1_Click()

Activesheet.ThisWorkbook.miRango.Value = "Ronda de Apuestas"

end sub

La variable publica miRango no es detectada por el evento del control!!!!

Porque pasa esto????? es porque cuando se termina de ejecutar ThisWorkbook_Open todas las variables publicas desaparecen?????

Se pueden utilizar variables publicas definidas en thisWorkbook en los eventos de los controles???? como se puede hacer????

si no se puede, de que otra manera puedo hacerlo???? propiedades personalizadas???? AYUDA POR FAVOR