Sumproduct状态栏VBA

时间:2018-06-22 09:39:45

标签: excel vba statusbar

这里的新手,

我正在尝试制作一个VBA代码以在状态栏中显示SumProduct

这是我插入的模块的代码:

Option Explicit
Public SrPr As Long
Public rng As Range

Sub SumProduct()

SrPr = Application.WorksheetFunction.SumProduct(rng)
Application.DisplayStatusBar = True
Application.StatusBar = "SumProduct: " & SrPr

End Sub

此后,我在Excel对象中选择了一个工作表并插入了以下内容:

Option Explicit

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Set rng = Target
Call SumProduct

End Sub

然后我继续测试我的代码,但是计算错误,单击后我得到以下错误:

运行时错误1004:无法获取WorksheetFunction类的Sumproduct属性

2 个答案:

答案 0 :(得分:0)

对于您的错误:

SUMPRODUCT在VBA中不起作用。您可以将EVALUATE与内部的字符串函数一起使用来执行计算。

所以SrPr = Application.WorksheetFunction.SumProduct(rng)这是无效的。

但是,

伪:SrPr = Evaluate("=SumProduct(...)")

有效。

注意:

SUMPRODUCT也通常意味着处理多个数组。

如果您想对rng求和,则

Application.WorksheetFunction.Sum(rng)

并且您不应该在函数后命名子对象,即不要将其称为sumproduct。例如。称为SumRange

答案 1 :(得分:0)

  1. 听起来像您不需要在这里使用Sumproduct,简单的SUM就可以了。更不用说,Sumproduct甚至不是vba方法,这将导致错误。
  2. 您选择的范围不正确。或者,更好地表达自己的观点,您的代码确实有效,但是选择本身没有意义,它将始终仅是最近更改的单元格,而不是所有单元格。从逻辑的角度看,求和单个单元格似乎没有多大意义。 我只建议更改为动态范围
  3. 请勿使用public声明临时过程变量。改为使用Dim(除非您出于某些特定原因将它们公开为您的范围)
  

在我提供的示例中,我只是汇总了工作表中所有活动的(带有值)单元格,但是可以随意将范围更改为所需的范围

Option Explicit
Private Sub sum_active_cells()
  Dim lr as Long, lc as Long
  Dim rng as Range
  lr = Sheets("Sheet1").Cells(Rows.Count, "A").End(xlUp).Row
  lc = Sheets("Sheet1").Cells(1, Columns.Count).End(xlToLeft).Row
  Set rng = Range(Cells(1, 1), Cells(lr, lc))

  Dim result as Long
  result = Application.WorksheetFunction.Sum(rng)
  Application.DisplayStatusBar = True
  Application.StatusBar = "Sumproduct: " & result

End Sub