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

时间:2017-06-30 17:27:55

标签: vb.net excel-interop

我正在编写一些代码来从测试结果文件中提取数据,并将数据汇总到excel文件中有意义的位中,因为每个最终都能查看数据的人都表现出色。

我将数据列在文件中的表格中,其中A到M是数据,U到AB是汇总表。 B列保存了格式为YYMM的测试年份和月份,而L列保存测试是否通过或未通过" PASS"或"失败"我正在尝试执行下面的代码,我使用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

它抛出了一种模棱两可的例外:

  

未处理的类型' System.Runtime.InteropServices.COMException'发生在mscorlib.dll中附加信息:WorksheetFunction类的CountIfs方法失败*

我正在使用此数据并在我尝试使用countifs()之上和之下成功使用其他工作表函数,因此我知道工作簿和工作表已正确声明和初始化。我担心在countifs()

的使用方面我可能只缺少一些关键信息

1 个答案:

答案 0 :(得分:1)

来自documentation

  

每个附加范围必须具有相同的行数和列数   criteria_range1参数。范围不必相邻   彼此。

变化:

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

为:

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