【发布时间】:2014-12-05 23:54:36
【问题描述】:
我正在尝试执行这段代码。这是代码的简化版本。我已经包含了相关的代码。我正在尝试将字符串和命名范围连接到 SumIfs 公式中,但出现错误 1004“应用程序定义或对象定义错误”。我在这个问题部分上方有一行代码,除了执行 sum 函数而不是 sumif 之外,它是相似的。知道如何让这段代码执行吗?谢谢。
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:
正如一些人建议的那样,我将 .value 行更新为:
.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 需要在“”中才能正确读取公式。我硬编码了
""International Business Machines""
看看这是否会修复公式,但是一旦我重新添加“=”,我就会不断收到相同的错误。公式语法是正确的,总和范围和标准范围之间的维度是相同的。其他人有什么想法吗?
【问题讨论】:
-
我的猜测是 "ARBlock(i - 5, 1).Value" ,您引用的实际单元格是索引
-
当分配一个公式时,你应该使用
.Formula,而不是.Value那一行中发生了很多事情,所以试着把它分成多行,看看错误到底出在哪里。尝试在公式前面添加一个“'”(让单元格将其视为文本)并查看它是否正确。 -
如果您将公式构建的结果分配给一个字符串,您将能够查看它是否是一个有效的公式。首先
","" <= "" & &O30)"看起来不对。而ARBlock(i - 5, 1).Value应该是ARBlock.Cells(i - 5, 1).Value -
感谢 cmets。已更新。
-
@LeoPTY 刚刚添加了一个答案。使用 chr(34) 在您的“标准”周围加上一些引号。如果这不起作用,您可能需要在字符串前面放置一个
=。
标签: excel vba excel-formula