VB.Net:在Excel单元格中插入数据验证

时间:2017-07-06 16:49:45

标签: excel vb.net

我正在尝试以编程方式将下拉框添加到Excel工作表中的单元格。举一个非常简单的例子,我只想让下拉框选择“是”或“否”。谷歌搜索之后,听起来我可以通过在单元格上插入数据验证来轻松地完成此任务。

我正在寻找一个如何做到这一点的例子。我发现的所有例子都已过时,过于复杂,或者在VB.Net中没有。当我说太复杂时,我的意思是这不是一个简单的“是”“否”的情况。他们在不同的工作表中使用实际列。

2 个答案:

答案 0 :(得分:2)

我遇到了同样的问题,并尝试将其标记为解决方案。发布的代码实际上不起作用 - 尝试添加验证时会引发异常。

经过一些实验,我发现如果先选择范围,然后将验证添加到选择中,它将正常工作。

Dim xlRng As Excel.Range = xlWorksheet.Cells(1, 1)
xlRng.select   ' this line added
With xlApp.selection.Validation    ' change range to selection
    .Add(Type:=Excel.XlDVType.xlValidateList, _
         AlertStyle:=Excel.XlDVAlertStyle.xlValidAlertStop, _
         Operator:=Excel.XlFormatConditionOperator.xlBetween, _
         Formula1:="Yes,No")
    .IgnoreBlank = True
    .InCellDropdown = True
End With

答案 1 :(得分:1)

如果您只想要一个简单的in-cell yes / no下拉列表,您只需要声明一个范围并为其添加验证规则。微软有关于here的一些文档,但与大多数互操作文档一样,它有点稀疏...所以这里有一个片段显示如何添加验证列表:

    'Imports Microsoft.Office.Interop.Excel

    Dim xlApp As New Excel.Application
    xlApp.Visible = True
    Dim xlWorkbooks As Excel.Workbooks = xlApp.Workbooks
    Dim xlWorkbook As Excel.Workbook = xlWorkbooks.Add
    Dim xlWorksheet As Excel.Worksheet = CType(xlWorkbook.Worksheets(1), Excel.Worksheet)

    Dim xlRng As Excel.Range = xlWorksheet.Cells(1, 1)
    With xlRng.Validation
        .Add(Type:=Excel.XlDVType.xlValidateList, _
             AlertStyle:=Excel.XlDVAlertStyle.xlValidAlertStop, _
             Operator:=Excel.XlFormatConditionOperator.xlBetween, _
             Formula1:="Yes,No")
        .IgnoreBlank = True
        .InCellDropdown = True
    End With

    System.Runtime.InteropServices.Marshal.ReleaseComObject(xlRng)
    System.Runtime.InteropServices.Marshal.ReleaseComObject(xlWorksheet)
    System.Runtime.InteropServices.Marshal.ReleaseComObject(xlWorkbook)
    System.Runtime.InteropServices.Marshal.ReleaseComObject(xlWorkbooks)
    System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApp)