实例需求:某预测模型有4个输入参数,使用过程中需要依次分别加载4组不同的参数,参数组位于工作表中的第4行到第7行,并且在A列中添加了四个窗体控件按钮,单击某个按钮,希望将相应行的数据(一组参数)加载到第2行单元格中。
对于略有VBA基础的人来说,解决这个问题并不难,每个按钮写一个事件代码,将相应行的四个参数拷贝(写入)到第2行单元格中,但是如果要求四个按钮共用同一个事件代码,那么如何实现这个需求呢?

示例代码如下。
Sub LoadParameters()
Dim s As Shape
For Each s In ActiveSheet.Shapes
If s.Type = msoFormControl Then
If Replace(s.Name, "Button", "按钮") = Application.Caller Then
[b2].Resize(1, 4).Value = s.TopLeftCell.Offset(0, 1).Resize(1, 4).Value
End If
End If
Next
End Sub
【代码解析】
可以使用Shapes对象集合循环遍历工作表中的Shape,并根据其类型来定位窗体控件按钮。
第3~9行代码用于循环遍历工作表中的Shape对象。
第4行代码根据Type属性识别窗体控件。
窗体控件按钮的Name属性是Button x的形式,Application.Caller返回调用此事件过程的控件名称,其值为按钮 x的形式,因此第5行代码需要使用Replace函数进行替换,进而确定被点击按钮控件。
第6行代码中,使用控件的TopLeftCell属性返回按钮所在单元格,然后将该行的参数写入到第2行的单元格中。
只要使用按钮控件的指定宏功能,关联LoadParameters过程,然后单击按钮,就可以加载相应的参数组。

灵活使用对象的属性与方法通常可以简化VBA代码过程。
本文介绍了一种在Excel中使用VBA代码,通过单个事件处理函数实现在不同按钮间切换并加载特定参数组的方法。利用Shape对象和窗体控件按钮的特性,将参数从工作表指定行复制到目标行,适用于需要快速切换模型输入参数的场景。
1807

被折叠的 条评论
为什么被折叠?



