我正在使用现代Excel滚动条(不是旧的ActiveX类型,即开发人员>插入>表单控件>滚动条),并且想要检测它的值何时更改。我找不到关于此类对象的更改事件的任何信息。您可以在点击时分配宏,但我希望我的代码在滚动上运行。
我已尝试将其链接到隐藏工作表上的单元格,并使用隐藏工作表的工作表更改事件但事件不会触发。我也尝试过没有成功的Workbook_SheetChange事件。
如何为非ActiveX滚动条模拟On_Scroll事件?感谢。
答案 0 :(得分:3)
因此,您按照所描述的菜单路径(开发人员>插入>表单控件>滚动条),您可以将滚动条“绘制”到电子表格中。然后右键单击滚动条并选择“指定宏”:
请注意,滚动条的左上角有一个名称 - “滚动条1”。将建议使用宏名称 - 您可以保留该名称,然后单击“新建”:
现在您可以编写VBA代码了。目前尚不清楚最佳实践是什么才能获得对该特定滚动条对象的引用。我在下面的方式是:
Shape
以及表单控件,我们可以从Application.Caller
ScrollBars
类的Worksheet
成员,直到我们找到匹配的对象Value
属性以获取滚动条中拇指的当前位置请注意,ScrollBars
类的Worksheet
成员是“隐藏的”,如果您转到VBE对象浏览器,右键单击“搜索结果”并选择“显示”即可看到它隐藏成员然后搜索ScrollBars
。 Google为此提供的内容很少,因为显然排名较高的搜索都是关于Excel中的常规滚动条,或者是您在UserForm
中使用的滚动条。无论如何,适合我的代码是:
Option Explicit
Sub ScrollBar1_Change()
Dim strCaller As String
Dim objScrollBar As Object
Dim dblScrollValue As Double
' the scroll bar has a shape - so you can get the shape name
strCaller = Application.Caller
' iterate hidden scrollbars member of worksheet class to get the object
For Each objScrollBar In Sheet1.ScrollBars
If objScrollBar.Name = strCaller Then
Exit For
End If
Next
' get the scroll bar value
dblScrollValue = objScrollBar.Value
' do something with the value
MsgBox dblScrollValue
End Sub
答案 1 :(得分:0)
我是这样处理的。通过将值公开插入链接的单元格(具有它已有的值),将触发Change事件。
Private Sub ScrollBar11_Change()
Range(ScrollBar11.LinkedCell) = ScrollBar11.Value
End Sub