Note: The other languages of the website are Google-translated. Back to English

¿Cómo sincronizar listas desplegables en varias hojas de trabajo en Excel?

Suponga que tiene listas desplegables en varias hojas de cálculo de un libro de trabajo que contienen exactamente los mismos elementos desplegables. Ahora desea sincronizar las listas desplegables en las hojas de cálculo para que, una vez que seleccione un elemento de una lista desplegable en una hoja de cálculo, las listas desplegables de otras hojas de cálculo se sincronicen automáticamente con la misma selección. Este artículo proporciona un código VBA para ayudarlo a resolver este problema.

Sincronice listas desplegables en varias hojas de trabajo con código VBA


Sincronice listas desplegables en varias hojas de trabajo con código VBA

Por ejemplo, las listas desplegables están en cinco hojas de trabajo denominadas Hoja1, Hoja2, ... Sheet5, para sincronizar las listas desplegables en otras hojas de trabajo de acuerdo con la selección desplegable en Sheet1, aplique el siguiente código VBA para hacerlo.

1. Abra la Hoja 1, haga clic con el botón derecho en la pestaña de la hoja y seleccione Ver código desde el menú del botón derecho.

2. En el Microsoft Visual Basic para aplicaciones ventana, pegue el siguiente código VBA en el Hoja1 (Código) ventana.

Código de VBA: sincronizar la lista desplegable en varias hojas de trabajo

Private Sub Worksheet_Change(ByVal Target As Range)
'Updated by Extendoffice 20220815
    Dim tSheet1 As Worksheet
    Dim tRange As Range
    Dim xRangeStr As String
    On Error Resume Next
    If Target.Count > 1 Then Exit Sub
    
    xRangeStr = "A2:A11"

    Set tRange = Intersect(Target, Range(xRangeStr))
    If Not tRange Is Nothing Then
        xRangeStr = tRange.Address
        Application.EnableEvents = False
        Set tSheet1 = ActiveWorkbook.Worksheets("Sheet2")
        tSheet1.Range(xRangeStr).Value = Target.Value
        Set tSheet1 = ActiveWorkbook.Worksheets("Sheet3")
        tSheet1.Range(xRangeStr).Value = Target.Value
        Set tSheet1 = ActiveWorkbook.Worksheets("Sheet4")
        tSheet1.Range(xRangeStr).Value = Target.Value
        Set tSheet1 = ActiveWorkbook.Worksheets("Sheet5")
        tSheet1.Range(xRangeStr).Value = Target.Value
        Application.EnableEvents = True
    End If
    
End Sub

Notas

1) En el código, A2: A11 es el rango que contiene la lista desplegable. Asegúrese de que todas las listas desplegables estén en el mismo rango en diferentes hojas de trabajo.
2) Hoja2, Hoja3, Hoja4 y Sheet5 son hojas de cálculo que contienen listas desplegables que desea sincronizar en función de la lista desplegable en Sheet1;
3) Para agregar más hojas de trabajo en el código, agregue las siguientes dos líneas antes de la línea "Application.EnableEvents = True”, luego cambie el nombre de la hoja “Sheet5” al nombre que necesita.
Establecer tSheet1 = ActiveWorkbook.Worksheets("Sheet5")
tSheet1.Range(xRangeStr).Valor = Destino.Valor

3. presione el otro + Q llaves para cerrar el Microsoft Visual Basic para aplicaciones ventana.

A partir de ahora, cuando seleccione un elemento de la lista desplegable en Sheet1, las listas desplegables en las hojas de trabajo especificadas se sincronizarán automáticamente para tener la misma selección. Vea la demostración a continuación.


Demostración: sincronice listas desplegables en varias hojas de trabajo en Excel


Las mejores herramientas de productividad de oficina

Kutools para Excel resuelve la mayoría de sus problemas y aumenta su productividad en un 80%

  • Reutilizar: Inserte rápidamente fórmulas complejas, gráficos y cualquier cosa que hayas usado antes; Cifrar celdas con contraseña; Crear lista de distribución y enviar correos electrónicos ...
  • Barra de súper fórmula (edite fácilmente varias líneas de texto y fórmulas); Diseño de lectura (leer y editar fácilmente un gran número de celdas); Pegar en rango filtrado...
  • Combinar celdas / filas / columnas sin perder datos; Contenido de celdas divididas; Combinar filas / columnas duplicadas... Prevenir celdas duplicadas; Comparar rangos...
  • Seleccione Duplicado o Único Filas; Seleccionar filas en blanco (todas las celdas están vacías); Super Find y Fuzzy Find en muchos libros de trabajo; Selección aleatoria ...
  • Copia exacta Varias celdas sin cambiar la referencia de la fórmula; Crear referencias automáticamente a varias hojas; Insertar viñetas, Casillas de verificación y más ...
  • Extraer texto, Agregar texto, Eliminar por posición, Quitar espacio; Crear e imprimir subtotales de paginación; Convertir entre contenido de celdas y comentarios...
  • Súper filtro (guardar y aplicar esquemas de filtros a otras hojas); Orden avanzado por mes / semana / día, frecuencia y más; Filtro especial en negrita, cursiva ...
  • Combinar libros y hojas de trabajo; Combinar tablas basadas en columnas clave; Dividir datos en varias hojas; Conversión por lotes de xls, xlsx y PDF...
  • Más de 300 potentes funciones. Compatible con Office/Excel 2007-2021 y 365. Compatible con todos los idiomas. Fácil implementación en su empresa u organización. Funciones completas Prueba gratuita de 30 días. Garantía de devolución de dinero de 60 días.
pestaña kte 201905

Office Tab lleva la interfaz con pestañas a Office y hace que su trabajo sea mucho más fácil

  • Habilite la edición y lectura con pestañas en Word, Excel, PowerPoint, Publisher, Access, Visio y Project.
  • Abra y cree varios documentos en nuevas pestañas de la misma ventana, en lugar de en nuevas ventanas.
  • ¡Aumenta su productividad en un 50% y reduce cientos de clics del mouse todos los días!
officetab parte inferior
Comentarios (5)
Aún no hay calificaciones. ¡Sé el primero en calificar!
Este comentario fue minimizado por el moderador en el sitio
Hola,

¿Cómo puedo hacer esto si mis menús desplegables están en diferentes rangos? Para elaborar, tengo un menú desplegable en la hoja 7 que está en la celda B7 y el mismo menú desplegable en la hoja 6 en la celda B2.

Gracias,
Elaine
Este comentario fue minimizado por el moderador en el sitio
Hola E,
El siguiente código de VBA puede ayudar.
Aquí tomo Sheet6 como la hoja de trabajo principal, hago clic con el botón derecho en la pestaña de la hoja, selecciono Ver código en el menú contextual y luego copio el siguiente código en la ventana Sheet6 (Código). Cuando selecciona cualquier elemento de la lista desplegable en B2 de Sheet6, la lista desplegable en B7 de Sheet7 se sincronizará para tener el mismo elemento seleccionado.

Private Sub Worksheet_Change(ByVal Target As Range)
'Updated by Extendoffice 20221025
    Dim tSheet1 As Worksheet
    Dim tRange As Range
    Dim xRangeStr As String
    On Error Resume Next
    If Target.Count > 1 Then Exit Sub
    
    xRangeStr = "B2"
    
    Set tRange = Range("B7")
    If Not tRange Is Nothing Then
        xRangeStr = tRange.Address
        Application.EnableEvents = False
        Set tSheet1 = ActiveWorkbook.Worksheets("Sheet7")
        tSheet1.Range(xRangeStr).Value = Target.Value
        Application.EnableEvents = True
    End If
    
End Sub
Este comentario fue minimizado por el moderador en el sitio
Hola Crystal,

¡Muchas gracias por su respuesta, su código funcionó! Tengo una celda justo debajo de b2 y b7, b3 y b8 respectivamente que deben tener la misma función. Traté de reescribir su código como se muestra a continuación, sin embargo, esto no funcionó. Causó que b7 en lugar de b8 cambiara cuando cambié b3. ¿Serías capaz de identificar lo que estoy haciendo mal?

¡Muchas gracias!

Private Sub Worksheet_Change(ByVal Target As Range)
'Updated by Extendoffice 20221025
    Dim tSheet1 As Worksheet
    Dim tRange1 As Range
    Dime tRange2 As Range
    Dim xRangeStr1 As String
    Dim xRangeStr2 As String
    On Error Resume Next
    If Target.Count > 1 Then Exit Sub
    
    xRangeStr1 = "B2"
    xRangeStr2="B3"
    
    Set tRange1 = Range("B7")
    If Not tRange1 Is Nothing Then
        xRangeStr1 = tRange1.Address
        Application.EnableEvents = False
        Set tSheet1 = ActiveWorkbook.Worksheets("Sheet7")
        tSheet1.Range(xRangeStr1).Value = Target.Value
        Application.EnableEvents = True
    End If
    
    Set tRange2 = Range("B8")
    If Not tRange2 Is Nothing Then
        xRangeStr2 = tRange2.Address
        Application.EnableEvents = False
        Set tSheet1 = ActiveWorkbook.Worksheets("Sheet7")
        tSheet1.Range(xRangeStr2).Value = Target.Value
        Application.EnableEvents = True
    End If

End Sub
Este comentario fue minimizado por el moderador en el sitio
Hola E,
Hay algo mal con el código VBA que te respondí anteriormente.
Para la nueva pregunta que mencionó, intente con el siguiente código.

Private Sub Worksheet_Change(ByVal Target As Range)
'Updated by Extendoffice 20221031
    
    Dim xBool1 As Boolean
    Dim xBool2 As Boolean
    Dim xRgStr As String
    Dim tRange As Range
    
    xRangeStr1 = "B2"
    xRangeStr2 = "B3"
    xRgStr = ""
    
    On Error Resume Next
    If Target.Count > 1 Then Exit Sub
    xBool1 = Intersect(Target, Range(xRangeStr1)) Is Nothing
    xBool2 = Intersect(Target, Range(xRangeStr2)) Is Nothing
    
    If xBool1 And xBool2 Then Exit Sub
    
    xRgStr = Target.Address(False, False, xlA1, False, False)
    
    If Target.Address(False, False, xlA1, False, False) = xRangeStr1 Then
        xRgStr = "b7"
    ElseIf Target.Address(False, False, xlA1, False, False) = xRangeStr2 Then
        xRgStr = "b8"
    End If
    If xRgStr = "" Then Exit Sub
    
    Application.EnableEvents = False
    Set tSheet1 = ActiveWorkbook.Worksheets("Sheet7")
    tSheet1.Range(xRgStr).Value = Target.Value
    Application.EnableEvents = True

End Sub
Este comentario fue minimizado por el moderador en el sitio
Cristal,

¡Muchas gracias por tu respuesta, esto funcionó! ¿Cómo podría modificar el código para agregar otra celda en la misma hoja 6, B3 que también necesitaba sincronizarse con B8 en la hoja 7? Intenté modificarlo a continuación, sin embargo, termina colocando el contenido de B3 en la hoja 6 en B7 en la hoja 7 en lugar de B8.


Sub hoja de trabajo privada_Cambio (según el rango de destino ByVal)
'Actualizado por Extendoffice 20221025
Dim tSheet1 como hoja de trabajo
Dim tRange1 como rango
Dim tRange2 como rango
Dim xRangeStr1 como cadena
Dim xRangeStr2 como cadena
On Error Resume Next
Si Target.Count > 1, entonces salga de Sub

xRangeStr1 = "B2"
xRangeStr2 = "B3"

Establecer tRange1 = Rango ("B7")
Si no tRange1 no es nada, entonces
xRangeStr1 = tRange1.Dirección
Application.EnableEvents = False
Establecer tSheet1 = ActiveWorkbook.Worksheets("Sheet7")
tSheet1.Range(xRangeStr1).Valor = Destino.Valor
Application.EnableEvents = True
Si terminar

Establecer tRange2 = Rango ("B8")
Si no tRange2 no es nada, entonces
xRangeStr2 = tRange2.Dirección
Application.EnableEvents = False
Establecer tSheet1 = ActiveWorkbook.Worksheets("Sheet7")
tSheet1.Range(xRangeStr2).Valor = Destino.Valor
Application.EnableEvents = True
Si terminar

End Sub
No hay comentarios publicados aquí todavía
Deje sus comentarios
Publicar como invitado
×
Califica esta publicación:
0   Personajes
Ubicaciones sugeridas

Seguinos

Copyright © 2009 - www.extendoffice.com. | Reservados todos los derechos. Energizado por ExtendOffice, | Mapa del Sitio
Microsoft y el logotipo de Office son marcas comerciales o marcas comerciales registradas de Microsoft Corporation en los Estados Unidos y / o en otros países.
Protegido por Sectigo SSL