公式在VBA中不起作用

时间:2014-10-24 14:50:49

标签: excel vba debugging reference formula

在我录制的宏中,我将另一个工作簿中的公式复制到新工作簿中,因为我希望宏在单元格中插入此公式。虽然这个公式在那个时刻起作用,但我不能使用Marco,因为它导致了一个错误。

我认为问题可能是公式中另一个工作表的引用(settings.xlsm)。谁能告诉我如何解决这个问题?代码如下:

Sub Macro4()
'
' Macro4 Macro
'

'
    Rows("2:2").Select
Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
Range("I3").Select
ActiveCell.FormulaR1C1 = _
    "=IF(AND([@Staffnumber]=R[-1]C[-7],OR(AND([@start1]<=settings.xlsm!R4C2,MONTH([@start1]<MONTH(settings.xlsm!R4C2))),[@start1]>=settings.xlsm!R4C2,MONTH([@end1]>MONTH(settings.xlsm!R4C2)))),DATE(YEAR(R[-1]C[-5]),MONTH(R[-1]C[-5]),DAY(R[-1]C[-5]+1)),IF(AND([@Staffnumber]<>R[-1]C[-7],OR(MONTH([@start1])<MONTH(settings.xlsm!R4C2),YEAR([@start1])<YEAR(settings.xlsm!R4C2))" & _
    "F(AND([@Staffnumber]<>R[-1]C[-7],OR(MONTH([@end1])>MONTH(settings.xlsm!R4C2),YEAR([@end1])>YEAR(settings.xlsm!R4C2))),DATE(YEAR(R[-1]C[-5]),MONTH(R[-1]C[-5]),1),DATE(YEAR(RC[-5]),MONTH(RC[-5]),1))))"
Columns("I:I").Select
Selection.NumberFormat = "ddmmmyyyy ""00:00"""
Range("J11").Select
End Sub    

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

戴夫是对的。公式中的每个工作簿参考都没有正确编写。

来自microsoft的参考资料,介绍如何从工作簿公式引用外部工作簿。 http://office.microsoft.com/en-us/excel-help/create-an-external-reference-link-to-a-cell-range-in-another-workbook-HP010102338.aspx

=====

外部参考

= SUM([Budget.xlsx]年度C10:C25)

当源未打开时,外部参考包括整个路径。

外部参考

= SUM( 'C:\报告[Budget.xlsx]年度'!C10:C25)

================
请注意格式:“= 功能名称('路径'[工作簿] 工作表 '!单元 / 范围)“
注意:撇号,括号,括号和感叹号非常重要。

这实际上并没有引用任何内容:“ settings.xlsm!R4C2

假设运行此宏时“ settings.xlsm ”已打开,那么如果在中引用名为“ Sheet1 ”的工作表,则以下公式将起作用settings.xlsm

“=([settings.xlsm] Sheet 1中!R4C2)”

我建议这样做:
您的问题显然与公式有关。我建议你一块一块地分解它。确保公式的每个元素都具有公式之外的有效评估。然后再次慢慢构建公式,一次添加一个元素。

例如:

1. [@Staffnumber]=R[-1]C[-7]
2. [@start1]<=settings.xlsm!R4C2
3. [@start1]<MONTH(settings.xlsm!R4C2)

等,

然后慢慢构建最终将在最终公式中使用的每个子公式

1. [@Staffnumber]=R[-1]C[-7]
2. @start1]<=settings.xlsm!R4C2
3. MONTH([@start1]<MONTH(settings.xlsm!R4C2)
4. AND([@start1]<=settings.xlsm!R4C2,MONTH([@start1]<MONTH(settings.xlsm!R4C2))
5. AND([@Staffnumber]=R[-1]C[-7],OR(AND([@start1]<=settings.xlsm!R4C2,MONTH([@start1]<MONTH(settings.xlsm!R4C2))),[@start1]>=settings.xlsm!R4C2,MONTH([@end1]>MONTH(settings.xlsm!R4C2))))