实例需求:工作表中有多个Button控件(工作表Form控件)和一个ScrollBar控件(工作表ActiveX控件,名称为ScrollBar2),需要实现如下图所示效果。点击ScrollBar控件实现按钮的滚动效果,实际工作表中Button控件个数不确定。
首先设置ScrollBar控件属性。
- 依次单击Excel 【开发工具】选项卡>【设计模式】按钮
- 鼠标右击ScrollBar控件,在弹出的快捷菜单中,选择【属性】命令
- 在弹出的【属性】对话框中修改相关属性,如下图中K列和L列表格所示。
ScrollBar控件Change事件代码如下。
Private Sub ScrollBar2_Change()
Dim btn As Button, i As Long, j As Long
Dim iLoc As Long, iTop As Long, iVal As Long
Const TOP_GAP = 10
Const BTN_GAP = 3
Application.ScreenUpdating = False
iVal = Me.ScrollBar2.Value
For i = 1 To Me.Buttons.Count
If i > iVal Then
If i = iVal + 1 Then
iTop = TOP_GAP
Else
With Me.Buttons(i - 1)
iTop = .Top + .Height + BTN_GAP
End With
End If
Me.Buttons(i).Top = iTop
End If
Me.Buttons(i).Visible = (i > iVal)
Next i
Application.ScreenUpdating = True
End Sub
【代码解析】
第4行代码设置常量TOP_GAP,为首个可见Button控件的上边距(控件上端与表格区域上边界的距离)。
第5行代码设置常量BTN_GAP,为两个相邻Button控件间的距离。
第6行代码禁止屏幕更新。
第7行代码获取ScrollBar控件的当前值(0~100)。
第8~20行代码循环处理工作表中的全部Button控件。
第9行代码判断Button控件编号是否大于ScrollBar控件的值。
例如ScrollBar控件的值为2,由于ScrollBar控件的步长设置1,说明用户点击两次下箭头,因此需要隐藏前两个Button控件,本示例中可见Button控件为第3个到第6个,下面代码实现这个效果。
第10行代码判断是否为当前变量Button控件是否个首个可见控件。
如果满足条件,第11行代码其上边距为TOP_GAP。
如果不满足条件,第13~15行代码根据其上一个可见控件的位置和控件尺寸(高度)计算上边距。如果所有Button控件都是相同尺寸,那么此处也可以直接计算每个控件的上边距。
第17行代码设置Button控件的Top属性。
第19行代码设置Button控件的Visible属性,隐藏无关控件。
第21行代码恢复屏幕更新。