2014-12-05 146 views
1

我试图让这段代码执行。这是代码的简化版本。我已经包含了相关的代码。我试图将字符串和命名范围连接成一个SumIfs公式,但是我得到错误1004“应用程序定义或对象定义的错误”。我在这个问题部分的上面有一行代码,它与sum函数的例外情况相似,而不是sumif。任何想法如何让这个代码执行?谢谢。在VBA中连接SumIfs

Dim wb As Workbook 
Dim ara As Worksheet 
Dim inv As Worksheet 
Dim ARBlock As Range 
Dim Invoices As Range 
Dim AgedDays As Range 

Set wb = ThisWorkbook 
Set ara = wb.Sheets("AR Aging") 
Set inv = wb.Sheets("Invoices") 
Set ARBlock = ara.Range("a6") 
Set Invoices = inv.Range("a6", inv.Range("a6").End(xlDown)) 
Set AgedDays = Invoices.Offset(0, 6) 

'Populate A/R age buckets 
For i = 6 To ARBlock.Rows.Count + 6 
    With ARBlock(i - 5, 1).Offset(0, 3) 
     .Value = "=SumIfs(" & Invoices.Offset(0, 4).Address & "," & _ 
        Invoices.Address & "," & ARBlock(i - 5, 1).Value & "," & _ 
        Invoices.Offset(0, 6).Address & ","" <= "" & &O30)" 
    End With 
Next i 

End Sub 

以“.value”开头的行是我收到错误消息的地方。 P.S .:我需要单元格包含级联公式,而不是输出值。

更新1:

至于有些人建议我更新了。价值线:

.Offset(0, 3).Formula = "=SumIfs(Invoices.Offset(0, 4).Address,Invoices.Address,ARBlock.cells(i - 5, 1).Value)" 

我仍然得到同样的错误。我已经完成了一些审计:

在“Sumifs”之前删除“=”可让代码正常运行;将公式粘贴到目标单元格中​​作为文本。在这种形式下,我的输出i = 1进入ARBlock.cells(1,1),正如它应该的那样。

我还使用Debug.Print查看所有配方的组成部分:

Debug.Print ARBlock.Cells(i - 5, 1).Address 
'output $A$6 
Debug.Print ARBlock.Cells(i - 5, 1).Value 
' output International Business Machines 
Debug.Print Invoices.Offset(0, 4).Address 
'output $E$6:$E$255 
Debug.Print Invoices.Address 
'output $A$6:$A$255 

我怀疑问题可能是该尺寸范围可能已经关闭,但这种情况并非如此。我的下一个怀疑是输出的国际商用机器需要在公式中才能正确读取它。我在

""International Business Machines"" 

硬编码,看看这是否会解决这个公式,但我不断收到同样的错误,一旦我添加“=”回。公式语法是正确的,尺寸之和相同范围和标准范围。任何人有任何想法?

+0

我的猜测是“ARBlock(i - 5,1).Value”,您引用的实际单元格是索引<= 0? – Larry 2014-12-05 07:22:18

+0

当分配一个公式时,应该使用'.Formula',而不是'.Value'。该行中有很多事情要做,所以请尝试将它分隔成多行,并查看错误的真实位置。尝试在公式的前面添加“'”(让单元格将其视为文本)并查看它是否正确。 – 2014-12-05 07:26:38

+0

如果您将公式生成的结果分配给一个字符串,您将能够看到它是否是一个有效的公式。开始'“,”“<=”“&&O30)”'看起来不正确。并且'ARBlock(i - 5,1).Value'应该是'ARBlock.Cells(i - 5,1).Value' – 2014-12-05 07:54:20

回答

0
.Offset(0, 3).Formula = "=SumIfs(Invoices.Offset(0, 4).Address,Invoices.Address,ARBlock.cells(i - 5, 1).Value)" 

更改为构建它:

.Offset(0, 3).Formula = "=SumIfs(" & Invoices.Offset(0, 4).Address & ", " & Invoices.Address & ", " & chr(34) & ARBlock.Cells(i - 5, 1).Value & chr(34) & ")" 

编辑:添加报价chr(34)在你的串!

+0

工作就像一个魅力。谢谢! – LeoPTY 2014-12-08 21:35:56

-1

ARBlock(i - 5, 1).Value最有可能是一个空细胞,这打乱了SUMIFS公式,因为它与连续的逗号