我构建了一个程序,该程序使用带有VB.net的Excel Interop来自动过滤大型电子表格以进行分析。最近我意识到,使用Excel的内置Sumproduct function可以实现更高的准确性和速度。但是,尽管我在VBA中成功实现了这一点,但我一直在想出如何使用Excel Interop在VB.net中进行翻译的问题。
正在使用 VBA :
Worksheets("Products").Range("A1").Formula = "=SUMPRODUCT(--('Fruit'!J:J=""" & "Apples" & """))"
无法正常运行 VB.net :(注意:我想将其分配给变量,而不是将公式应用于上述单元格。)
Product1 = WorksheetFunction.SumProduct(--(Worksheet.Range("J:J").EntireColumn.Value() = "Apple"))
此代码给出此错误:
System.InvalidCastException:'过载 解决方案失败,因为不能使用这些命令调用Public'=' 参数: '公共共享运算符=(a作为字符串,b作为字符串)作为布尔值': 匹配参数'a'的参数不能从'Object(,)'转换为'String'。'
但是,我能够做到这一点:
VBA :
Range("A1").formula = "=SUMPRODUCT(A:A,D:D)"
在 VB.net 中重写:
WorksheetFunction.SumProduct(Worksheet.Range("A1").EntireColumn, objNewSheet.Range("D1").EntireColumn)
我知道我缺少一些“基本”(双关语意味),但我只是想不通如何通过Sumproduct函数而不是Range / Range来传递Range和String。