【问题标题】:Sumproduct Worksheetfunction producing "run time error 13" type mismatchSumproduct Worksheetfunction 产生“运行时错误 13”类型不匹配
【发布时间】:2014-07-22 10:15:36
【问题描述】:

我尝试在我的宏中使用以下 sumproduct 函数:

=SUMPRODUCT(--(LEN('Data Weekly Classic'!B:B)>1))-1

数据表,以及用于搜索更改的列,所以我使用变量。

我的代码:

Public commentsheet As Worksheet
Public commentcolumn As String
Public commentcell As String
Public rownumber As Integer

Private Sub Workbook_Open()
Set commentsheet = ThisWorkbook.Sheets("Data Weekly Classic")
commentcolumn = Application.WorksheetFunction.VLookup(Sheet4.Range("A2").Value, Sheet8.Range("P1:Q8"), 2, 0)
rownumber = 2
commentcell = commentcolumn & rownumber
End Sub

Sub broken()
Dim commentstotalrange As String
commentstotalrange = commentcolumn & ":" & commentcolumn
Sheet4.Range("D13").Value = Application.WorksheetFunction.SumProduct(--(WorksheetFunction.Len(commentsheet.Range(commentstotalrange) > 1)) - 1)
End Sub

知道为什么我会收到错误 13:此行的类型不匹配吗?:

Sheet4.Range("D13").Value = Application.WorksheetFunction.SumProduct(--(WorksheetFunction.Len(commentsheet.Range(commentstotalrange) > 1)) - 1)

首先我把它写成:

Sheet4.Range("D13").Value = Application.WorksheetFunction.SumProduct(--(Len(commentsheet.Range(commentstotalrange) > 1)) - 1)

在“LEN”之前没有工作表函数。它产生了同样的错误。我在“LEN”之前添加了工作表函数,因为我想,也许我必须告诉 VBA LEN 也是 excel LEN 函数。但是错误并没有改变。

【问题讨论】:

  • 您可以尝试使用Evaluate[...] 代替Application.WorksheetFunction 吗?

标签: vba excel


【解决方案1】:

你可以使用:

Sheet4.Range("D13").Value = Application.WorksheetFunction.Countif(commentsheet.Range(commentstotalrange), "??*") - 1

如果单元格包含文本。

【讨论】:

  • 非常感谢,这样就完成了!所以我想我没有做错什么,VBA 只是在使用那个 excel 公式时遇到了问题?
  • 您不能像在 VBA 中那样将数组传递给 sumproduct - 您必须使用 Evaluate 并传递实际的公式字符串(只要它少于 255 个字符)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多