Muchos Combobox en una hoja y utilizan el evento Change y quiero saber si esos cambios se pueden hacer con una sola macro

Tengo una hoja con varios combobox y cada uno tiene un evento con el Change:

Private Sub ComboBox4_Change()
Range("W19").Value = Me.ComboBox4.Text
End Sub
Private Sub ComboBox5_Change()
Range("W20").Value = Me.ComboBox5.Text
End Sub
Private Sub ComboBox6_Change()
Range("W21").Value = Me.ComboBox6.Text
End Sub
Private Sub ComboBox7_Change()
Range("W22").Value = Me.ComboBox7.Text
End Sub
Private Sub ComboBox8_Change()
Range("W23").Value = Me.ComboBox8.Text
End Sub
Private Sub ComboBox9_Change()
Range("W24").Value = Me.ComboBox9.Text
End Sub
Private Sub ComboBox10_Change()
Range("W25").Value = Me.ComboBox10.Text
End Sub

¿Hay manera de que todo esto se haga en una sola macro?

1 Respuesta

Respuesta
1

Visita:

Cursos de Excel y Macros

----- --

En la relación de combo y celda al número de combo más 15 nos dice el número de fila de la celda, por ejemplo, para el combobox4 la celda es W19, es decir, 4 + 15 = 19.

----- --

Para poner todos los combos en una sola macro hay que crear una clase.

Entra al menú VBA en Insertar, Módulo de Clase, debe crearte la clase "Clase1", si te aparece otro nombre entonces lo cambias a "Clase1":

En la Clase1 agrega el siguiente código, tal y como se muestra en la imagen anterior.

Option Explicit
Public WithEvents combo As MSForms.ComboBox
Private Sub combo_Change()
  Dim n As Long
  n = Mid(combo.Name, 9)    'número de combo
  Range("W" & n + 15).Value = combo.Text  'al número de combo le suma 15 para obtener la celda
End Sub

Esta clase se va a utilizar para contener los eventos de todos los combos.

----- --

Pon la siguiente macro en un módulo o en el evento Open de ThisWorkbook, para que cuando abras el archivo, la macro se ejecute y los combos sean cargados en la clase:

Option Explicit
Dim colCombos As Collection
Private Sub Workbook_Open()
  Dim ctl As OLEObject, clsObject As Clase1
  Set colCombos = New Collection
  For Each ctl In Sheets("hoja combos").OLEObjects
    If TypeOf ctl.Object Is MSForms.ComboBox Then
      Set clsObject = New Clase1
      Set clsObject.combo = ctl.Object
      colCombos.Add clsObject
    End If
  Next ctl
End Sub

Nota:

Cambia en el código "hoja combos" por el nombre de tu hoja donde tienes los combobox.

Después de pegar el código en el evento Open, ejecuta la macro, en este ejemplo, ejecuta el evento Open, no es necesario cerrar el libro y abrirlo, estando en el evento Open, solamente presiona F5 para ejecutar el código, de esa manera todos los combos se cargarán en la Clase1.

----- --

Listo, después de ejecutar la macro regresa a tu hoja, modifica alguno de los combos y en automático se modificará la celda.

----- --

Curso de macros. Declarar variables en vba excel. - YouTube

----- --

Sal u dos Dante Amor

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas