spire.xls获取shape组合图形_VBA学习笔记44:VBA图⽚与图
形处理
学习资源:《Excel VBA从⼊门到进阶》第44集 by兰⾊幻想
本节来学习如何处理VBA图⽚与图形处理,⽤到的是VBA的shape对象。
Shape 对象,该对象代表⼯作表或图形⼯作表上的所有图形,它是sheets和chart的⼦对象(属性)。下表列出shape部分常⽤属性。
使⽤⽰例:获取shape的l类型。
Dim ms As Shape
Cells(k, 1) = ms.Type
Shape.Type的部分值
关于shape对象的添加、编辑、变换位置等操作,在这边就略过了。因为这部分内容太多,使⽤起来也复杂,需要⽤到时就使⽤录制宏来获取代码吧。
下⾯学三段常⽤的代码:
1. 图⽚批量导⼊
例题:在B例批量导⼊A列名称的对应图⽚。
要导⼊的图⽚
思路:插⼊图形,在图形上填充图⽚。
因为部分图⽚分辨率过⼤,直接插⼊,可能会导致⽂件很⼤。在图形上插⼊,可以控制图⽚的⼤⼩,和压缩图⽚。
提⽰:关于如何插⼊图形,可以录制⼀个插⼊图形并填充图⽚的宏,获得代码后再套上循环改写。
Sub 图⽚导⼊()
Dim S As Shape
Dim RG As Range
'删除已有图⽚
For Each S In ActiveSheet.Shapes
If S.Type <> 8 Then            '有插⼊⼀个窗体控件指定宏
S.Delete                  '把不是窗体控件的shape(图⽚、图形等)清除
End If
Next S
'导⼊图形
For Each RG In Range("B2:B5")
'插⼊矩形msoShapeRectangle,它的左边距、顶点、宽度、⾼度都引⽤RG单元格的
ActiveSheet.Shapes.AddShape(msoShapeRectangle, RG.Left, RG.Top, RG.Width, RG.Height).Select    'RG单元格左边单元格填写了图⽚名称,填充对应图⽚到矩形⾥。
Selection.ShapeRange.Fill.UserPicture "C:" & RG.Offset(0, -1) & ".jpg"
Next RG
End Sub
运⾏⽰例(逐步展⽰导⼊图⽚,实际⽤时其实是⼀秒多):
2. 批量插⼊复选框
例题:在B例批量导⼊复选框。
提⽰:先录制⼀个插⼊复选框的宏,获得代码后再套上循环改写。
Sub 批量插⼊复选框()
Dim RG As Range
Dim S As Shape
'删除已有复选框
For Each S In ActiveSheet.Shapes
If InStr(S.Name, "Ch") > 0 Then      '复选框的名称是Check box
S.Delete
End If
Next S
'批量插⼊复选框
For Each RG In Range("B2:B15")
'插⼊复选框CheckBoxes,它的左边距、顶点、宽度、⾼度都引⽤RG单元格的    ActiveSheet.CheckBoxes.Add(RG.Left, RG.Top, RG.Width, RG.Height).Select
'复选框的⽂本为“是”,值为空,链接的单元格是RG的位置
With Selection
.Characters.Text = "是"
.Value = xlOff
.LinkedCell = RG.Address
End With
'把RG单元格的字体颜⾊变成⽩⾊,否则打勾会显⽰True和False
RG.Font.ThemeColor = xlThemeColorDark1
Next RG
End Sub
运⾏⽰例(逐步批量插⼊复选框,实际⽤时不过1秒多):
3. 连线
例题:把相同内容的单元格连线起来。
Sub 连线()
Dim rg1 As Range, rg2 As Range, rg3 As Range, rg4 As Range
Dim S As Shape
Dim RG As Range
'删除已有线条
For Each S In ActiveSheet.Shapes
If S.Type = 9 Then
S.Delete
End If
vba自学好学吗Next S
'连线
Set rg1 = Range("B1")
Set rg2 = Range("B2")
Set rg3 = Range("C2")
Set rg4 = Range("C1")
'控制起点和终点,起点为B列单元格的左边线中点,终点为C列单元格的左边线中点
'没有右边线的说法,所以不能把起点设为A列单元格的右边线中点
ActiveSheet.Shapes.AddLine(rg1.Left, rg1.Top + rg1.Height / 2, rg3.Left, rg3.Top + rg3.Height / 2).Select
Selection.ShapeRange.Line.EndArrowheadStyle = msoArrowheadTriangle
ActiveSheet.Shapes.AddLine(rg2.Left, rg2.Top + rg2.Height / 2, rg4.Left, rg4.Top + rg4.Height / 2).Select
Selection.ShapeRange.Line.EndArrowheadStyle = msoArrowheadTriangle
End Sub
运⾏⽰例(逐步进⾏连线,实际⽤时不超1秒):
⼩结
这些例题都⽐较简单,尤其第三道,只是想把⼏个可能常⽤到的实例介绍出来,要想把它们化为⼰⽤的话肯定要改写⼀下,如果需要⽤到没讲的功能就使⽤录制宏来获取代码吧,不细讲了~
这⼏天有看视频的,就是不知道该怎么做笔记了,因为有些内容也没听太明⽩,后⾯可能还会慢更(
捂脸……让我想想该怎么做之后的笔记会⽐较好……

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。