ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 4165|回复: 5

求助大家:如何选择工作表中除内嵌图表以外的其他所有图形(Shapes)?

[复制链接]

TA的精华主题

TA的得分主题

发表于 2005-3-16 11:13 | 显示全部楼层 |阅读模式

下面代码无法通过,费解中。

Sub SelectNonCharts() '选中所有非图表图形

Dim Myarray() As Object i = 0 ReDim Preserve Myarray(i) Dim iObtIx As Integer, iObtCt As Integer

iObtCt = ActiveSheet.DrawingObjects.Count For iObtIx = 1 To iObtCt Set Item = ActiveSheet.DrawingObjects(iObtIx) 'MsgBox Item.Parent.Name If Not Item.Name Like "Chart*" Then i = i + 1 ReDim Preserve Myarray(i) Myarray(i) = Item End If Set Item = Nothing Next

On Error Resume Next ActiveSheet.Shapes(Myarray(i)).Select

End Sub

另外,如果想达到这个目的,还有更简单的办法吗?

tMsP52pE.rar (11.86 KB, 下载次数: 25)

TA的精华主题

TA的得分主题

发表于 2005-3-16 15:22 | 显示全部楼层
不好办,变动的产生SELECTION集比较难,用ARRAY函数只能是事先设定的,但你选择后要做什么,就在图表的所有SHAPES中枚举,判别一个就调用一次处理的子过程。

TA的精华主题

TA的得分主题

发表于 2005-3-16 15:34 | 显示全部楼层
Sub SelectNonCharts() Dim Shp As Shape For Each Shp In ActiveSheet.Shapes If Shp.Type <> msoChart Then '转向处理的程序 End If End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2005-3-16 17:04 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

有朋友这么办了:

Sub SelectNonCharts() '选中所有非图表图形 Dim shp As Shape For Each shp In ActiveSheet.Shapes If shp.Type <> msoChart Then shp.Select False End If Next End Sub

达到目的。

再谢斑竹!

TA的精华主题

TA的得分主题

发表于 2005-3-16 17:37 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

Sub Macro5() ' ' Macro5 Macro ' ºêÓÉ Tiger Chen ¼ÖÆ£¬Ê±¼ä: 2005-3-16 '

' ActiveSheet.Shapes.Range(Array("Rectangle 18", "Oval 19", "Text Box 20", _ "Rectangle 21" _ , "Text Box 22", "Rectangle 23", "Oval 24", "Text Box 25" _ , "Rectangle 26", "Text Box 27", "Rectangle 28", "Oval 29" _ , "Text Box 30", "Rectangle 31", "Text Box 32", "Rectangle 33")).Select ActiveSheet.Shapes.Range(Array("Oval 34", "Text Box 35", "Rectangle 36", _ "Text Box 37" _ , "Rectangle 38", "Oval 39", "Text Box 40", "Rectangle 41" _ , "Text Box 42")).Select False End Sub

Sub tests() ActiveSheet.Shapes.Range(Array("Rectangle 18", "Oval 19", "Text Box 20", _ "Rectangle 21" _ , "Text Box 22", "Rectangle 23", "Oval 24", "Text Box 25" _ , "Rectangle 26", "Text Box 27", "Rectangle 28", "Oval 29" _ , "Text Box 30", "Rectangle 31", "Text Box 32", "Rectangle 33", "Oval 34", "Text Box 35", "Rectangle 36", _ "Text Box 37" _ , "Rectangle 38", "Oval 39", "Text Box 40", "Rectangle 41" _ , "Text Box 42")).Select End Sub

这是我录制和修改的代码,两段代码都能正确运行,不知道为什么当图形多时,录制时需要用到Select False。实际上数组函数Array并没有这个限制。

TA的精华主题

TA的得分主题

发表于 2005-3-16 22:23 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
以下是引用FENGJUN在2005-3-16 17:04:00的发言:

有朋友这么办了:

Sub SelectNonCharts() '选中所有非图表图形 Dim shp As Shape For Each shp In ActiveSheet.Shapes If shp.Type <> msoChart Then shp.Select False End If Next End Sub

达到目的。

再谢斑竹!

谢谢提供这么好的方法,Object.Select(False)用得好!excel帮助中有这个参数,但从来就没注意到。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-12-5 10:17 , Processed in 0.049547 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表