Excel - Problemas con Lista desplegable VBA Excel

 
Vista:
sin imagen de perfil

Problemas con Lista desplegable VBA Excel

Publicado por Eduardol (10 intervenciones) el 03/12/2021 01:01:30
Hola amigos.

Hace unos dias estoy tratando de hacer algo parecido a lo que se hace en el siguiente video de YT, pero mi proyecto es ligeramente distitnto.

https://www.youtube.com/watch?v=ZapMw-DwTVY&t=634s&ab_channel=SergioAlejandroCampos-EXCELeINFO

Lo que deseo hacer es que el usuario, pueda seleccionar un valor de una lista desplegable que se encuentra en la ""TablaCodSucs[ENCABEZADO]", dependiendo de que si el valor del rango "AK5", es True o False. Pero que si es False, siempre devuelta en el rango "MiRango" el valor de la celta "AL5"

El valor de la celda "AL5", depende de otra macro que devuelve ciertos valores del "Environ" en el cual se ejecuta Excel.
Hay un Checkbox que se encuentra linkeado a la celda "AK5", si esta tildado, es True sino False

Pero no consigo que funcione como funciona en el video, Si el valor del AK5, es False, el valor de H5 no vuelve ser igual al de AL5, y por ultimo suele cerrarse y reinciar el excel.

he visto varios video, he probado varias alternativas, pero no consugo que funcionen apropiadamente.

Sin mas les agradecere cualquier ayuda que puedan brindarme.

Saludos y Larga vida y Prosperidad


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
Private Sub Worksheet_Change(ByVal Target As Range)
 
Dim HojaLista As Worksheet
Dim RangoLista As Range
Dim MiRango As Range
 
Set HojaLista = ThisWorkbook.Worksheets("TablaSucursales")
Set RangoLista = HojaLista.Range("TablaCodSucs[ENCABEZADO]")
Set MiRango = Application.Worksheets("A) Datos").Range("H5")
 
If Range("AK5").Value = False Then
        MiRango.Validation.Delete
        MiRango.Value = Application.Worksheets("A) Datos").Range("AL5")
       'Esta ultima linea no funciona, no devuelve el valor de "AL5"
 
ElseIf Range("AK5").Value = True Then
 
    With MiRango.Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _
        Formula1:="='" & HojaLista.Name & "'!" & RangoLista.Address
    End With
 
End If
 
 
 
End Sub
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil

Problemas con Lista desplegable VBA Excel

Publicado por Eduardol (10 intervenciones) el 03/12/2021 04:35:32
Creo que encontre una posible solucion, pero no se como escribirla.
La macro que escribi arriba, funciona siempre y cuando el valor en la celda que es el "Target" se actualice de manera manual, y no si es True or False. Entonces, lo que tengo que escribir, es que Si la celda AK5, es true or false, entonces usar otra celda cualquiera, para enviar un sendkey y a esa celda etiquetarla como la target. de esa menera, el excel entenderia que el valor fue actualizado de manera manual y se habilitaria el evento Change.
Pero remito no se como escribir el codigo. he realizado varias pruebas pero no he tenido exito.

Tambien supongo que habra otra forma menos rebuscada.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Problemas con Lista desplegable VBA Excel

Publicado por Eduardol (10 intervenciones) el 04/12/2021 15:03:18
Bueno, lo solucione usando otro evento de excel

El codigo lo que hace es sencillo, Muestra una lista de validacion en la celda H5 dependiendo del valor de una celda (true or false), que esta linkeado a un checkbox.
Si es FALSE, entonces devuelve el valor de la celda AL5, si es TRUE, entondes muestra la lista de validacion

Les paso el codigo a modo de ejemplo

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
Private Sub Worksheet_Calculate()
 
On Error GoTo Err_Worksheet_Calculate
Application.EnableEvents = False
Dim HojaLista As Worksheet
Dim RangoLista As Range
Dim Target As Range
Dim RangoSucs As Range
 
Set HojaLista = ThisWorkbook.Worksheets("TablaSucursales")
Set RangoLista = HojaLista.Range("TablaCodSucs[ENCABEZADO]")
Set Target = Application.Worksheets("A) Datos").Range("AK5")
Set RangoSucs = Application.Worksheets("A) Datos").Range("H5")
 
If Target.Value = False Then
 
       Range("H5").Value = Range("AL5")
        'End If
 
 
ElseIf Target.Value = True Then
 
    With RangoSucs.Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _
        Formula1:="='" & HojaLista.Name & "'!" & RangoLista.Address
    End With
 
End If
Err_Worksheet_Calculate:
Application.EnableEvents = True
 
End Sub
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar