No ver hoja de excel mientras que se ejecuta Private Sub UserForm_Initialize()

Necesito que mientras se ejecuta el userform de abajo no me cambie la pantalla de excel a la hoja "Tablas", quiero que se me quede en la hoja "Consulta". He probado a poner al final sheets("Consulta").select pero lo que ocurre es que cuando se ejecuta la siguiente subrutina            Private Sub Development_Name_Change() esta no encuentra los datos de la tabla. Gracias anticipadas.

Private Sub UserForm_Initialize()

Application.ScreenUpdating = False

Development_Name.Clear 'borra lo que haya en el combobox Development_Name
Sheets("Tablas").Select 'nos colocamos en la hoja tablas
Range("F2").Select 'nos colocamos en la celda F2, cabecera de la tabla de modelos
Do While ActiveCell.Value <> "" 'hacer el bucle mientras en las celdas haya valores
Development_Name.AddItem ActiveCell 'añade el contenido al combobox
ActiveCell.Offset(0, 1).Select 'avanzamos 1 celda a la derecha
Loop 'se cierra el bucle
Problema_Genérico.List = Worksheets("Tablas").Range("D3:D16").Value
cmbSucursal.List = Worksheets("Tablas").Range("B3:B14").Value
Application.ScreenUpdating = True
End Sub

1 respuesta

Respuesta
2

[Hola

No es necesario, ni conveniente, seleccionar y/o activar hojas, celdas o cualquier otro objeto para trabajar con él (hay muy pocas excepciones). Los bucles Do While son más lentos que los For Next.

Private Sub UserForm_Initialize()
Dim UltimaFila As Long, x As Long
Let UltimaFila = Sheets("Tablas").Cells(Rows.Count, 6).End(xlUp).Row
Development_Name.Clear 'borra lo que haya en el combobox Development_Name
For x = 2 To UltimaFila
    Development_Name.AddItem Sheets("Tablas").Range("F" & x).Value
Next x
Problema_Genérico.List = Worksheets("Tablas").Range("D3:D16").Value
cmbSucursal.List = Worksheets("Tablas").Range("B3:B14").Value
End Sub

Comentas

Abraham Valencia

Gracias Abraham, veo que ya no se ve la hoja "tablas" pero la búsqueda de datos para añadir al combobox la hace vertical y como puedes ver debería ser horizontal, me lo puedes modificar?

Gracias

Private Sub UserForm_Initialize()
Dim Ultimacolumna As Long, x As Long
Let Ultimacolumna = Sheets("Tablas").Cells(2, Columns.Count).End(xlToLeft).Column
Development_Name.Clear 'borra lo que haya en el combobox Development_Name
For x = 6 To Ultimacolumna
    Development_Name.AddItem Sheets("Tablas").Cells(2, x).Value
Next x
Problema_Genérico.List = Worksheets("Tablas").Range("D3:D16").Value
cmbSucursal.List = Worksheets("Tablas").Range("B3:B14").Value
End Sub

Saludos]

Abraham Valencia

Ahora en el segundo combobox "Modelo Comercial" que está vinculado a los valores del primero me aparece en blanco al seleccionarlo, y se va a la hoja "Tablas", este es el código podrías revisarlo? Gracias

Private Sub Development_Name_Change() 'se dispara cuando se selecciona el combobox
Modelo_Comercial.Clear
indice = Development_Name.ListIndex + 6 'para que nos diga el índice la posición que se ha seleccionado en development_name y le añada 6 para evitar que el valor sea 0
Cells(3, indice).Select
Do While ActiveCell.Value <> "" 'hacer bucle mientras en las celdas haya valores
Modelo_Comercial.AddItem ActiveCell 'añade el contenido al combobox
ActiveCell.Offset(1, 0).Select 'avanzamos una celda hacia abajo
Loop
End Sub

En realidad al usar el evento Change de ese u otros combobox (u otros objetos) siempre se generan cosas "raras" si uno no toma en cuenta que el menor cambio en ellos "dispara" justamente dicho evento generando, a veces, bucles innecesarios o resultados como el que mencionas. No servirá de mucho ver ese pequeño código si no se ve el conjunto de todo lo que tienes, y ojo a algo, debes entenderlo y revisarlo tú, ya que de ser mucho requiere de un tiempo que no tenemos los que ayudamos por aquí ya que esto es algo que hacemos ad honorem y en nuestros tiempos libres. Dale una revisada a todo, intenta darte cuenta en qué momentos se "disparan_" dichos eventos, no olvides que hasta al llenar un combobox se activa el change.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas