为两个控件编写一个代码?例如两个CommandButton

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为两个控件编写一个代码?例如两个CommandButton相关的知识,希望对你有一定的参考价值。

在我的userform中,有CommandButton1,2,3,4,5,6 ........它们都执行相同的任务。例如:Range("A1").value = "Good"

问题出现了,有什么办法可以为所有这些代码编写一个代码吗?

如果答案是肯定的,我可以制作范围变量吗?例如:CommandButton1:range(“A1”)。value =“Good”,CommandButton2:range(“A2”)。value =“Good”。

非常感谢你的回复。

答案

VBA没有复杂的事件模型。相反,您可以创建并调用一个公共子过程,传递子需要确定其结果的特定参数:

Private Sub CommandButton1_Click()
    Call Clicker("A1")
End Sub

Private Sub CommandButton2_Click()
    Call Clicker("A2")
End Sub

Private Sub Clicker(sRange As String)
    'MsgBox sRange
    Range(sRange).Value = "Good"
End Sub

参数不必是字符串,它可以是Range

或者,值“A1”等可以作为表单的属性进行存储和检索(而不是将其作为参数传递)。

一种可能的替代方法是检查ActiveControl,然后相应地表现:

Private Sub Clicker()
    MsgBox ActiveControl.Name
    'do something according to the name
End Sub

我不喜欢这个并且更喜欢第一种替代方案,因为值(或者)可能是特定于所点击的按钮(并且按钮名称可能会改变)。也可以在没有相关按钮激活的情况下调用代码。

第三种方法是创建自己的自定义类和事件模型,这需要一些研究。


以下是使用UserForm的自定义属性的示例:

Private sCellOfInterest As String

Private Property Get CellOfInterest() As String
    CellOfInterest = sCellOfInterest
End Property

Private Property Let CellOfInterest(ByVal sRange As String)
    sCellOfInterest = sRange
End Property


Private Sub CommandButton1_Click()
    CellOfInterest = "A1"
    Call Clicker2
End Sub

Private Sub CommandButton2_Click()
    CellOfInterest = "A2"
    Call Clicker2
End Sub


Private Sub Clicker2()
    MsgBox CellOfInterest
End Sub

同样,属性可以是一个对象而不是一个字符串,然后使用Property Set而不是Property Let

以上是关于为两个控件编写一个代码?例如两个CommandButton的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的导航控件包括两个栏,一个在顶部,一个在底部?

如何将不同类中的两个 Switch 控件绑定到同一个 bool 属性?

两个TextView控件居中显示

求做一个最简单的vb计算公式程序的代码

iOS:最适合从两个选项中进行选择的控件

如何在 Xamarin Picker 控件中显示两个项目一个字符串和一个图像?