I’ve just had to work out how to change the cell drop down source of an Excel cell based on the value of another cell. In this case I had one drop down with the Australian states in it and I wanted this to drive a second dropdown that allows users to select the Federal Electorate. It turned out to be pretty easy (and quite nifty). My spreadsheet is setup with a series of named ranges containing the state electorates. So, for example, there’s a named range called ElectoratesNSW containing all the electorates for NSW. Just add the following to the sheet where you want the data validation magic to happen.
Private Sub Worksheet_Change(ByVal Target As Range)
Dim sState As String
Dim rngTmp As Range
'
' Cell in row 7 and column 3 is the State dropdown
'
If Target.Row = 7 And Target.Column = 3 Then
'
'Cell in row 7, column 4 is the electorate dropdown
'
Set rngTmp = Me.Cells(7, 4)
If Len(Target.Value) > 1 Then
sState = Target.Value
rngTmp.Formula = ""
With rngTmp.Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:="=" & "Electorates" & UCase(sState)
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.ShowInput = True
.ShowError = True
End With
Else
rngTmp.Validation.Delete
rngTmp.Formula = ""
End If
End If
End Sub
