Vincular 2 combos en excel sin que se actualice la pantalla

Estoy haciendo un formulario con un par de combobox dependientes uno del otro, hasta el momento me ejecuta la macro de maravilla pero al momento de lanzar el formulario y activar el combobox, en automático me activa la página en donde están los datos relacionados pero quisiera evitar que la página se mostrara ya que no quiero que los usuarios del archivo pudieran hacer ningún cambio. Intento con Application.Updating= False pero no me lo permite, ¿Alguna idea de como hacerlo?

2 respuestas

Respuesta
1

Escribe el código que estás utilizando porque el Updating = False debería funcionar...

Private Sub UserForm_Activate()

Application.updating = False

cbo_empresa.Clear

Sheets("Nominas").Select
Range("A1").Select
Do While ActiveCell.Value <> ""
cbo_empresa.AddItem ActiveCell
ActiveCell.Offset(0, 1).Select
Loop

Application.updating = True
End Sub

Me muestra el sig error:

Mil gracias por tu respuesta!

La instrucción correcta es ScreenUpdating, por lo que tu código debería quedar

Private Sub UserForm_Activate()
Application.ScreenUpdating = False
cbo_empresa.Clear
Sheets("Nominas").Select
Range("A1").Select
Do While ActiveCell.Value <> ""
cbo_empresa.AddItem ActiveCell
ActiveCell.Offset(0, 1).Select
Loop
Application.ScreenUpdating = True
End Sub
Respuesta
1

Te anexo otras formas de cargar los datos en el combobox, sin tener que activar la hoja.

La primera es con el ciclo for, es más rápida que el do while, ya que con el while vas seleccionado celda cargas y luego seleccionas la siguiente celda.

Private Sub UserForm_Activate()
'Por.Dante Amor
    cbo_empresa.Clear
    Set h1 = Sheets("Nominas")
    'Con esta instrucción le indico que haga el ciclo desde 1
 'y hasta la última fila con datos de la columna "A"
    For i = 1 To h1.Range("A" & Rows.Count).End(xlUp).Row
        cbo_empresa.AddItem h1.Cells(i, "A")
    Next
End Sub

Otra forma, es utilizando la propiedad rowsource del combobox, la carga de información, es inmediata con el siguiente código:

Private Sub UserForm_Activate()
'Por.Dante Amor
    cbo_empresa.Clear
    Set h1 = Sheets("Nominas")
    cbo_empresa.RowSource = h1.Name & "!A1:A" & h1.Range("A" & Rows.Count).End(xlUp).Row
End Sub

Con cualquiera de las 2 opciones no tienes que activar la hoja, la carga de datos es más rápida; incluso la hoja puede estar oculta o protegida y la carga se realiza sin problemas.


Saludos. Dante Amor

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas