wps电子表格(xlsx)在excel打开时,多余图形(shapes)的处理

背景:

  1. win10, excel 打开 wps 生成的 xlsx文档;

  2. 文档中有多余的图形,经检测为shape大类;

  3. 文档中可见的图形可以全选后删除; 但是不可见部分仍然存在;

  4. vba删除时,可以直接循环删除,类似 shape.delete;

  5. vba删除前,如果逐一选择(shape.select)以便查看,则出现多种错误(vba运行异常),但都是运行时错误

错误记录:

  1. 类型多样:用shape.name查看,有以下类别:

1)comment;在visible=false情况下,错误信息为-2147467259-自动化 (Automation) 错误

2)代表picture的长串字母-数字;

3)host control x;在visible=false情况下,错误信息为-2147024809-请求的图形已被锁定供选择

  1. 经检查,图形(shapes)中有一部分是不可见的,无法选中即不能用shape.select选择;

  2. 将不可见图形设置为可见后,则问题解决

解决思路及代码如下:

  1. 思路,倒循环, 设置为可见,删除

  2. 代码如下:

Public Sub shape_remove()

'wps xlsx文档,用excel打开后,有多余的图形(shape)出现而在wps中没有

'try to keep previous err file

If ActiveSheet.Shapes.Count = 0 Then

Debug.Print "no shapes"

End

End If

'test only

Open ActiveWorkbook.Path & "\err.txt" For Output As #1

'main

For i = ActiveSheet.Shapes.Count To 1 Step -1

Set sp = ActiveSheet.Shapes(i)

On Error Resume Next

sp.Select

Print #1, "i=" & i, "shape name:" & sp.Name

Print #1, "shape type name:" & TypeName(sp)

Print #1, "visible=" & CBool(sp.Visible)

If Err.Number <> 0 Then

Print #1, "Err:" & Err.Number & "-" & Err.Description

If sp.Visible = 0 Then

Print #1, i & " not visible."

sp.Visible = True

Print #1, "set to visible"

i = i + 1

sp.Select 'for shape details check

End If

Else

Print #1, "selected and deleted"

Selection.Delete

End If

On Error GoTo 0

Print #1, Chr(13)

Next

'test only

Close #1

End Sub

相关推荐
开开心心_Every7 小时前
发票批量打印工具支持双面预览页面方向设置
游戏·微信·pdf·华为云·excel·语音识别·googlecloud
xinlianluohan8 小时前
excel筛选背景颜色的值&拼接单元格&判断单元格是否含有中文
excel
龙之叶9 小时前
关闭WPS自动弹出登录窗
wps
SUNTON_INDUSTRY10 小时前
亲测口碑好的UPS备用电源智能锡膏柜
wps
骆驼爱记录12 小时前
Word通配符技巧:高效文档处理指南
开发语言·c#·自动化·word·excel·wps·新人首发
AI刀刀13 小时前
豆包怎么生成excel
ai·excel·豆包·deepseek·ds随心转
骆驼爱记录13 小时前
Word表格题注自动设置全攻略
开发语言·c#·自动化·word·excel·wps·新人首发
Access开发易登软件14 小时前
Access 中实现 Web 风格的顶部加载进度条
前端·数据库·vba·access·access开发
天荒地老笑话么14 小时前
Vim核心快捷键与运维实战指南
运维·vim·excel
开开心心就好1 天前
键盘改键工具免安装,自定义键位屏蔽误触
java·网络·windows·随机森林·计算机外设·电脑·excel