[英]Multiple Dependent Drop-Down Lists in Excel VBA
我想創建多個帶有額外扭曲的下拉列表。
工作簿的兩張紙。
我正在嘗試為“表格”表格中的單元格 B6 創建一個下拉列表,該下拉列表是從“列表”表格中的單元格 A2:A4 中提取的。 根據在單元格 B6 中選擇的內容,將為“表格”表中的單元格 D6 創建一個下拉列表(從“列表”表中提取)。 這里需要注意的是,如果從“FORM”表的單元格 B6 的下拉列表中選擇“PART”,而不是在 D6 中生成下拉列表,我希望單元格顯示“N/A”。
Sub PRODUCT_LIST()
Dim FORM As Worksheet
Dim LISTS As Worksheet
Dim PRODUCT As Range
Dim PRODUCT_LIST As Range
Dim MODEL As Range
Dim BIKE_LIST As Range
Dim CHAIR_LIST As Range
Set FORM = ThisWorkbook.Worksheets("FORM")
Set LISTS = ThisWorkbook.Worksheets("LISTS")
Set PRODUCT = FORM.Range("B6")
Set MODEL = FORM.Range("D6")
Set PRODUCT_LIST = LISTS.Range("A2:A4")
Set BIKE_LIST = LISTS.Range("B2:B8")
Set CHAIR_LIST = LISTS.Range("C2:C3")
With PRODUCT.Validation
.Delete 'delete previous validation
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _
Formula1:="='" & LISTS.Name & "'!" & PRODUCT_LIST.Address
End With
If PRODUCT.Value = "BIKE" Then
With MODEL.Validation
.Delete 'delete previous validation
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _
Formula1:="='" & LISTS.Name & "'!" & CHAIR_LIST.Address
End With
ElseIf PRODUCT.Value = "CHAIR" Then
With MODEL.Validation
.Delete 'delete previous validation
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _
Formula1:="='" & LISTS.Name & "'!" & BIKE_LIST.Address
End With
ElseIf PRODUCT.Value = "PART" Then
MODEL.Value = "N/A"
Else
End If
End Sub
B6 的下拉列表有效,但 D6 的下拉列表似乎忽略了我放置的條件。 無論我在 B6 的下拉列表中選擇什么,D6 的下拉列表總是從 CHAIR_LIST 中拉出。
你沒有回答澄清問題...
請嘗試下一種方法:
Sub PRODUCT_LIST()
Dim FORM As Worksheet, LISTS As Worksheet
Set FORM = ThisWorkbook.Worksheets ("FORM")
Set LISTS = ThisWorkbook.Worksheets("LISTS")
With FORM.Range("B6").Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _
Formula1:="='" & LISTS.name & "'!" & "A2:A4"
End With
End Sub
FORM
代碼模塊中的下一個代碼。 右鍵單擊工作表名稱,然后選擇View Code
:Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address(0, 0) = "B6" Then
Dim MODEL As Range, LISTS As Worksheet, BIKE_LIST As Range, CHAIR_LIST
Set MODEL = Me.Range("D6")
Set LISTS = ThisWorkbook.Worksheets("LISTS")
Set BIKE_LIST = LISTS.Range("B2:B8")
Set CHAIR_LIST = LISTS.Range("C2:C3")
Application.EnableEvents = False
If Target.value = "BIKE" Then
With MODEL.Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _
Formula1:="='" & LISTS.name & "'!" & BIKE_LIST.Address
End With
MODEL.value = ""
ElseIf Target.value = "CHAIR" Then
With MODEL.Validation
.Delete 'delete previous validation
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _
Formula1:="='" & LISTS.name & "'!" & CHAIR_LIST.Address
End With
MODEL.value = ""
ElseIf Target.value = "PART" Then
MODEL.value = "N/A"
Else
End If
Application.EnableEvents = True
End If
End Sub
如果在更改MODEL
驗證列表后,您需要從該列表中放置一個值(假設是第一個),它可以很容易地完成......
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.