Como te había comentado, el problema no era crear los controles, el verdadero problema era saber en dónde tenías la información.
Entiendo que el textbox1 no existe, por eso no puedes crear el evento textbox1_change.
Hay que crear una Clase, y vamos a almacenar en una colección cada uno de los textbox que vayas creado.
Así quedaría el código :
Dim colTbxs As Collection 'Collection Of Custom Textboxes
Dim con
Dim alto
'
Private Sub CommandButton2_Click()
'Por.Dante Amor
izq = Label1.Left - 7.5
Set txtB1 = Me.Frame1.Controls.Add("Forms.TextBox.1")
With txtB1
.Name = "TextBox" & con
.Height = 18
.Width = 48
.Left = izq
.Top = alto
End With
alto = alto + 28
Me.Controls("TextBox" & con).SetFocus
'
Set clsObject = New Clase1
'Set The New Instance To Handle The Events Of Our Textbox
Set clsObject.tbxCustom1 = Me.Controls("TextBox" & con)
'Add The Event Handler To Our Collection
colTbxs.Add clsObject
'
con = con + 1
End Sub
'
Private Sub UserForm_Activate()
'Por.Dante Amor
con = 1
alto = Label1.Top + Label1.Height + 10
'Create New Collection To Store Custom Textboxes
Set colTbxs = New Collection
End Sub
'
Private Sub UserForm_Terminate()
'Destroy The Collection To Free Memory
Set colTbxs = Nothing
End Sub
Crea una nueva clase "Clase1" y pon este código:
Public WithEvents tbxCustom1 As MSForms.TextBox 'Custom Textbox
'Referencia
'http://www.ozgrid.com/forum/showthread.php?t=80631
Private Sub tbxCustom1_Change()
'Message Box To Display Which Textbox Was Changed
MsgBox "Modificaste el textbox: " & tbxCustom1.Name
'This is just to show you can handle múltiple events of the textbox
End Sub
Private Sub Class_Terminate()
'Destroy The Class Object And Free Up Memory
Set tbxCustom1 = Nothing
End Sub
Instrucciones para crear una clase
- Abre tu hoja de excel
- Para abrir Vba-macros y poder pegar la macro, Presiona Alt + F11
- En el menú elige Insertar / Módulo de clase
- En el panel del lado derecho copia la macro
Te anexo mi archivo para que veas el funcionamiento.
https://www.dropbox.com/s/v9xfi79adzv41jt/clase%20crear%20textbox%20en%20frame.xlsm?dl=0
Saludos. Dante Amor
Recuerda valorar la respuesta