在 VB.net 中正确使用 worksheetfunction.countifs

proper use of worksheetfunction.countifs in VB.net

我正在编写一些代码以从测试结果文件中提取数据,并在 excel 文件中以有意义的位汇总数据,因为最终可能会查看数据的每个人都有excel.

我在文件中的 sheet 中列出了数据,其中 A 到 M 是数据,U 到 AB 是摘要 table。 B 列包含测试发生的年份和月份,格式为 YYMM,L 列包含测试是通过还是失败 "PASS" 或 "FAIL" 我正在尝试执行下面的代码使用 dateitem,在我下面的示例中,它是 2017 年 1 月,作为代表 B 列的范围的标准,并使用 "F*" 作为代表 L

列的范围的标准
Imports Microsoft.Office.Interop.Excel

Dim xlapp As Application = New Application()
Dim xlworkbook As Workbook
Dim xlworksheet As Worksheet
dim last_row as integer

with xlworksheet   

    last_row = .Cells(.Rows.Count, "A").End(XlDirection.xlUp).row

    Dim year_month_range As Range
    Dim pf_range As Range

    year_month_range = .Range(.Cells(2, 2), .Cells(last_row, 2))
    pf_range = .Range(.Cells(2, 2), .Cells(last_row, 12))

    Dim dateitem as integer
    dateitem = 1701

    .Cells(j, 27) = xlapp.WorksheetFunction.CountIfs(year_month_range, dateitem, pf_range, "F*")
end with

它抛回了一种模棱两可的异常:

An unhandled exception of type 'System.Runtime.InteropServices.COMException' occurred in mscorlib.dll Additional information: CountIfs method of WorksheetFunction class failed*

我正在使用此数据并使用其他 Worksheet 函数在我尝试使用 countifs() 的上方和下方成功,所以我知道工作簿和 worksheet 已声明并且正确初始化。我担心可能只是缺少一些关于使用 countifs()

的关键信息

来自documentation

Each additional range must have the same number of rows and columns as the criteria_range1 argument. The ranges do not have to be adjacent to each other.

变化:

pf_range = .Range(.Cells(2, 2), .Cells(last_row, 12))

至:

pf_range = .Range(.Cells(2, 12), .Cells(last_row, 12))