总是听到或看到有人问,编程好学吗?如何入门?多久能学会?它能做些什么?怎么写代码呀?执行过程中出问题了谁能帮帮我...如果你也有类似的问题那就赶快关注我的公众号,一起学起来吧!
在VBA开发中,Shapes是一个容器对象,其范围非常广,除了图片,还包含自选图形、文本框、图表、控件等多种元素
那么,大家有没有想过如何让一个图形动起来?比如,像时钟上的指针一样旋转
以下是模拟的秒针运动轨迹,每秒转动一格,1分钟内刚好走完一圈,效果如下
那么,它的实现原理是什么呢?其实并没有想象的那么复杂,就是利用的是Shape对象的Rotation方法
2.1 操作步骤
- 选择 “插入” -> “模块”,将文中代码复制粘贴到新模块中
- 按F5键执行宏mainPro,就可以得到能自动旋转的秒针了
如法炮制分针和时针,再加一个带有刻度的圆盘,恭喜你,获得了独一无二的数字钟表
2.2 代码参考
主程序代码,按F5键可执行代码,主要作用是通过时间控制图形旋转
Sub mainPro() Dim shp1 As Shape Call addShaps Set shp1 = ActiveSheet.Shapes("myshape") For i = 1 To 100 shp1.Rotation = shp1.Rotation + 6 '在原有基础上旋转6° Pause_T 1 '暂停1秒 Next iEnd Sub
1号子程序代码,主要是为了设置暂停时间,虽然此处n变量类型是Double,但Timer最小分辨单位是0.01秒(10毫秒),设置的太小,如小于0.01无效
Function Pause_T(n As Double) '暂停n秒,期间可以进行其他操作 t = Timer While Timer < t + n DoEvents WendEnd Function
2号子程序代码,主要实现的功能是在工作表中添加一张组合的矩形图片,名称为myshape
Sub addShaps() Dim ws As Worksheet Dim shpTop As Shape, shpBottom As Shape, shpGroup As Shape Dim topPos As Double, leftPos As Double ' 设置目标工作表和起始位置 Set ws = ActiveSheet leftPos = ws.Range("F6").Left ' 左侧起始位置 topPos = ws.Range("F6").Top ' 顶部起始位置 Set shpTop = ws.Shapes.AddShape(msoShapeRectangle, _ Left:=leftPos, _ Top:=topPos, _ Width:=14.17, _ Height:=85.05) With shpTop .Name = "TopRectangle" With .Fill .ForeColor.RGB = RGB(255, 192, 20) ' 背景色浅黄 .Visible = msoTrue End With With .Line .ForeColor.RGB = RGB(255, 192, 20) ' 边框 .Visible = msoTrue End With End With ' 计算下面矩形的顶部位置:上面矩形顶部 + 上面矩形高度 Set shpBottom = ws.Shapes.AddShape(msoShapeRectangle, _ Left:=leftPos, _ Top:=topPos + shpTop.Height, _ Width:=14.17, _ Height:=85.05) With shpBottom .Name = "BottomRectangle" With .Fill .Visible = msoFalse ' 设置为无填充色 End With With .Line .ForeColor.RGB = RGB(255, 255, 255) .Weight = 1.5 .Visible = msoTrue End With End With Set shpGroup = ws.Shapes.Range(Array(shpTop.Name, shpBottom.Name)).Group shpGroup.Name = "myshape" ' 将组合形状命名为"myshape"End Sub
大家可能会有疑问:为何要添加两个矩形图,还要组合在一起?是不是多此一举呢?
使用 Shape.Rotation 方法时,图形默认围绕自身中心旋转,无法模拟秒针绕一端转动的效果
而此处将两个矩形组合在一起,一个设置成浅黄作为指针,而另一个设置透明背景作为不可见的“旋转轴。通过旋转整个组合图形,即可实现指针绕其一端旋转的动画效果了
由此可见,本期的难度不在于编码,而在于图形的设计上
好了,今天的编程知识到此结束了,又到了每日分享小知识的时间了
今天分享的是一个物品“埃尼阿克”:历史上第一台通用电子计算机,它非常庞大,占地约170平方米,长度达到30.48米,宽度为6米,高度为2.4米,总重量相当于六头成年大象的重量。对比现在的计算机,是不是很难想象呢
本公众号一直在不间断地分享免费的编程案例和实用技巧。无论您是用来提升自动化办公效率还是想提升自我,请关注我的公众号,解锁更多的编程知识