【问题标题】:Sumproduct Status Bar VBASumproduct状态栏VBA
【发布时间】:2018-06-22 09:39:45
【问题描述】:

这里是新手,

我正在尝试制作一个 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 属性

【问题讨论】:

  • Sumproduct 通常也意味着处理多个数组。你实际上想用 rng 做什么?你应该在一个函数之后调用一个子函数,即不要称它为 sumproduct。
  • 当您在工作表中单击并拖动选择时,我正在尝试单击并拖动选择以在状态栏中显示 Sumproduct,就像状态栏中的 Sum/Average/Count 一样
  • 我不确定你的状态栏在哪里......我的通常在下面,你似乎有编写更新的语法。你的错误是按照我下面的回答。

标签: excel vba statusbar


【解决方案1】:
  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

【讨论】:

    【解决方案2】:

    对于您的错误:

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

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

    然而,

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

    有效。

    注意:

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

    如果你想对rng求和

    Application.WorksheetFunction.Sum(rng)
    

    而且你不应该在函数之后命名子,即不要称它为 sumproduct。例如。叫它SumRange

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多