Cómo actualizar datos autmaticamente en un objeto creado desde código.

Tengo una consulta respecto a los objetos que ya me había enseñado a crear mediante código, dentro de los objetos que se creaban había un campo para cantidad y para descuento, quiero que al cambiar esos datos en el textbox me actualize el último objeto creado que es un label de subtotal. O sea el label debe coger el valor de cantidad y descuento para recalcular el subtotal.

Respuesta
2

No entiendo que vas a hacer con la cantidad y el descuento, pero un label recibe cualquier valor como cualquier textbox, por ejemplo

label1 = val(textbox1) * val(textbox2)

Lo anterior lo puedes poner en un botón o en alguno de los eventos del textbox.

Lo que pasa es que esos textbox son de los que habíamos creado desde código, y necesito saber cuando se realiza un cambio en uno de esos textbox para actualizar el label, pero recuerda que no es tan fácil como crear un Private sub textbox#_change()

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

  1. Abre tu hoja de excel
  2. Para abrir Vba-macros y poder pegar la macro, Presiona Alt + F11
  3. En el menú elige Insertar / Módulo de clase
  4. 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

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas