首页 > 解决方案 > 工作代码返回运行时错误“-2147352571 (80020005)”

问题描述

和这里的许多其他人一样,我是 VBA 的新手,试图在我的新工作中做出一些不错的 QOL 改进。

因此,我尝试添加一个按钮来扩展一个小表格(虽然没有格式化为表格)并保留格式和公式。我实际上成功了(至少一点点)并且按钮按预期工作。因此,令我惊讶的是,当我在 VBA 编辑器中运行代码时,它给了我“运行时错误 '-2147352571 (80020005)'”

正如您可能理解的那样,我不喜欢这样,并且想在将电子表格发送给目标用户之前解决它。

我的代码如下:

Sub Name_of_code ()
    Dim b As Object, cs As Integer
    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 Sub

桌子看起来像这样。它是一张用于显示采购订单的小桌子。用作触发器的对象只是从 excel 图标中插入的图标。

在此处输入图像描述

我在第 3 行 (" ) 收到错误Set b = ActiveSheet......。这是调试结果的图片:

在此处输入图像描述

我真的无法弄清楚,问题是什么。

请帮我 :)

提前致谢

编辑:我已经意识到我应该澄清它是否是一个交叉帖子,所以:这也是 mrexcel.com 上的一个交叉帖子。(抱歉给您带来不便) https://www.mrexcel.com/board/threads/vba-code-working-but-giving-run-time-error-2147352571-80020005.1184681/#post-5771449

标签: excelvba

解决方案


你检查过 的值Application.Caller吗?由于它是由图标触发的,它可能不会返回形状的名称,因此ActiveSheet.Shapes()无法返回Shape对象。尝试这个:

Dim b As Shape, cs As Integer, callingShape As String

On Error Goto ErrHandler

callingShape = Application.Caller
Debug.Print "Application.Caller: "; callingShape

If callingShape = "<Insert right name here>" 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
    
Else
    MsgBox callingShape & " doesn't appear to be a Shape."
End If

ErrExit:
    On Error Goto 0
    Exit Sub

ErrHandler:
    MsgBox "Error # " & CStr(Err.Number) & ", " & Err.Description & " occured."
    Err.Clear
    Resume ErrExit

推荐阅读