如何在Excel中以编程方式创建下拉框?

时间:2009-09-25 08:55:06

标签: excel

我有一张电子表格,在sheet1中有一个下拉列表。任何人都可以告诉我如何在同一张电子表格的sheet3中下拉,假设它有三张名为sheet1,sheet2和sheet3的工作表。该计划如下所示。

  Range("A1").Select

  With Selection.Validation

    .Delete

    .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _

    xlBetween, Formula1:="=$B$1:$B$3"/*Guess i need to make some change in this*/

    .IgnoreBlank = True

    .InCellDropdown = True

    .InputTitle = ""

    .ErrorTitle = ""


    .InputMessage = ""

    .ErrorMessage = ""

    .ShowInput = True

    .ShowError = True

  End With

非常感谢

4 个答案:

答案 0 :(得分:2)

使用锚定义dynamic named range作为返回记录集的插入点。

然后,在您希望获得下拉列表的单元格中,键入=(命名范围的名称) - 下拉选项将是从数据库查询返回的任何内容。

示例:

使用公式=OFFSET(Sheet1!$B$1,0,0,COUNTA(Sheet1!$B$1:$B$20),1)

将命名范围定义为“Options1”

设置数据库查询以将结果返回到单元格B1

选择单元格A1并打开验证对话框(数据>验证)

选择列表,然后输入=Options1作为来源

以上可以使用

以编程方式完成
ActiveWorkbook.Names.Add Name:="Options1", RefersTo:="=OFFSET(Sheet1!$B$1,0,0,COUNTA(Sheet1!$B$1:$B$20),1)"

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

答案 1 :(得分:0)

当您使用基本Excel函数录制宏来下拉(数据>验证,然后选择允许:列表)时,您可以查看生成的代码并根据自己的喜好进行编辑。您可以在之后重复使用该代码。

答案 2 :(得分:0)

从$ B $ 1:$ B $ 3中创建一个“命名范围”然后使用公式中的命名范围。如果您不想使用命名范围,请在公式中指定工作表名称,如= Sheet1!$ B $ 1:$ B $ 3.

有关在工作簿中命名单元格的帮助,请参阅“在工作簿中命名单元格”帮助主题,并查看“命名单元格或一系列单元格”部分。

答案 3 :(得分:0)

如果您用于填充下拉列表的数据存在于每张工作表上,则可以选择每个工作表并添加验证。请参阅下面的代码。

Sub Dropdowns1()

With Worksheets("Sheet1").Range("A1").Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
        xlBetween, Formula1:="=$B$1:$B$3"
End With

With Worksheets("Sheet3").Range("A1").Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
        xlBetween, Formula1:="=$B$1:$B$3"
End With

End Sub

如果用于填充下拉列表的数据仅存在于 sheet1 上,则需要首先创建一个引用数据的命名范围,然后使用命名范围来填充下拉列表。

下面的代码创建了一个命名范围 MyList ,它指的是 Sheet1 B1:B3 的范围。然后,它使用 Sheet1 Sheet3 上的命名范围来打印下拉列表。

Sub Dropdowns2()

ActiveWorkbook.Names.Add Name:="MyList", RefersTo:="=Sheet1!$B$1:$B$3"

With Worksheets("Sheet1").Range("A1").Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
        xlBetween, Formula1:="=MyList"
End With

With Worksheets("Sheet3").Range("A1").Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
        xlBetween, Formula1:="=MyList"
End With

End Sub