Cambiar el valor de una lista desplegable (validación de datos) desde una macro desde VBA

Tengo una lista desplegable en la celda "A1", que contiene los valores "a", "b" y "c".

Actualmente, en la celda "A1" está el valor de "a".

Mi pregunta es: ¿Cómo cambio a "b" el valor de la celda "A1" desde VBA, indicandole solo el índice (en este caso sería 2 y para "c" el índice sería 3)(lo de los índices no lo sé con seguridad pues puede empezar de 0, pero quiero que me seleccione cualquier ínidce, de preferencia el primero o el segundo)?

Respuesta
2

Te anexo el código VBA para obtener el valor según un índice:

Sub Seleccionar_Siguiente_Valor()
'Por.Dante Amor
    '
    indice = 2
    Set celda = Range("A1")
    Set ad = celda.SpecialCells(xlCellTypeAllValidation)
    If Not Intersect(celda, ad) Is Nothing Then
        Set rango = Range(Mid(celda.Validation.Formula1, 2))
        If indice > rango.Count Or indice = 0 Or Not IsNumeric(indice) Then
            MsgBox "El índice no es correcto"
        Else
            celda.Value = rango.Cells(indice).Value
        End If
    Else
        MsgBox "No tiene lista de validación la celda : " & celda.Address
    End If
End Sub

Cambia en la macro indice = 2 por el número de índice que quieras seleccionar, siguiendo tu ejemplo, si quieres el valor de "c" entonces  indice = 3. Puedes poner el índice en una celda, por ejemplo indice = range("A2").value , en este caso, solamente modifica el número de índice en la celda A2 y ejecuta la macro para obtener el valor según el índice.

Nota: El origen de los datos de la lista de validación puede ser un rango o un nombre; y la macro lo reconoce para obtener el valor del índice que necesites.


.

'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias

.

Avísame cualquier duda

.

1 respuesta más de otro experto

Respuesta

A diferencia del "ComboBox" de los objetos ActiveX, los valores ingresados a la validación de datos de las celdas, no tienen índice.

Para hacer que en la celda aparezca el valor deseado, tienes que "colocarlo" directamente:

Range("A1") = "b"

Lo otro es desplegar la lista haciendo uso de "SendKeys" y "pulsar" la tecla "abajo" tantas veces como desees para elegir el valor:

Sub Desplegar()
Range("A1").Select
Application.SendKeys "%{DOWN}"
Application.SendKeys "{DOWN}"
Application.SendKeys "{DOWN}"
End Sub

Algo así. Comentas.

Abraham Valencia

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas