公式在VBA中不起作用

在我logging的macros中,我将另一个工作簿中的公式复制到新的公式中,因为我希望macros将此公式插入到单元格中。 虽然这个公式在那个时候起作用,但是我不能使用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 

感谢您的帮助!

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

关于如何从工作簿公式引用外部工作簿的微软参考文献。 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)

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

外部参考

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

================
请注意格式: “= FunctionName (' Path '[ Workbook ] Worksheet '! Cell / Range )”
注:撇号,括号,括号和感叹号非常重要。

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

假设运行这个macros时“ settings.xlsm ”是打开的,那么如果下面的公式在“ settings.xlsm ”中引用名为“ Sheet1 ”的工作表,

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

我build议这样做:
你的问题显然是与公式。 我build议你一个一个地分解它。 确保公式中的每个元素在公式外都有一个有效的评估。 然后慢慢build立公式,每次添加一个元素。

例如:

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

等等。,

然后慢慢地build立你最终将在最终公式中使用的每个子公式

 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))))