【问题标题】:Getting the available choices in a dropdown cell in Excel using VB.NET使用 VB.NET 在 Excel 的下拉单元格中获取可用选项
【发布时间】:2020-02-27 13:44:35
【问题描述】:

我正在研究使用 VB.NET 在 Excel 中获取下拉单元格的所有可能值。基本上这是我的代码...

Dim excel As New Microsoft.Office.Interop.Excel.Application()
Dim pvw = excel.Workbooks.Open(TextBox1.Text)
Dim wb As Microsoft.Office.Interop.Excel.Workbook = pvw
Dim ws As Microsoft.Office.Interop.Excel.Worksheet = TryCast(wb.Sheets(1), Microsoft.Office.Interop.Excel.Worksheet)

'ws.Range("E9").Value is a dropdown cell and I want to loop through all the available values

wb.Close(True)
excel.Quit()
releaseObject(excel)

我只想知道下拉菜单中有哪些可能的值,以便验证数据。如何在 VB.NET 或 C# 中执行此操作?非常感谢。

【问题讨论】:

    标签: c# .net excel vb.net office-interop


    【解决方案1】:

    找出正确的 VB 代码的最简单方法通常是在源 Excel 工作表中打开宏 (VBA) 编辑器并浏览属性。这样做,我能够在具有下拉验证的范围上看到Validation 属性,并在该验证的Formula1 属性上看到源范围(在我的情况下是"=$A$1:$A$3")。因此,您可以轻松获得 range 参考:

    String source_ref = ws.Range("E9").Validation.Formula1
    

    从那里,从公式中获取范围对象并遍历其单元格以获取值。

    【讨论】:

    • @D Stanley 非常感谢您的回复。我尝试获取 source_ref 的值,这就是结果... =IF($A9"",INDIRECT(INDIRECT("Inventory!D" & MATCH(A9&C9,Inventory!A:A,0))) )。我实际上不知道如何遍历这个。你能帮我解决这个问题吗?谢谢。
    • 另外... 下拉列表的值会根据其他单元格的输入实时更新。如果我将 .NET api 用于 excel,这也会触发后台下拉值的更新,对吗?谢谢。
    • 使用Evaluate 方法计算公式并取回范围。然后获取 应该 为数组的范围的Value。至于它是否会“自动更新”,不会。您需要在更新后重新阅读源代码。
    • 您好,先生。你是这个意思吗?我有 Dim formulaRange As String = ws.Range("E9").Validation.Formula1。然后当我这样做时 ws.Evaluate(formulaRange) 我得到一个负数。这是什么意思?抱歉问了。我得到这个号码...... -2146826265。
    • @Stanley 嗨,先生。你能帮我吗?我真的被困住了:(谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-26
    • 2017-02-22
    • 2020-03-08
    • 1970-01-01
    • 2016-07-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多