Excel for循环中的运行时错误1004

Excel for循环中的运行时错误1004,excel,sumifs,vba,Excel,Sumifs,Vba,下面的代码旨在对项目项列表执行sumif工作表函数,然后将每个项目的总现金流写入称为管道的不同工作表中 但是,工作表函数生成了一个运行时错误1004“对象范围的方法\u全局”失败 代码现在已被修改(请参见下面的答案),修复了运行时错误,但仍然没有生成所需的结果。我已经根据上一个答案修改了代码,但我认为我缺少了最后一点使其工作。为了更清楚,我附上了代码当前生成的屏幕截图: 有两件事情仍然不起作用:在工作表的B列中,我想显示源工作表中存在的项目的项目编号(在本例中,B8的值应为1、B9的值2和B1

下面的代码旨在对项目项列表执行sumif工作表函数,然后将每个项目的总现金流写入称为管道的不同工作表中

但是,工作表函数生成了一个运行时错误1004“对象范围的方法\u全局”失败

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

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

为了更清楚,这是管道表的屏幕截图:

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

    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

在你的循环中,你有一些奇怪的地方

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


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

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

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中的范围。这是因为,至少在本例中,范围的默认值是其
值,即
范围(ActiveCell.value)
。因此,除非活动单元格包含类似“A1”或“B22”的内容,否则(或范围名称)这将引发运行时错误1004。即使它确实包含这样的值,我怀疑您是否希望得到结果:)


我看不出您需要
cnt
变量,但我把它留在了代码中。

好的,谢谢;
ActiveCell
不是一个命名的范围,只是当前的活动单元格,所以我将其替换。但是,第二个建议使用偏移量现在产生了一个错误(新代码见上文)-属性的使用无效。此处。我更正了我的代码。我忘记了您使用的是
ActiveCell
,它是Range对象的特例。您不能像修改常规
Range
对象那样修改
ActiveCell
。好的,修复了它,谢谢。现在1004已经回到
Range(ActiveCell)中…
-我想知道sumif的结构是否是问题所在?在使用
ActiveCell
时,您不需要使用
Range()
。您只需执行
ActiveCell=Application.Work…
如果我的答案解决了您的问题,您可以投票/接受它!:)