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

Come sincronizzare gli elenchi a discesa in più fogli di lavoro in Excel?

Si supponga di avere elenchi a discesa su più fogli di lavoro in una cartella di lavoro che contengono esattamente gli stessi elementi a discesa. Ora si desidera sincronizzare gli elenchi a discesa tra i fogli di lavoro in modo che, una volta selezionato un elemento da un elenco a discesa in un foglio di lavoro, gli elenchi a discesa in altri fogli di lavoro vengano sincronizzati automaticamente con la stessa selezione. Questo articolo fornisce un codice VBA per aiutarti a risolvere questo problema.

Sincronizza gli elenchi a discesa in più fogli di lavoro con il codice VBA


Sincronizza gli elenchi a discesa in più fogli di lavoro con il codice VBA

Ad esempio, gli elenchi a discesa sono in cinque fogli di lavoro denominati Foglio1, Foglio2, ..., Foglio5, per sincronizzare gli elenchi a discesa in altri fogli di lavoro in base alla selezione a discesa in Foglio1, applicare il seguente codice VBA per farlo.

1. Aprire Foglio1, fare clic con il pulsante destro del mouse sulla scheda del foglio e selezionare Visualizza codice dal menu del tasto destro.

2. Nel Microsoft Visual Basic, Applications Edition finestra, incolla il seguente codice VBA nel file Foglio1 (Codice) finestra.

Codice VBA: sincronizza l'elenco a discesa in più fogli di lavoro

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

Note:

1) Nel codice, A2: A11 è l'intervallo che contiene l'elenco a discesa. Assicurati che tutti gli elenchi a discesa si trovino nello stesso intervallo su fogli di lavoro diversi.
2) Foglio2, Foglio3, Foglio4 e Sheet5 sono fogli di lavoro che contengono elenchi a discesa che si desidera sincronizzare in base all'elenco a discesa in Foglio1;
3) Per aggiungere più fogli di lavoro nel codice, aggiungere le seguenti due righe prima della riga "Application.EnableEvents = True”, quindi cambia il nome del foglio “Sheet5” al nome che ti serve.
Imposta tSheet1 = ActiveWorkbook.Worksheets("Foglio5")
tSheet1.Range(xRangeStr).Value = Target.Value

3. premi il altro + Q i tasti per chiudere il file Microsoft Visual Basic, Applications Edition finestra.

D'ora in poi, quando selezioni un elemento dall'elenco a discesa in Foglio1, gli elenchi a discesa nei fogli di lavoro specificati verranno sincronizzati automaticamente per avere la stessa selezione. Guarda la demo qui sotto.


Demo: sincronizza gli elenchi a discesa in più fogli di lavoro in Excel


I migliori strumenti per la produttività in ufficio

Kutools per Excel risolve la maggior parte dei tuoi problemi e aumenta la tua produttività dell'80%

  • Riutilizzo: Inserisci rapidamente formule complesse, grafici e tutto ciò che hai usato prima; Crittografa celle con password; Crea mailing list e invia email ...
  • Bar Super Formula (modifica facilmente più righe di testo e formula); Layout di lettura (leggi e modifica facilmente un gran numero di celle); Incolla su intervallo filtrato...
  • Unisci celle / righe / colonne senza perdere dati; Contenuto delle celle divise; Combina righe / colonne duplicate... Impedisci celle duplicate; Confronta intervalli...
  • Seleziona Duplica o Unico Righe; Seleziona Righe vuote (tutte le celle sono vuote); Super Find e Fuzzy Find in molte cartelle di lavoro; Selezione casuale ...
  • Copia esatta Più celle senza modificare il riferimento della formula; Riferimenti di creazione automatica a più fogli; Inserisci punti elenco, Caselle di controllo e altro ...
  • Estrai testo, Aggiungi testo, Rimuovi per posizione, Rimuovi spazio; Creare e stampare totali parziali di paging; Converti contenuto e commenti tra celle...
  • Super filtro (salva e applica schemi di filtri ad altri fogli); Ordinamento avanzato per mese / settimana / giorno, frequenza e altro; Filtro speciale in grassetto, corsivo ...
  • Combina cartelle di lavoro e fogli di lavoro; Unisci tabelle in base a colonne chiave; Suddividi i dati in più fogli; Conversione in batch xls, xlsx e PDF...
  • Più di 300 potenti funzionalità. Supporta Office/Excel 2007-2021 e 365. Supporta tutte le lingue. Facile implementazione nella tua azienda o organizzazione. Funzionalità complete Prova gratuita di 30 giorni. Garanzia di rimborso di 60 giorni.
scheda kte 201905

Scheda Office porta l'interfaccia a schede a Office e semplifica notevolmente il lavoro

  • Abilita la modifica e la lettura a schede in Word, Excel, PowerPoint, Publisher, Access, Visio e Project.
  • Apri e crea più documenti in nuove schede della stessa finestra, piuttosto che in nuove finestre.
  • Aumenta la produttività del 50% e riduce ogni giorno centinaia di clic del mouse!
fondo officetab
Commenti (5)
Ancora nessuna valutazione. Puoi essere il primo a votare!
Questo commento è stato fatto dal moderatore sul sito
Ciao,

Come posso farlo se i miei menu a discesa sono in intervalli diversi? Per elaborare, ho un menu a discesa nel foglio 7 che si trova nella cella B7 e lo stesso menu a discesa nel foglio 6 nella cella B2.

Grazie,
Elaine
Questo commento è stato fatto dal moderatore sul sito
Ciao E,
Il seguente codice VBA può aiutare.
Qui prendo Sheet6 come foglio di lavoro principale, fare clic con il pulsante destro del mouse sulla scheda del foglio, selezionare Visualizza codice dal menu di scelta rapida, quindi copiare il codice seguente nella finestra Sheet6 (Codice). Quando si seleziona un elemento dall'elenco a discesa in B2 di Foglio6, l'elenco a discesa in B7 di Foglio7 verrà sincronizzato per avere lo stesso elemento selezionato.

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
Questo commento è stato fatto dal moderatore sul sito
Ciao Cristallo,

Grazie mille per la tua risposta, il tuo codice ha funzionato! Ho una cella rispettivamente sotto b2 e b7, b3 e b8 che devono avere la stessa funzione. Ho provato a riscrivere il codice come mostrato di seguito, tuttavia non ha funzionato. Ha causato la modifica di b7 anziché b8 quando ho cambiato b3. Potresti essere in grado di identificare cosa sto sbagliando?

Grazie mille!

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
Questo commento è stato fatto dal moderatore sul sito
Ciao E,
C'è qualcosa di sbagliato nel codice VBA che ti ho risposto sopra.
Per la nuova domanda che hai menzionato, prova il codice seguente.

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
Questo commento è stato fatto dal moderatore sul sito
Cristallo,

Grazie mille per la tua risposta, ha funzionato! Come posso modificare il codice per aggiungere un'altra cella nello stesso foglio 6, B3 che doveva anche essere sincronizzato con B8 nel foglio 7? Ho tentato di modificarlo di seguito, tuttavia finisce per mettere il contenuto di B3 sul foglio 6 in B7 sul foglio 7 invece di B8.


Private Sub Worksheet_Change (ByVal Target As Range)
'Aggiornato da Extendoffice 20221025
Oscura tSheet1 come foglio di lavoro
Dim tRange1 Come intervallo
Dim tRange2 Come intervallo
Dim xRangeStr1 come stringa
Dim xRangeStr2 come stringa
On Error Resume Next
Se Target.Count > 1 Quindi esci da Sub

xRangeStr1 = "B2"
xRangeStr2 = "B3"

Imposta tRange1 = Intervallo ("B7")
Se non tRange1 non è niente allora
xRangeStr1 = tRange1.Indirizzo
Application.EnableEvents = False
Imposta tSheet1 = ActiveWorkbook.Worksheets("Foglio7")
tSheet1.Range(xRangeStr1).Value = Target.Value
Application.EnableEvents = True
End If

Imposta tRange2 = Intervallo ("B8")
Se non tRange2 non è niente allora
xRangeStr2 = tRange2.Indirizzo
Application.EnableEvents = False
Imposta tSheet1 = ActiveWorkbook.Worksheets("Foglio7")
tSheet1.Range(xRangeStr2).Value = Target.Value
Application.EnableEvents = True
End If

End Sub
Non ci sono ancora commenti pubblicati qui
Lasciate i vostri commenti
Pubblicazione come ospite
×
Valuta questo post:
0   Personaggi
Posizioni suggerite

Seguici

Copyright © 2009 - www.extendoffice.com. | Tutti i diritti riservati. Offerto da ExtendOffice, | Mappa del sito
Microsoft e il logo Office sono marchi o marchi registrati di Microsoft Corporation negli Stati Uniti e / o in altri paesi.
Protetto da Sectigo SSL