1

以下代码用于在项目项目列表上执行 sumif 工作表函数,然后将每个项目的总现金流量写入名为 Pipeline 的不同工作表上。

但是,工作表函数生成了运行时错误 1004“方法 '范围对象 '_Global' 失败。

代码现在已被修改(见下面的答案),它修复了运行时错误,但仍然没有产生预期的结果。我已经根据最后一个答案自己修改了代码,但我认为我错过了最后一点以使其工作。为了更清楚,我附上了代码当前生成的屏幕截图:

在此处输入图像描述

两件事仍然不起作用:在工作表的 B 列中,我想显示源工作表上存在的项目的项目编号(在此示例中,B8 应具有值 1、B9 值 2 和 B10 值 3 为三个项目)。然后,当没有更多项目要汇总时,H 列中的总和列表应该停止,而不是返回值 0。

为了更清楚,这是 Pipeline 工作表的截图:

在此处输入图像描述

请问有什么帮助吗?新代码如下:

    Sub Write_Pipeline()
    'Sums up revenue of each project in the Input section to display expected cash flow
    Dim ip As Worksheet, pl As Worksheet, Start As Range, Length As Integer, Cnt As Integer, PH As Integer
    Dim SelectRange As Excel.Range
    Dim SumRange As Excel.Range
    Dim cell As Excel.Range

    Set ip = Worksheets("Input")
    Set pl = Worksheets("Pipeline")
    Set Start = pl.Range("B8")
    Start = 1
    Cnt = 1
    Length = 151
    Set SelectRange = ip.Range("B26:B151")
    Set SumRange = ip.Range("Y26:Y151")

    For Each cell In pl.Range("H8").Resize(Length)
        cell.Value = Application.WorksheetFunction.SumIf(SelectRange, Start, SumRange)
        PH = Start.Value
        Start = Start.Offset(1, 0)
        Start = PH + 1
    Next cell
End Sub
4

2 回答 2

1

在您的循环中,您有一些奇怪之处。

“ActiveCell”实际上是一个命名范围吗?如果是这种情况,那么命名范围的名称就会令人困惑(相对于什么是活动的?)。如果不是这种情况,则应将其替换为ActiveCell. 您可以省略该.Value部分。

您想使用ActiveCell.Offset(1, 0).Select将活动单元格向下移动一行。

于 2013-06-30T19:22:54.947 回答
1

我用声明的所有变量重写了你的代码。此代码还消除了使用 Select 和 Activate 命令,这是一个好主意:

Sub Write_Pipeline()
Dim ip As Worksheet, pl As Worksheet, Start As Range, Length As Integer, Cnt As Integer
Dim SelectRange As Excel.Range
Dim SumRange As Excel.Range
Dim cell As Excel.Range

Set ip = Worksheets("Input")
Set pl = Worksheets("Pipeline")
Set Start = pl.Range("B8")
Start = 1
Cnt = 1
Length = 151
Set SelectRange = ip.Range("B26:B151")
Set SumRange = ip.Range("Y26:Y151")

For Each cell In pl.Range("H8").Resize(Length)
    cell.Value = Application.WorksheetFunction.SumIf(SelectRange, Start, SumRange)
Next cell
End Sub

为了将来参考,请注意Range(ActiveCell)尝试引用名称或地址在 ActiveCell 中的范围。这是因为,至少在这种情况下,范围的默认值是它的Value,即Range(ActiveCell.Value)。因此,除非活动单元格包含“A1”或“B22”(或范围名称)之类的内容,否则将引发运行时错误 1004。即使它确实包含这样的值,我怀疑你是否喜欢结果:)。

我看不到您需要该cnt变量,但我将其留在了代码中。

于 2013-06-30T20:12:31.080 回答