首页 > 解决方案 > 创建宏以删除形状时出现运行时错误“1004”

问题描述

我所做的是创建一个宏,如果存在图像,则删除一定范围内的单元格中的任何图像Range("D199:U205",然后在工作表底部复制一个名为“JB Sig”的图像,并将其粘贴到现在的空白位置床单。

当我使用宏时,我收到“运行时错误'1004':应用程序定义或对象定义错误”。当发生此错误并进行调试时,导致问题的行是If Not Intersect(Range("D199:U205"), Range(Pic.TopLeftCell, Pic.BottomRightCell)) Is Nothing Then Pic.Delete

我已经在网上给出了很多例子,但错误仍然给我带来了问题。奇怪的是,有时我得到错误,其他时候我没有,即使是 VBA 代码中的最小外观更改也可以修复它(暂时地)。所以目前宏在我的电脑上运行良好。但是,正在访问同一文件(在不同办公室)的我的同事仍然遇到运行时错误。

我对代码非常缺乏经验,我编写的任何 VBA 通常都是从某个地方复制和粘贴的,而不是让我了解自己在做什么。所以请耐心等待我的愚蠢。谢谢

我尝试通过删除我必须查看的密码来解除对 VBAProject 的保护。这没有用。我尝试将删除图像的代码更改为在线各种不同的建议,但有时我仍然遇到相同的错误。似乎有许多不同的方法可以让代码工作,但它们都容易受到运行时错误的影响。

Sub Approval_JB()
'
' Approval_JB Macro
'

'
    Dim ws As Worksheet
    Set ws = Sheets("Issue Letters")
    ws.Unprotect Password:="john123"
    Dim Pic As Object
    For Each Pic In ws.Shapes
    Dim R As Range
    Debug.Print Pic.Name
    Debug.Print Pic.TopLeftCell.Address
    Debug.Print Pic.BottomRightCell.Address
    Set R = Range(Pic.TopLeftCell, Pic.BottomRightCell)
    If Not Intersect(Range("D199:U205"), R) Is Nothing Then Pic.Delete
    Next Pic
    Range("D199:U205").ClearContents
    ws.Shapes.Range(Array("JB Sig")).Select
    Selection.Copy
    ws.Range("D201").Select
    With ws.Range("D199")
    .Value = "Yours Faithfully"
    End With
    With ws.Range("D204")
    .Value = "Joe Bloggs"
    End With
    With ws.Range("D205")
    .Value = "Engineer"
    End With
    Range("B192").Select
    ws.Protect Password:="john123"
End Sub

如上所述,它有时会起作用。但是其他时候,当我运行宏时,会出现此错误。

运行时错误“1004”:应用程序定义的或对象定义的错误

标签: excelvbaexcel-2013

解决方案


只有错误 1004 并不意味着某些特定错误,但我的猜测是在这种情况下出现错误是因为Range(Pic.TopLeftCell, Pic.BottomRightCell).

尝试这个:Range(Pic.TopLeftCell.Address & ":" & Pic.BottomRightCell.Address)


推荐阅读