ExcelVBA常用技巧第04章shape及Chart对象.docx
- 文档编号:7789176
- 上传时间:2023-01-26
- 格式:DOCX
- 页数:36
- 大小:266.32KB
ExcelVBA常用技巧第04章shape及Chart对象.docx
《ExcelVBA常用技巧第04章shape及Chart对象.docx》由会员分享,可在线阅读,更多相关《ExcelVBA常用技巧第04章shape及Chart对象.docx(36页珍藏版)》请在冰豆网上搜索。
ExcelVBA常用技巧第04章shape及Chart对象
VBA常用技巧
VBA常用技巧1
第4章Shape(图形)、Chart(图表)对象2
技巧1在工作表中添加图形2
技巧2导出工作表中的图片7
技巧3在工作表中添加艺术字9
技巧4遍历工作表中的图形11
技巧5移动、旋转图片13
技巧6工作表中自动插入图片14
技巧7固定工作表中图形的位置17
技巧8使用VBA自动生成图表19
技巧9使用独立窗口显示图表23
技巧10导出工作表中的图表24
技巧11多图表制作25
第4章Shape(图形)、Chart(图表)对象
技巧1在工作表中添加图形
如果需要在工作表中添加图形对象,可以使用AddShape方法,如下面的代码所示。
#001SubAddShape()
#002DimmyShapeAsShape
#003OnErrorResumeNext
#004Sheet1.Shapes("myShape").Delete
280,
#005SetmyShape=Sheet1.Shapes.AddShape(msoShapeRectangle,40,120,
30)
#006
WithmyShape
#007
.Name="myShape"
#008
With.TextFrame.Characters
#009
.Text="
单击将选择
Sheet2!
#010
With.Font
#011
.Name="
华文行楷"
#012
.FontStyle="
常规”
#013
.Size=22
#014
.ColorIndex=7
#015
EndWith
#016
EndWith
#017
With.TextFrame
#018
.HorizontalAlignment
=-4108
#019
.VerticalAlignment=-4108
#020
EndWith
#021
.Placement=3
#022
EndWith
#023
myShape.Select
#024
WithSelection.ShapeRange
#025
With.Line
#026
.Weight=1
#027
.DashStyle=msoLineSolid
#028
.Style=msoLineSingle
#029
.Transparency=0
#030
.Visible=msoTrue
#031
.ForeColor.SchemeColor=40
#032
.BackColor.RGB=RGB(255,255,255)
#033
EndWith
#034
With.Fill
#035
.Transparency=0
#036
.Visible=msoTrue
#037
.ForeColor.SchemeColor=41
#038
.OneColorGradient1,4,0.23
#039
EndWith
#040
EndWith
#041
Sheet1.Range("A1").Select
#042
Sheet1.Hyperlinks.AddAnchor:
=myShape,Address:
="",_
#043
SubAddress:
="Sheet2!
A1",ScreenTip:
="
选择Sheet2!
"
#044
SetmyShape=Nothing
#045
EndSub
代码解析:
AddShape过程在工作表中添加一个矩形并设置其外观等属性。
第2行代码声明变量myShape的对象类型。
第3、4行代码删除可能存在的名称为"myShape”的图形对象。
第5行代码使用AddShape方法在工作表中添加一个矩形。
当该方法应用于Shapes
对象时,返回一个Shape对象,该对象代表工作表中的新自选图形,语法如下:
expression.AddShape(Type,Left,Top,Width,Height)
参数expression是必需的,返回一个Shapes对象。
参数Type是必需的,指定要创建的自选图形的类型。
参数Left和Top是必需的,以磅为单位给出自选图形边框左上角的位置。
参数Width和Height是必需的,以磅为单位给出自选图形边框的宽度和高度。
第7行代码将新建图形命名为"myShape”,向Shapes集合添加新的图形时,将对新
添加的图形赋以默认的名称,若要为图形指定更有意义的名称,可指定其Name属性。
第8行到第16行代码为矩形添加文字,并设定其格式。
其中第8行代码使用TextFrame属性和Characters方法返回该矩形的字符区域。
应用于Shape对象的TextFrame属性返回一个TextFrame对象,该对象包含指定图形对象的对齐和定位属性;Characters方法返回一个Characters对象,该对象代表某个图形的文本框中的字符区域,语法如下:
expression.Characters(Start,Length)
参数expression是必需的,返回一个指定文本框内Characters对象的表达式。
参数Start是可选的,表示将要返回的第一个字符,如果此参数设置为1或被忽略,
则Characters方法会返回以第一个字符为起始字符的字符区域。
参数Length是可选的,表示要返回的字符个数。
如果此参数被忽略,则Characters方
法会返回该字符串的剩余部分(由Start参数指定的字符以后的所有字符)。
第9行代码为矩形添加文字,应用于Characters对象的Text属性返回或设置对象的文
本,为可读写的String类型。
第10行到第15行代码设置矩形中文字的属性,应用于Characters对象Font属性返回一个Font对象,该对象代表指定对象的字体属性(字体名称、字体大小、字体颜色等),
第11行代码设置字体名称,第12行代码设置字体样式,第13行代码设置字体大小,第14行代码颜色。
第17行到第20行代码设定矩形中文字的对齐方式。
应用于TextFrame对象的
HorizontalAlignment属性返回或设置指定对象的水平对齐方式,可为表格1-1所示的
XlHAlign常量之一。
常量
值
描述
xlHAlignCenter
-4108
居中
xlHAIignCenterAcrossSelection
7
靠左
xlHAIignDistributed
-4117
分散对齐
xlHAlignFill
5
分散对齐
xlHAlignGeneral
1
靠左
xlHAlignJustify
-4130
两端对齐
xlHAlignLeft
-4131
靠左
xlHAlignRight
-4152
靠右
表格1-1HorizontalAlignment属性的XlHAlign常量
应用于TextFrame对象的VerticalAlignment属性返回或设置指定对象的垂直对齐方式,可为表格1-2所示的XlHAlign常量之一。
常量
值
描述
xlVAlignCenter
-4108
居中
xlVAlignJustify
-4130
两端对齐
xlVAlignBottom
-4107
靠下
xlVAIignDistributed
-4117
分散对齐
xlVAlignTop
-4160
靠上
表格1-2VerticalAlignment属性的XlHAlign常量
Shape对象的Placement
1-3所示的XlPlacement
第21行代码设置矩形大小和位置不随单元格而变,应用于属性返回或设置对象与所在的单元格之间的附属关系,可为表格吊量之一。
常量
值
描述
xlFreeFloating
3
大小、位置均固定
xlMove
2
大小固定、位置随单元格而变
xlMoveAndSize
1
大小、位置随单元格而变
表格1-3XlPlacement常量
第24行到第32行代码设置矩形的边框线条格式,应用于ShapeRange集合的Line属
性返回一个LineFormat对象,该对象包含指定图形的线条格式属性。
其中第26行代码设置矩形线条粗细,第27行代码设置矩形线条的虚线样式,第28行
代码设置矩形填充的透明度,第29行代码设置矩形为可见,第30行代码设置矩形的前景
色,第31行代码设置矩形填充背景的颜色。
第33行到第38行代码设置矩形的内部填充格式,应用于ShapeRange集合的Fill属
性返回FillFormat对象,该对象包含指定的图表或图形的填充格式属性。
其中第35行代码设置矩形内部的透明度,第36行代码设置矩形内部为可见,第37行
代码设置矩形内部的前景色,第38行代码将矩形内部指定填充设为单色渐变,应用于
FillFormat对象的OneColorGradient方法将指定填充设为单色渐变,语法如下:
expression.OneColorGradient(Style,Variant,Degree)
其中参数Style是必需的,底纹样式,可为表格2-1所示的MsoGradientStyle常量之
。
常量
值
描述
msoGradientDiagonalDown
4
斜下
msoGradientDiagonalUp
3
斜上
msoGradientFromCenter
7
无
msoGradientFromCorner
5
角部幅射
msoGradientFromTitle
6
中心幅射
msoGradientHorizontal
1
水平
msoGradientMixed
-2
无
msoGradientVertical
2
垂直
表格1-4MsoGradientStyle常量
参数Variant是必需的,渐变变量。
取值范围为1到4之间,分别与填充效果”寸话
框中“渐变”选项卡的四个渐变变量相对应。
如果GradientStyle设为msoGradientFromCenter,贝UVariant参数只能设为1或2。
参数Degree是必需的,灰度。
取值范围为0.0(表示最深)到1.0(表示最浅)之间。
第42、43行代码为矩形对象添加超链接,应用于Hyperlinks对象的Add方法向指定
的区域或图形添加超链接,语法如下:
expression.Add(Anchor,Address,SubAddress,ScreenTip,TextToDisplay)
参数expression是必需的,返回一个Hyperlinks对象。
参数Anchor是必需的,超链接的位置。
可为Range对象或Shape对象。
参数Address是必需的,超链接的地址。
参数SubAddress是必需的,超链接的子地址。
参数ScreenTip是可选的,当鼠标指针停留在超链接上时所显示的屏幕提示。
参数TextToDisplay是可选的,要显示的超链接的文本。
运行AddShape过程结果如图1-1所示。
丄1
B
C
G
1
二
匚
1-
10
11
12
13
14
15
图1-1在工作表中添加图形
技巧2导出工作表中的图片
有时需要将工作表中的图形对象保存为单独的图像文件,
可以使用
Export方法将工作
表中的图片以文件形式导出,如下面的代码所示。
#001SubExportShp()
#002
DimShpAsShape
#003
DimFileNameAsString
#004
ForEachShpInSheet1.Shapes
#005
IfShp.Type=msoPictureThen
#006
FileName=ThisWorkbook.Path&"\"&Shp.Name&".gif"
#007
Shp.Copy
#008
WithSheet1.ChartObjects.Add(0,
0,Shp.Width
+28,Shp.Height
+30).Chart
#009
.Paste
#010
.ExportFileName,"gif"
#011
.Parent.Delete
#012
EndWith
#013
EndIf
#014
Next
#015
EndSub
代码解析:
ExportShp过程将Sheetl工作表的所有图片以文件形式导出到同一目录中。
第4行代码使用ForEach...Next语句遍历Sheetl工作表中的所有图形。
第5行代码判断图形的类型是否为图片,应用于Shape对象的Type属性返回或设置
图形类型,可以为表格2-1所示的MsoShapeType常量之一。
常量
值
说明
msoShapeTypeMixed
-2
混合型图形
msoAutoShape
1
自选图形
msoCallout
2
没有边框线的标注
msoChart
3
图表
msoComment
4
批注
msoFreeform
5
任意多边形
msoGroup
6
图形组合
msoFormControl
8
窗体控件
msoLine
9
线条
msoLinkedOLEObject
10
链接式或内嵌OLE对象
msoLinkedPicture
11
剪贴画或图片
msoOLEControlObject
12
ActiveX控件
msoPicture
13
图片
msoTextEffect
15
艺术字
msoTextBox
17
文本框
msoDiagram
21
组织结构图或其他图示
表格2-1MsoShapeType常量
第6行代码使用字符串变量FileName记录需导出图形的路径和名称。
第7行代码复制图形,应用于Shape对象的Copy方法将对象复制到剪贴板。
第8行代码使用Add方法在工作表中添加一个图表,应用于Chartobjects对象的Add方法创建新的嵌入图表,语法如下:
expression.Add(Left,Top,Width,Height)
参数expression是必需的,返回一个ChartObjects对象。
参数Left、参数Top是必需的,以磅为单位给出新对象的初始坐标,该坐标是相对于工
作表上单元格A1的左上角或图表的左上角的坐标。
参数Width、参数Height是必需的,以磅为单位给出新对象的初始大小。
第9行代码使用Paste方法将图形粘贴到新的嵌入图表中,应用于Chart对象的Paste
方法将剪贴板中的图表数据粘贴到指定的图表中,语法如下:
expression.Paste(Type)
参数expression是必需的,返回一个Chart对象。
参数Type是可选的的,如果剪贴板中有图表,本参数指定要粘贴的图表信息。
可为以
下XlPasteType常量之一:
xlFormats、xlFormulas或xlAll。
默认值为xlAll,如果剪贴板中是数据不是图表,则不能使用本参数。
第10行代码使用Export方法将图表导出到同一目录中,应用于Chart对象的Export方法以图形格式导出图表,语法如下:
expression.Export(Filename,FilterName,Interactive)
其中参数Filename是必需的,被导出的文件的名称。
第10行代码删除新建的图表。
因为Chart对象是不能使用Delete方法直接删除的,应
先使用Parent属性返回指定对象的父对象,然后使用Delete方法删除。
技巧3在工作表中添加艺术字
在工作表中插入艺术字,可以使用AddTextEffect方法,如下面的代码所示。
#001SubTextEffect()
#002
DimmyShapeAsShape
#003
OnErrorResumeNext
#004
Sheet1.Shapes("myShape").Delete
#005
SetmyShape=Sheet1.Shapes.AddTextEffect_
#006
(PresetTextEffect:
=msoTextEffect15,_
#007
Text:
="我爱ExcelHome",FontName:
="宋体",FontSize:
=36,_
#008
FontBold:
=msoFalse,Fontltalic:
=msoFalse,_
#009
Left:
=100,Top:
=100)
#010
WithmyShape
#011
.Name="myShape"
#012
With.Fill
#013
.Solid
#014
.ForeColor.SchemeColor=55
#015
.Transparency=0
#016
EndWith
#017
With.Line
#018
.Weight=1.5
#019
.DashStyle=msoLineSolid
#020
.Style=msoLineSingle
#021
.Transparency=0
#022
.ForeColor.SchemeColor=12
#023
.BackColor.RGB=RGB(255,255,255)
#024
EndWith
#025
EndWith
#026
SetmyShape=Nothing
#027EndSub
代码解析:
TextEffect过程在工作表中插入艺术字并设置其格式。
第3、4行代码删除工作表中可能存在的艺术字,以免重复添加。
第5行到第9行代码使用AddTextEffect方法在工作表中插入艺术字,AddTextEffect
方法创建艺术字对象。
返回一个Shape对象,该对象代表新建的艺术字对象,语法如下:
参数expression是必需的,返回一个Shapes对象。
参数PresetTextEffect是必需的,艺术字预置文本效果,可为MsoPresetTextEffect常
量之一,等同于在工作表中插入艺术字时的样式选项卡,如图3-1所示。
图3-1艺术字样式
参数Text是必需的,艺术字对象中的文字。
参数FontName是必需的,艺术字对象中所用的字体名称。
参数FontSize是必需的,以磅为单位给出艺术字对象中所用的字体大小。
参数FontBold是必需的,在艺术字中要加粗的字体。
参数FontItalic是必需的,在艺术字中要倾斜的字体。
参数Left和参数Top是必需的,相对于文档的左上角、顶部,以磅为单位给出艺术字对象边框左上角的位置。
第11行代码将艺术字对象重命名为"myShape”。
第12行到第16行代码设置艺术字对象的填充格式。
其中第13行代码将填充格式设置
为均一的颜色,应用于FillFormat对象的Solid方法将指定的填充格式设置为均一的颜色,可用本方法将带有渐进色、纹理、图案或背景的填充格式转换为单色的填充格式。
第14行
代码设置填充的颜色。
第15行代码设置填充的透明度。
第17行到第24行代码设置艺术字对象的线条格式属性。
其中第18行代码设置线条粗
细,第19行代码设置线条虚线样式,第20行代码设置线条区域的样式,第21行代码设置线条的透明度,第22行代码设置前景色,第23行代码设置填充背景的颜色。
运行TextEffect过程工作表中如图3-2所示。
技巧4遍历工作表中的图形
工作表中的多个图形,如果使用系统缺省名称,如“文本框1”、“文本框2”这样前面
是固定的字符串,后面是序号的,可以使用For…Next语句遍历图形,如下面的代码所示。
#001SubErgShapes_1()
#002DimiAsInteger
#003Fori=1To4
#004Sheet1.Shapes("文本框"&i).TextFrame.Characters.Text=""
#005Next
#006EndSub
代码解析:
ErgShapes_1过程清除工作表中四个图形文本框中的文字。
第3行到第5行代码,使用Shapes属性在工作表上的三个图形文本框中循环。
Shapes属性返回Shapes对象,代表工作表或图形工作表上的所有图形,可以使用Shapes(index)返回单个的Shape对象,其中index是图形的名称或索引号。
返回单个的Shape对象后使用TextFrame属性和符,关于Shape对象的TextFrame属性和Characters
Characters方法清除文本框中的子
方法请参阅技巧1。
如果图形的名称没有规律,可以使用ForEach…Next语句循环遍历所有图形,根据
Type属性返回的图形类型进行相应的操作,如下面的代码所示。
#001
SubErgShapes_2()
#002
DimmyShapeAsShape
#003
DimiAsInteger
#004
i=1
#005
ForEachmyShapeInSheet1.Shapes
#006
IfmyShape.Type=msoTextBoxThen
#007
myShape.TextFrame.Characters.Text="
这是第"&i&"个文本框"
#008
i=i+1
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ExcelVBA 常用 技巧 04 shape Chart 对象