ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[讨论] shapes与shaperange区别

[复制链接]

TA的精华主题

TA的得分主题

发表于 2009-12-23 17:26 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖已被收录到知识树中,索引项:Shape对象
PathAndFileName = ThisWorkbook.Path & "\Wmf\" & FileName
     With oRange
       ML = .Left
       MT = .Top
       MW = .Width
       MH = .Height
     End With
     ActiveSheet.Shapes.AddShape(msoShapeRectangle, ML, MT, MW, MH).Select     
     Selection.ShapeRange.Fill.UserPicture PathAndFileName

红色部分语句是图片向Range填图片的关键语句.
问:
1shapes与shaperange区别
2 要实现图片填充到Range红色部分语句的shapes与shaperange组合是不可缺少的区别

TA的精华主题

TA的得分主题

发表于 2009-12-23 17:30 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-12-23 18:30 | 显示全部楼层
这是Word对Shapes的解释.
请参以下用法:
由 Shape 对象组成的集合,这些对象代表文档中或者文档页眉和页脚中的所有图形。每个 Shape 对象代表图形层中的一个对象,诸如自选图形、任意多边形、OLE 对象或图片等。

注意 如果需要处理文档图形的一个子集(例如只处理文档中的自选图形或仅处理选定的图形),就必须创建一个 ShapeRange 集合,以用该集合包含需要处理的图形。该集合代表所选内容或区域中的所有 Shape 对象
在WORD中,可以这样使用:
新增一个图片对象(图片是图形的一种):
Set MyPicture = .Shapes.AddPicture(FileName:=strBmp, _Left:=SLT, Top:=STP, Width:=PW, Height:=PH)
新增一个文本框对象
Set MyText = .Shapes.AddTextbox(msoTextOrientationHorizontal, SLT, STP + PH, PW, 25)
Private Sub App_WindowSelectionChange(ByVal Sel As Selection)
Dim SelShape As Shape, W As Single, H As Single, Hp As Single, Ht As Single
On Error Resume Next
'判断光标所在位置或者选中的类型是否为图形
If Selection.Type = wdSelectionShape Then
'如果是图片并且选中的图片项目只有一个(注意可以用shapgerange(item)返回选中的图形(图片)项目
If Sel.ShapeRange.Type = 6 And Sel.ShapeRange.Count = 1 Then
Set SelShape = Sel.ShapeRange(1)
'以下可以对该selshape对象进行设置
http://club.excelhome.net/thread-251648-1-1.html
图形对象攻略指引
经常有朋友抱怨图形对象不好用,太少的参考代码,摆脱不掉的Selection、看不见成员列表,繁琐的代码输入、组合……,本文将围饶图形对象的使用一一给出这些问题的解决策略。
一、概述
1.什么是图形对象?
本文所述图形对象包括图片和形状,是指从EXCEL菜单-视图-工具栏中“窗体”和“绘图”工具栏向工作表中添加的对象。它们具有OLE控件相似的外观和功能,但使用方法上差别很大
''''-------------------------------
图形-Shapes
One More Great-Looking Documents Post – Shapes
又一篇关于“精美文档”的文章——图形
http://club.excelhome.net/viewth ... amp;highlight=shape
----------------------------

[ 本帖最后由 ningyong58 于 2009-12-24 07:31 编辑 ]

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-12-23 20:15 | 显示全部楼层
对象和Shape的差别
在EXCEL中"对象"是指工作表中的各种自选图形、任意多边形、OLE 对象或图片、图表、窗体、控件等,一般通过编辑-定位-定位条件中选“对象”可以对全部对象进行选择

在VBA中有一个shape对象(集合是shapes),按解释应该与工作表中的对象是一样的

但是经常在用编辑定位办法定位时提示“找不到对象”时,在VBA中用 activesheet.shapes.count时计数却不为0,也就是说工作表中存在shape对象

经测试,VBA中的shape包含了工作表中的“自动筛选”产生的下位箭头(当然包括其他命令产生下拉箭头了)、数据有效性序列产生的下接箭头等,而这些在编辑定位中是不作为“对象”的

大家不妨试一试执行以下代码即可发现 Sub shapescount() Dim n n = ActiveSheet.Shapes.Count MsgBox "共有" & n & "个shapes" End Sub 还有一个有趣的现象是:在使用自动筛选或有据有效性后,删除了自动筛选或数据有效性序列的定义,以上代码的记数并没有减少,而仍然是原来的计数结果,即并没有真正地取消,要想完全取消自动筛选或数据有效性序列的设置产生的shapes对象,看来只用VBA来解决了 Sub shapesdel() Dim sp As Shape For Each sp In ActiveSheet.Shapes sp.Delete Next sp End Sub



http://club.excelhome.net/thread-291040-3-1.html

Sub 刷新照片()
y = Range("F3")
    ActiveSheet.Shapes("Rectangle 1").Select
    Selection.ShapeRange.Fill.Transparency = 0#
    Selection.ShapeRange.Line.Weight = 0.75
    Selection.ShapeRange.Line.DashStyle = msoLineSolid
    Selection.ShapeRange.Line.Style = msoLineSingle
    Selection.ShapeRange.Line.Transparency = 0#
    Selection.ShapeRange.Line.Visible = msoTrue
    Selection.ShapeRange.Line.ForeColor.SchemeColor = 64
    Selection.ShapeRange.Line.BackColor.RGB = RGB(255, 255, 255)
    Selection.ShapeRange.Fill.Visible = msoTrue
    Selection.ShapeRange.Fill.ForeColor.RGB = RGB(255, 255, 255)
    Selection.ShapeRange.Fill.BackColor.RGB = RGB(255, 255, 255)
    Selection.ShapeRange.Fill.UserPicture y
    Range("D3").Select
End Sub

------------------------------------------
删除工作表
Sub zldccmx() '删除当前工作簿中所有工作表中的Shapes
    Set ash = ActiveSheet
    Application.ScreenUpdating = False
    For Each sh In ThisWorkbook.Sheets
        sh.Activate
        sh.Shapes.SelectAll: Selection.Delete
    Next
    ash.Activate
    Application.ScreenUpdating = True
End Sub

---------------------
http://club.excelhome.net/viewth ... amp;highlight=shape
VBA实现对shapes的条件选择,如在我的例子里面怎样实现对除了CommandButton1和CommandButton2以外所有图形的选择
Sub bb()
[a1].Select
Dim shp As Shape
For Each shp In Sheets(1).Shapes
If shp.Type <> msoOLEControlObject Then
shp.Select Replace:=False
End If
Next
End Sub
-------------------

[ 本帖最后由 ningyong58 于 2009-12-24 07:39 编辑 ]

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-12-23 20:20 | 显示全部楼层
设图片所在目录为e:\ex\,图片扩展名为jpg.
在你需要操作的表名上按鼠标右键选查看代码,将下列代码填入。然后在A1修改文件名试试。
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
On Error Resume Next
Shapes.SelectAll
Selection.ShapeRange.Delete
Range("A2").Select
Range("A2").RowHeight = 60 '定义A2的行高,磅数。
Range("A2").ColumnWidth = 12 '定义A2的列宽,标准字符数。
Shapes.AddShape(msoShapeRectangle, 0, 24, 72, 60).Select '定义图片框的左上角位置和宽度、高度。
Selection.ShapeRange.Fill.Visible = msoFalse
Selection.ShapeRange.Shadow.Obscured = msoTrue
Selection.ShapeRange.Shadow.Type = msoShadow18
Selection.ShapeRange.Fill.UserPicture "e:\ex\" & Range("A1").Value & ".jpg"
Range("A1").Select
Application.EnableEvents = True
End Sub


批量插入图片.rar (264.23 KB, 下载次数: 252)

[ 本帖最后由 ningyong58 于 2009-12-23 20:24 编辑 ]

TA的精华主题

TA的得分主题

发表于 2014-3-4 14:47 | 显示全部楼层
在EXCEL中,Shape对象是不是在没有.Select 之前,无法使用with段来简化代码?
我在测试时,一直提示:
“对象不支持该属性或方法”!

sub 测试()
   With ActiveSheet.Shapes("椭圆 1").ShapeRange.Fill
'    ActiveSheet.Shapes("椭圆 1").Select
'    With Selection.ShapeRange.Fill
        .ForeColor.SchemeColor = 10   '红色
        .Visible = msoTrue
        .Solid
    End With

end sub

TA的精华主题

TA的得分主题

发表于 2014-6-12 09:53 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2014-11-19 17:00 | 显示全部楼层
在帮助中查到了下面的资料,不知道图形类型的数字序号,求助:
应用于 Shape 和 ShapeRange 对象的 Type 属性。

返回或设置图形类型。MsoShapeType 类型,只读。

MsoShapeType 可为以下 MsoShapeType 常量之一。
msoAutoShape
msoCallout
msoCanvas
msoChart
msoComment
msoDiagram
msoEmbeddedOLEObject
msoFormControl
msoFreeform
msoGroup
msoLine
msoLinkedOLEObject
msoLinkedPicture
msoMedia  不能与此属性一同使用。该常量与其他 Microsoft Office 应用程序中的图形一同使用。
msoOLEControlObject
msoPicture
msoPlaceholder  不能与此属性一同使用。该常量与其他 Microsoft Office 应用程序中的图形一同使用。
msoScriptAnchor
msoShapeTypeMixed
msoTable
msoTextBox
msoTextEffect

expression.Type
expression      必需。该表达式返回上面的对象之一。

TA的精华主题

TA的得分主题

发表于 2018-5-9 21:28 | 显示全部楼层
本帖最后由 mnmn888 于 2018-5-9 21:34 编辑
woaicomputer 发表于 2014-3-4 14:47
在EXCEL中,Shape对象是不是在没有.Select 之前,无法使用with段来简化代码?
我在测试时,一直提示:
“ ...

Shapes("椭圆 1")是一个Shape对象,Shape对象没有ShapeRange属性,只有Shapes对象才有Range属性,并且Shapes.Range属性返回一个ShapeRange对象。你改成这样就可以
    With ActiveSheet.Shapes.Range(Array("椭圆 1")).Fill
         .ForeColor.SchemeColor = 10   '红色
        .Visible = msoTrue
         .Solid
     End With
End Sub
但是你就一个椭圆形状,不需要返回ShapeRange进行设置,直接对单个椭圆形状设置即可。
如果有3个或更多个椭圆,则可以这样写
Sub 测试()
    With ActiveSheet.Shapes.Range(Array("椭圆 1","椭圆 2","椭圆3")).Fill
         .ForeColor.SchemeColor = 10   '红色
        .Visible = msoTrue
         .Solid
     End With
End Sub
当然Selection的ShapeRange属性也可以返回ShapeRange对象,所以也可以这样写
Sub 测试()
     ActiveSheet.Shapes.SelectAll  '如果ActiveSheet仅仅有3个椭圆,并且一起设置,则可以全选,否则用上面的方法
     With Selection.ShapeRange.Fill
         .ForeColor.SchemeColor = 10   '红色
        .Visible = msoTrue
         .Solid
     End With
End Sub

TA的精华主题

TA的得分主题

发表于 2018-11-5 09:04 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
收藏学习了!
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-3-29 13:50 , Processed in 0.051194 second(s), 10 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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