可正常运行的VBA代码在编辑器执行时报-2147352571(80020005)错误如何解决
VBA报错问题解决
报错根因
你遇到的报错属于正常开发场景的调试类报错,完全不影响终端用户点击按钮使用:Application.Caller 仅在宏被工作表内的触发对象(你插入的内置图标、按钮、形状等)调用时,才会返回触发对象的名称。直接在VBA编辑器中手动运行宏时,没有对应的工作表调用来源,Application.Caller 会返回错误值,此时将它作为参数去查找Shapes集合就会触发类型不匹配错误,对应报错号run-time error '-2147352571 (80020005)'。
修复方案
如果需要避免编辑器调试时报错,可以给代码加一层调用来源判断,修改后代码如下:
Sub Name_of_code () Dim b As Object, cs As Integer ' 先判断是否为工作表对象触发调用 If TypeName(Application.Caller) = "String" Then Set b = ActiveSheet.Shapes(Application.Caller) With b.TopLeftCell.EntireRow.Offset(-2, 0) .Insert .Cells(1, 2).Copy .Cells(0, 2) .Cells(1, 3).Copy .Cells(0, 3) .Cells(1, 4).Copy .Cells(0, 4) End With End If End Sub
如果需要在编辑器中调试逻辑,可以临时指定你插入的图标名称来测试,比如你的图标默认名称是Graphic 1,可以在调试时把Set b那行改成Set b = ActiveSheet.Shapes("Graphic 1"),调试完成后改回原逻辑即可。
内容的提问来源于stack exchange,提问作者Asbjørn
相关产品推荐
相关产品推荐

