Excel VBA写入COUNTIF公式报错问题求助
问题解决:Excel VBA写入COUNTIF公式触发错误
针对你遇到的AddPlacedFormula宏写入公式报错、写入普通值正常的问题,可从以下几个方向排查解决:
1. 修正公式字符串的语法错误
检查公式字符串的转义写法,VBA中字符串内的双引号需要用两个双引号转义,你原代码里的公式末尾多了一个双引号,导致语法错误。正确写法应为:
WS.Range("J1").Formula = "=COUNTIF(O9:O67, ""Placed"")"
或FormulaR1C1版本:
WS.Range("J1").FormulaR1C1 = "=COUNTIF(R[8]C[5]:R[66]C[5], ""Placed"")"
2. 关闭事件触发避免循环调用
写入公式会触发Worksheet_Calculate事件,导致宏被反复调用进而触发错误。在写入公式前后临时关闭并重新启用事件:
Sub AddPlacedFormula() Dim WS As Worksheet Set WS = ThisWorkbook.Sheets("Sheet1") ' 或用Set WS = Sheet1(工作表代码名称,更稳定) Application.EnableEvents = False ' 临时关闭事件触发 WS.Range("J1").Formula = "=COUNTIF(O9:O67, ""Placed"")" Application.EnableEvents = True ' 恢复事件触发 End Sub
3. 确保工作表引用准确
优先使用工作表的代码名称(在VBA编辑器属性窗口查看,默认如Sheet1)而非显示名称,避免因工作表重名或修改名称导致引用失效:
Set WS = Sheet1 ' 比Set WS = ThisWorkbook.Sheets("Sheet1")更可靠
4. 加入错误捕获定位具体问题
如果仍报错,添加错误捕获代码查看具体错误信息,便于精准排查:
Sub AddPlacedFormula() On Error GoTo ErrHandler Dim WS As Worksheet Set WS = Sheet1 Application.EnableEvents = False WS.Range("J1").Formula = "=COUNTIF(O9:O67, ""Placed"")" ExitSub: Application.EnableEvents = True Exit Sub ErrHandler: MsgBox "错误代码:" & Err.Number & vbCrLf & "错误描述:" & Err.Description Resume ExitSub End Sub
内容的提问来源于stack exchange,提问作者MattTT
相关产品推荐
相关产品推荐

