excel - 创建宏以删除形状时出现运行时错误“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”:应用程序定义的或对象定义的错误
解决方案
只有错误 1004 并不意味着某些特定错误,但我的猜测是在这种情况下出现错误是因为Range(Pic.TopLeftCell, Pic.BottomRightCell)
.
尝试这个:Range(Pic.TopLeftCell.Address & ":" & Pic.BottomRightCell.Address)
推荐阅读
- java - SSL环境下的SpringBoot+Eureka+CloudConfig
- angular - 角度服务 - 对象不可分配给数组
- regex - 使用“sed”删除包含某些内容的行和下一行
- angular - docker-compose 中的 Angular js 6 405(不允许的方法)
- excel - 在excel中的字符之间提取和复制文本
- mysql - MySQL - 获取坐标la/lon
- php - NodeJS:原始二进制中的哈希 sha512(从 PHP 转换)
- python - 如何统一脸部的颜色和纹理
- algorithm - 创建从根连接有向图的最小边数
- amazon-web-services - 无法通过 AWS 配置文件担任角色