Hola:
Quiero hacer una macro que cree un formulario que contenga diferentes controles dependiendo de un numero determinado (i).
He estado buscando por la red y he encontrado este codigo:
Dim mynewform As Object
Dim mycheckbox As Object
Set mynewform = _
Application.VBE.ActiveVBProject.VBComponents.Add(vbext_ct_MSForm)
' Add a checkbox to the new UserForm.
Set mycheckbox = mynewform.Designer.Controls.Add("Forms.CheckBox.1")
' With the new checkbox...
With mycheckbox
.Name = "Check1"
.Caption = "Check here"
.Left = 10
.Top = 10
.Height = 20
.Width = 60
End With
Bien, pues no encuentro la forma de crear un for i = 1 to i para que me introduzca tantos checkbox como i tenga.
Alguien me podría ayudar?
Un saludo
Un par de cosas o tres:
lo primero es que para que esto funcione hay que añadir una referencia a Microsoft visual basic for applications extensibility
lo segundo:
como el bucle va a crear varios controles, no pueden estar todos en el mismo sitio, así que por ejemplo altera su posición en vertical
tampoco se pueden llamar igual, así que altera su nombre.
a ver qué tal así:
Dim mynewform As Object
Dim mycheckbox As Object
Dim i
Set mynewform = Application.VBE.ActiveVBProject.VBComponents.Add(vbext_ct_MSForm)
' Add a checkbox to the new UserForm.
For i = 1 To 10 ' diez o los que sean
Set mycheckbox = mynewform.Designer.Controls.Add("Forms.CheckBox.1")
' With the new checkbox...
With mycheckbox
.Name = "Check" & i 'no puede haber varios con el mismo nombre
.Caption = "Check here"
.Left = 10
.Top = 10 * i 'para separarlo en vertical
.Height = 20
.Width = 60
End With
Next
------
Ya sé Excel, pero necesito más
------
Ya sé Excel, pero necesito más.
Muchisimas gracias, pero ahora me ha aparecido otro problema mas.
Estoy haciendo este tipo de macros en casa con la version 2010 y en el trabajo tengo 2007. Pues cuando he intentado habrirlo en el trabajo, me dice que no encuentra la libreria DLL.
¿como puedo actualizar las referencias en VBA? o ¿como puedo resolver este problema?
Un saludo
No es por la versión de Excel, sino porque la dll esté instalada en el equipo o no.
si cambia la versión de la biblioteca lo interpreta como referencias diferentes (porque son diferentes)
Comprueba en el equipo del trabajo qué versión tienes instalada y añade una referencia a ella.
Búscala en la lista de referencias disponibles.
en mi equipo está en C:\Program Files\Common Files\Microsoft Shared\VBA\VBA6\VBE6EXT.OLB (esto es de la 2007)
porque para la 2010 tengo otra carpeta parecida C:\Program Files\Common Files\microsoft shared\VBA\VBA7 con la nueva versión de vba.
------
Ya sé Excel, pero necesito más
------
Ya sé Excel, pero necesito más.
El problema que tengo, es que nisiquiera me deja abrir el proyecto VBA, puedo ver los objetos pero no el codigo, y cuando voy a cambiar las referencias las puedo ver pero no puedo tocarlas tampoco.
no se me ocurre qué puede ser.
haz una prueba guardando como .xls (97-2003) a ver si puedes editarlo.
entiendo que sólo te pasa con este libro ¿no? que hasta ahora habías podido editar las macros y las referencias sin problemas.
si tienes otro libro con macros abierto a la vez ¿puedes editarlo?
------
Ya sé Excel, pero necesito más
------
Ya sé Excel, pero necesito más.
Si lo guardo como .xls luego no puedo abrir el libro, se me queda bloqueado
Solo me pasa con este libro y creo que fue porque añadí una referencia desde excel 2010.
De todas formas, la solución ha sido facil. Abro el libro con excel 2010 y copio el codigo en otro libro abierto con excel 2007, y ya funciona.
A veces hay tantas cosas ocultas en excel y que no podemos tocar, que hay que recurrir a estos metodos tan rudimentarios, jeje.
Cómo agreago una macro a ese control creado dinamicamente?