依赖于Excel的下拉列表(使用/不使用VBA)

尽pipe我对常规VB非常熟悉,但对于VBA我还是个全新的东西。 我不知道这是通过VBA来完成,还是通过内置的Excelfunction来完成。 基本上,我有一堆隐藏工作表上的列数据。 另一张纸上应该有两个下拉列表,其中一张取决于另一张的选定值。 关系中有三个实体(参见下面的示例)我不知道如何让这个工作,甚至这些行之间的关系如何工作。

下面是我想要达到的一个例子:一张纸上有两列:“员工”和“项目”。 员工包含一组员工的下拉列表。 这些数据位于隐藏表格中。 每个员工都链接到一个部门,每个部门都链接到一些项目。 一旦用户select了一个特定的员工,我希望活动行的“项目”列填写下拉列表,其中包含所有链接到所选员工所属部门的项目。 我将如何去在Excel中设置这些关系,并编写使这个function发生的VBA函数?

我无法为您提供一个隐藏工作表上的数据列的例子,因为我不知道我应该如何安排他们开始。

在这里你可以find一个完整的教程:

http://www.contextures.com/xldataval02.html

只要工作表的用户不更改下拉列表中允许的数据,就不需要VBA。 如果是这种情况,我build议你应该添加某种“更新”function(使用VBA)。 这个更新函数只要你允许的数据发生变化就重新定义你为每个下拉列表提供的命名单元格区域。

就VBA而言,更改区域是一个单线程,就您所知的数据所在的区域( firstRowlastRowcolumn )而言:

  ThisWorkbook.Names.Add Name:="areaname", _ RefersToR1C1:="=YourSheetName!R" & firstRow & "C" & column _ & ":R" & lastRow & "C" & column 

这工作:

我假设了三个部门(A,B,C)和1至9个项目。共有三名员工。 当然,这可以推广到任何数量的员工,部门,项目。

我放置这样的数据:

 ColA ColB ColC ColD ColE ColF ColG Name Dept Dept ABC Peter A Projects 1 4 8 Paul B 2 5 9 Mary C 3 6 7 

在单元格A7中,我有一个使用数据validation创build的下拉菜单,您可以在其中select员工:

  • 数据 – >validation – >列表 – >源= $ A $ 2:$ A $ 4

在表单模块中:

 Private Sub Worksheet_Change(ByVal Target As Range) Call FillDropDown End Sub 

它会自动更新单元格D7中的下拉菜单,然后您可以从中select项目:

 Sub FillDropDown() Dim dept As String Dim col As Long dept = WorksheetFunction.VLookup(Range("A7"), Range("A2:B4"), 2, False) col = WorksheetFunction.Match(dept, Range("E1:G1"), 0) With Range("D7").Validation .Delete .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _ xlBetween, Formula1:="=$" & Chr(68 + col) _ & "$2:$" & Chr(68 + col) & "$10" 'Range("E2:E4").Offset(0, col - 1) .IgnoreBlank = True .InCellDropdown = True .InputTitle = "" .ErrorTitle = "" .InputMessage = "" .ErrorMessage = "" .ShowInput = True .ShowError = True End With End Sub 

这应该为您提供一些开始。 根据需要调整单元格地址,查看隐藏表单,不同数量的员工,部门,项目等。