总是听到或看到有人问,编程好学吗?如何入门?多久能学会?它能做些什么?怎么写代码呀?执行过程中出问题了谁能帮帮我...如果你也有类似的问题那就赶快关注我的公众号,一起学起来吧!
除夕钟声辞旧岁,万家灯火迎新春。愿大家新的一年,所求皆如愿,所行皆坦途,多喜乐,长安宁
言归正传,之前我们介绍了如何在Excel单元格里为文字添加“放大镜”效果
【Excel VBA编程】给Excel装上“放大镜”,让单元格内文字变大变清晰
但如果单元格内容过长,放大镜就无法完整显示所有文字。如果能实现文字在放大镜中滚动播放,这个功能将更贴合实际使用场景
接下来,详细说明如何通过VBA实现“放大镜”内文字滚动效果
1 效果展示
我们希望实现一个更加智能的文本显示效果:当单元格内的文字内容过长(例如超过7个字符)时,自动启用滚动播放功能,以便完整展示所有信息;反之,若文字内容较短,则保持静态显示,无需滚动
2 代码及说明
2.1 操作步骤
打开你的.xlsm文档
按下 Alt + F11 快捷键,打开VBA编辑器
以上操作完成后,回到Sheet1界面,此时,只需用鼠标点击或选择任意单元格,即可自动触发“放大镜”功能,如果单元格内字符超过7个,还可以看到文字滚动效果
2.2 代码实现
涉及编程知识点:
工作表事件Worksheet_SelectionChange,每当我们通过鼠标改变工作表内选定的单元格或区域时自动触发
字符串处理函数,如right、left、len等
Shape对象操作,如添加、设置属性等
参考代码如下,个别参数(Shape大小、文本长度限制、滚动快慢等)可以根据实际需要修改
Private Sub Worksheet_SelectionChange(ByVal Target As Range)' 声明变量Dim shp As shapeDim cell As RangeOn Error Resume NextSet shp = ActiveSheet.Shapes("MyLabel")On Error GoTo 0If shp Is Nothing Then' 创建放大镜shape对象,并设置其外观Set shp = ActiveSheet.Shapes.AddShape(msoShapeRoundedRectangle, 0, 0, 100, 40)shp.Name = "MyLabel"With shp.TextFrame2.VerticalAnchor = msoAnchorMiddle.TextRange.Font.Size = 24 ' 设置放大字体.TextRange.Font.NameComplexScript = "隶书".TextRange.Font.Name = "隶书".TextRange.Font.NameFarEast = "隶书".TextRange.Font.Bold = msoTrue.TextRange.Font.Fill.ForeColor.RGB = RGB(0, 0, 0) '字体颜色.WordWrap = msoFalse '单行显示,为了适应滚动效果End With'shp.Fill.ForeColor.RGB = RGB(255, 250, 235) ' 设置背景色shp.Line.ForeColor.RGB = RGB(255, 245, 215) ' 设置边框shp.Visible = msoFalse ' 初始隐藏With shp.Fill.ForeColor.RGB = RGB(255, 230, 160) '渐变效果,深到浅.OneColorGradient msoGradientHorizontal, 1, 0.5.GradientStops.Insert RGB(255, 250, 235), 0.5 ' 在中间位置添加过渡色,淡End WithEnd If' 读取选中的单元格内容输出到shape中If Target.Cells.Count > 1 Then Exit Sub '一次选中多个单元格退出程序On Error Resume NextSet shp = Me.Shapes("MyLabel")On Error GoTo 0If Not shp Is Nothing ThenSet cell = Target.Cells(1, 1)shp.TextFrame2.TextRange.Text = cell.Valueshp.Left = cell.Offset(0, 1).Leftshp.Top = cell.Topshp.Visible = msoTrue'文本长度超过7,自动显示滚动效果Do While Len(shp.TextFrame2.TextRange.Text) > 7For i = 1 To 10000DoEventsNextshp.TextFrame2.TextRange.Text = Right(shp.TextFrame2.TextRange.Text, Len(shp.TextFrame2.TextRange.Text) - 1) & Left(shp.TextFrame2.TextRange.Text, 1)LoopEnd IfEnd Sub
其中,文字滚动效果对应代码第50~55行,原理是让shape对象中的文本内容像走马灯一样,每次循环向右移动一个字符,从而实现首尾相连的滚动显示。
另外,第51行代码使用空循环进行延时的方式,对于初学者来说比较友好。其实,更专业的延时是使用 Application.Wait 方法或Windows API函数 Sleep,有能力的小伙伴可以在本公众号内通过关键字搜索这两种方式,并自行优化代码
3 结尾
最后,再次感谢大家这一年的陪伴、鼓励和支持,在这个阖家团圆的除夕夜,愿您和您的家人美满幸福
本公众号一直在不间断地分享免费的编程案例和实用技巧。无论您是用来提升自动化办公效率还是想提升自我,请关注我的公众号,解锁更多的编程知识