Vincular combobox sin repetir dato inicial - 2

Hola!
Me pasaste este código:
'Saludos takki, Lo primero que debes hacer es llenar el combobox1 al iniciar el formulario con el siguiente código:
Private Sub UserForm_Initialize()
Range("A1").Select
Do While Not IsEmpty(ActiveCell)
If InStr(cadena, ActiveCell) = 0 Then
cadena = cadena & " " & ActiveCell
End If
ActiveCell.Offset(1, 0).Select
Loop
cadena = Right(cadena, Len(cadena) - 1)
valor = Split(cadena, " ")
For i = 0 To UBound(valor)
ComboBox1.AddItem valor(i)
Next
End Sub
'Una vez que llenaste los datos del combobox1 y dependiendo del valor seleccionado debes llenar el combobox2 con este código:
Private Sub ComboBox1_Change()
ComboBox2.Clear
Range("A1").Select
Do While Not IsEmpty(ActiveCell)
If ActiveCell.Value = ComboBox1.Value Then
fila = ActiveCell.Row
ComboBox2.AddItem Range("D" & fila).Value
End If
ActiveCell.Offset(1, 0).Select
Loop
End Sub
Me funciona correctamente, pero no se podría hacer para que no recorriera las celdas con datos de la columna A al iniciar el userform, ¿y qué al pinchar un dato en el combobox1 tampoco las recorriera? Osea, que haga su función pero que se quedara en la celda en la que esté. No se, igual es necesario que las recorra para leerlas...
Gracias por tu tiempo.
Saludos.

1 respuesta

Respuesta
1
Para que no veas la acción de recorrerse a lo largo de los datos puedes incluir la instrucción  "Application.ScreenUpdating = (False ó True)" para ocultar el proceso de ejecución
Anexo el código con este cambio (al inicio debes desactivarlo y al finar activarlo nuevamente)

Private Sub UserForm_Initialize()
Application.ScreenUpdating = False
Range("A1").Select
Do While Not IsEmpty(ActiveCell)
 If InStr(cadena, ActiveCell) = 0 Then
  cadena = cadena & " " & ActiveCell
 End If
 ActiveCell.Offset(1, 0).Select
Loop
 cadena = Right(cadena, Len(cadena) - 1)
 valor = Split(cadena, " ")
For i = 0 To UBound(valor)
 ComboBox1.AddItem valor(i)
Next
Application.ScreenUpdating = True
End Sub
Private Sub ComboBox1_Change()
Application.ScreenUpdating = False
ComboBox2.Clear
Range("A1").Select
Do While Not IsEmpty(ActiveCell)
 If ActiveCell.Value = ComboBox1.Value Then
  fila = ActiveCell.Row
  ComboBox2.AddItem Range("D" & fila).Value
 End If
 ActiveCell.Offset(1, 0).Select
Loop
Application.ScreenUpdating = True
End Sub
Pruébalo y si tienes duda me comentas
Rene Nochebuena
Hola de nuevo.
Gracias por este segundo código, tiene una pequeña pega, en el primer combobox "combobox1", al cargar los datos, si en la celda hay más de una palabra, varias palabras separadas por un espacio, me salen en el combobox como si fueran 2 celdas, es decir, si por ejemplo en una celda pone "cliente 005", en el cobobox1 me sale "clliente" y debajo "005", como si fueran dos celdas distintas, a ver si se puede solucionar. El combobox2 funciona bien.
Gracias.
Saludos.
OK, si manejas espacios en tus valores del ComboBox1 podemos sustituir el espacio " " por el signo de gato por ejemplo "#", o si algún valor tiene dicho carácter utiliza otro diferente ($, %, &, etc.), la idea es que al concatenar los valores se separen por algún valor que no existe en los valores de la columna "A". Ejemplo:
Private Sub UserForm_Initialize()
Application.ScreenUpdating = False
Range("A1").Select
Do While Not IsEmpty(ActiveCell)
 If InStr(cadena, ActiveCell) = 0 Then
  cadena = cadena & "#" & ActiveCell
 End If
 ActiveCell.Offset(1, 0).Select
Loop
 cadena = Right(cadena, Len(cadena) - 1)
 valor = Split(cadena, "#")
For i = 0 To UBound(valor)
 ComboBox1.AddItem valor(i)
Next
Application.ScreenUpdating = True
End Sub
Pruébalo y si tienes duda me comentas
Rene Nochebuena

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas