Domanda

il suo un po ' di confusione a scrivere la mia idea ma mal fare un tentativo.Ecco cosa sono riuscito a fare.Ho un menu a tendina sulla mia verticale cellule, quindi ho un elenco di nomi da scegliere, cui è legato da [nome]-> [definire] e [dati] -> [convalida].quello che vorrei è un altro verticale della cella per compilare un'altra discesa, a seconda delle condizioni del primo.

per esempio ho un elenco di frutta e verdura.Il mio primo menu a discesa chiede che tipo così ho la selezione della frutta.A causa di tale selezione la mia seconda discesa mi darà una lista di frutta (senza verdure) e viceversa.+

il vostro aiuto è molto apprezzato.

grazie gang!


se voglio il nome di cella al posto di vegetali, ma il 2009 e il frutto 2010 ricevo un errore.c'è un modo intorno?grazie

È stato utile?

Soluzione

Lavoriamo con alcuni intervalli denominati.

Nome E7 "opzione"

Mettere "verdure" in E4 e "frutti" in E5;

in E7, Dati> Convalida> List, fonte di $ E $ 4: $ E $ 5;

mettere alcune verdure in H4: H7; nome che vanno "ortaggi";

mettere alcuni frutti in J4: J7; nome che vanno "frutti";

Ora, in E8:. Dati> Convalida> List, fonte "= INDIRETTO (opzionale)"

Quando si effettua una scelta in E7, le opzioni per E8 sono impostate di conseguenza.

Altri suggerimenti

Ecco il mio codice per fare esattamente quello che stai chiedendo.

Ho definito indipendente colonna come un intervallo denominato Major_Category e impostare la discesa di convalida di un elenco di dati.Io poi, sono diversi altri elenchi di dati, che sono denominati cat_subItems.Così, per il tuo esempio, la categoria principale avrebbe articoli

  • frutta
  • vegetale

poi ho definito a più liste di chiamata

  • cat_fruit
  • cat_vegetable

che dovrebbe contenere i nomi dei frutti o verdure.Quindi in base alla categoria principale selezione l'evento Worksheet_change cambierà la discesa di convalida nella colonna successiva oltre a cat_fruit o cat_vegetable.

Nota: Questo codice non è bello giocare se si utilizza excel proteggere il foglio di lavoro.Vedere questa domanda per trattare con Excel foglio di lavoro/libro di protezione.

Public Sub Worksheet_Change(ByVal target As Range)
On Error GoTo ErrHandler:

Dim VRange As Range, cell As Range
Dim msg As String
Dim validateCode As Variant
Dim modCell As Range
Set VRange = Range("Major_Category")

If Intersect(VRange, target) Is Nothing Then Exit Sub

For Each cell In Intersect(VRange, target)
    b = cell.Value
    curRow = target.Row

    Set modCell = cell.Offset(0, 1) 'cell to modify the validation'

    If Not (b = "") Then
        modCell.Validation.Delete
        modCell.Validation.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _

        'sets the validation formula to the list/range name'
        xlBetween, Formula1:="=cat_" & b 

        modCell.Validation.IgnoreBlank = True
        modCell.Validation.InCellDropdown = True
        modCell.Validation.InputTitle = ""
        modCell.Validation.ErrorTitle = ""
        modCell.Validation.ErrorMessage = ""
        modCell.Validation.ShowInput = True
        modCell.Validation.ShowError = True

    End If
Next cell


Cleanup:

Exit Sub

ErrHandler:
MsgBox Err, vbOKOnly, "Error Occurred"
Resume Cleanup:

End Sub

Non si può denominare un intervallo "2009" - perché Excel avrebbe difficoltà a distinguere che a partire dal valore intero 2009. Ci sono alcune altre restrizioni, anche - non si poteva nominare una serie "A1" perché Excel potrebbe confondersi con la cella A1. Che cosa si potrebbe fare, invece è avere il 2009 e il 2010 in una tabella, e accanto a loro mettere i nomi dei campi di, poi fare un CERCA.VERT per ottenere il nome di intervallo. In alternativa, è possibile utilizzare, ad esempio, "_2009" e avere la vostra formula come

= INDIRETTO ( "_" e l'opzione)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top