我對 VBA 很陌生,在創建多個帶有額外扭曲的下拉串列時遇到了一些麻煩。我正在處理的作業簿的兩張表顯示在這篇文章中鏈接的影像中。[1]:https ://i.stack.imgur.com/BBIA1.png [2]:https ://i.stack.imgur.com/2Gkxb.png
所以基本上我要做的是為“FORM”表中的單元格 B6 創建一個下拉串列,該下拉串列是從“LISTS”表中的單元格 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 中拉出。任何幫助,將不勝感激。謝謝你。
uj5u.com熱心網友回復:
你沒有回答澄清問題...
請嘗試下一種方法:
- 首先,您需要為第一個單元格創建驗證。僅一次,或者如果需要修改串列內容。請復制標準模塊中的下一個代碼:
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驗證串列后您需要從該串列中放置一個值(讓我們說,第一個),它可以很容易地完成......
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/460543.html
