我们如何使用VBA

时间:2015-07-24 10:09:45

标签: excel vba excel-vba excel-2007

我需要两个依赖的下拉列表。在VBA中,我尝试过为单个列表创建下拉列表,但我无法使其依赖。下拉列表就像

第一个下拉列表的内容

dd1
dd2

dd4
dd5
dd6

相应的list2是

表示dd1

ddd1
ddd2
ddd3

表示dd2

ddd4

ddd6

喜欢明智。

我已完成代码

With Range("D1").Validation
                .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
                xlBetween, Formula1:=TempList
                .IgnoreBlank = True
                .InCellDropdown = True
                .InputTitle = ""
                .ErrorTitle = ""
                .InputMessage = ""
                .ErrorMessage = ""
                .ShowInput = True
                .ShowError = True
            End With
        End If

列表中不得有任何空格/空单元格。

我也试过这个

https://siddharthrout.wordpress.com/2011/07/29/excel-data-validationcreate-dynamic-dependent-lists-vba/

但是上面的代码支持单个单元格下拉。我需要将整列单元格作为下拉列表。

或者是否有任何方法可以使用公式直接创建相关的下拉列表,同时消除两列中的空白单元格。

提前致谢

1 个答案:

答案 0 :(得分:2)

您必须在某处存储这些值的关系。然后当选择一个时,填充另一个。下面是一个示例,如果值存储在列A和A列中。乙

A   B
--- ----
dd1 ddd1
dd1 ddd2
dd1 ddd3
dd2 ddd4
dd2 ddd6

在第一个列表的更改事件中,根据第一个列表中选择的内容查找第二个列表中的内容。

Private Sub ComboBox1_Change()
Dim lRow As Long

'Clear out the second list
ComboBox2.Clear

lRow = 1
Do While lRow <= ws.UsedRange.Rows.Count

    If ws.Range("A" & lRow).Value = ComboBox1.Text Then
        'Column A matches what was selected in the first list so add the value in columnB to the second list.
        ComboBox2.AddItem ws.Range("B" & lRow).Value
    End If

lRow = lRow + 1
Loop

End Sub

如果您将数据存储在其他地方,例如数据库,

Private Sub ComboBox1_Change()
Dim strSQL as string

    'Clear out the second list
    ComboBox2.Clear

    strSQL = "Select fieldname2 from tablename where fieldname1 = '" & ComboBox1.Text & "'"

    'Put the results of the query into combobox2

End sub