当前位置:首页>java>【Excel VBA编程】图形操作:给你的图形加点“旋”律吧

【Excel VBA编程】图形操作:给你的图形加点“旋”律吧

  • 2026-08-25 20:07:50
【Excel VBA编程】图形操作:给你的图形加点“旋”律吧
“Shape对象操作”

总是听到或看到有人问,编程好学吗?如何入门?多久能学会?它能做些什么?怎么写代码呀?执行过程中出问题了谁能帮帮我...如果你也有类似的问题那就赶快关注我的公众号,一起学起来吧!

在VBA开发中,Shapes是一个容器对象,其范围非常广,除了图片,还包含自选图形、文本框、图表、控件等多种元素

那么,大家有没有想过如何让一个图形动起来?比如,像时钟上的指针一样旋转

效果展示

以下是模拟的秒针运动轨迹,每秒转动一格,1分钟内刚好走完一圈,效果如下 

那么,它的实现原理是什么呢?其实并没有想象的那么复杂,就是利用的是Shape对象的Rotation方法

操作步骤及代码

2.1 操作步骤

    • 打开你的.xlsm文件

    • 按下 Alt + F11 快捷键,打开VBA编辑器

    • 选择 “插入” -> “模块”,将文中代码复制粘贴到新模块中
    • 按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米,总重量相当于六头成年大象的重量。对比现在的计算机,是不是很难想象呢

本公众号一直在不间断地分享免费的编程案例和实用技巧。无论您是用来提升自动化办公效率还是想提升自我,请关注我的公众号,解锁更多的编程知识

最新文章

随机文章