Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel VBA公式-1004对象或应用程序定义错误_Vba_Excel - Fatal编程技术网

Excel VBA公式-1004对象或应用程序定义错误

Excel VBA公式-1004对象或应用程序定义错误,vba,excel,Vba,Excel,我正在添加一个宏,允许用户更改单元格中的公式。 以下是添加到模块的代码: Sub OverrideCharge() title = "Override Total Labor Cost" 'Ask user if they want to override overrideMsg = MsgBox("Override Total Labor Cost with 4-Hour Minimum Charge?", vbYesNo, title) If overrideMsg = vbYes Th

我正在添加一个宏,允许用户更改单元格中的公式。 以下是添加到模块的代码:

Sub OverrideCharge()

title = "Override Total Labor Cost"

'Ask user if they want to override
overrideMsg = MsgBox("Override Total Labor Cost with 4-Hour Minimum Charge?", vbYesNo, title)
If overrideMsg = vbYes Then
    Sheets("Totals").Activate
    Range("L25").Formula = "=SUM(IF(MOD(ROW(INDIRECT(""L11:L""&ROW()-1)),2)=1,INDIRECT(""L11:L""&ROW()-1),0)))"
Else: overrideMsg = vbNo
    Exit Sub
End If

End Sub

我在定义
范围(“L25”).公式时出错。我不知道这是语法错误还是我引用的工作表/单元格不正确。

您需要对引号和括号进行排序,应该是:

Range("L25").Formula = "=SUM(IF(MOD(ROW(INDIRECT(""L11:L""&(ROW()-1))),2)=1,INDIRECT(""L11:L""&(ROW()-1)),0))"

在处理长而复杂的公式时,我喜欢添加一个FormulaString变量来帮助我调试(这样我可以更好地了解错误的来源)

此外,无需
激活
工作表(“总计”)
,然后将公式放入单元格L25中,您可以直接使用
工作表(“总计”).Range(“L25”).formula进行操作

我自己的偏好是,我喜欢使用
Chr(34)
,而不是开始计算我需要多少
,或者

代码

Sub OverrideCharge()

Dim FormStr As String
Title = "Override Total Labor Cost"

'Ask user if they want to override
overrideMsg = MsgBox("Override Total Labor Cost with 4-Hour Minimum Charge?", vbYesNo, Title)
If overrideMsg = vbYes Then
    ' use a String for Formula to help debug it (before trying to put it inside a cell)
    FormStr = "=SUM(IF(MOD(ROW(INDIRECT(" & Chr(34) & "L11:L" & Chr(34) & "&ROW()-1)),2)=1,INDIRECT(" & Chr(34) & "L11:L" & Chr(34) & "&ROW()-1),0))"
    Debug.Print FormStr '<-- for debug only
    Sheets("Totals").Range("L25").Formula = FormStr
Else
    overrideMsg = vbNo
    Exit Sub
End If

End Sub
Sub-OverrideCharge()
Dim FormStr作为字符串
Title=“覆盖总人工成本”
'询问用户是否要覆盖
overrideMsg=MsgBox(“以4小时最低收费覆盖总人工成本?”,vbYesNo,标题)
如果覆盖EMSG=vbYes,则
'使用公式字符串帮助调试它(在尝试将其放入单元格之前)
FormStr=“=SUM(如果(MOD(行(间接)(&Chr(34)和“L11:L”&Chr(34)和“&ROW()-1)),2)=1,间接(&Chr(34)和“L11:L”&Chr(34)和“&ROW()-1),0))”

Debug.Print FormStr“手动将公式输入单元格时公式是否有效?请尝试使用
Range(“L25”)。公式=“=SUM(如果(MOD(ROW(INDIRECT(L11:L&ROW()-1)),2)=1,INDIRECT(L11:L&ROW()-1),0))”
谢谢。原始公式作为实际的Excel公式工作,但我不知道它需要为VBA编辑一点。