我在同一列但不同行中的分布图上有多个按钮(活动x)。这些按钮捕获活动的开始时间。 如果按下按钮1,则其旁边的单元格应以当前时间填充。 如果按下按钮2,则其旁边的单元格应以当前时间填充。等等.....
我已经在VBA中编写了一个SUB,如下所示:
Private Sub StartTimer_Click()
Range("I4").Value = Now
End Sub
我不想为每个按钮操作重复此代码。请让我知道如何使其动态化。
答案 0 :(得分:2)
一个简单的WithEvents示例:
在一个类(名为clsButtons)中:
Private WithEvents Bt As MSForms.CommandButton
Property Set obj(b As MSForms.CommandButton)
Set Bt = b
End Property
Private Sub Bt_Click()
'uses the right of the name of the CommandButton
Cells(1 + Right(Bt.Name, 1) * 3, 9).Value = Now
End Sub
在工作表代码中(带有按钮的代码):
Dim myButtons As Collection
Private Sub Worksheet_Activate()
Dim ctl As OLEObject
Dim ButtonClass As clsButtons
Set myButtons = New Collection
For Each ctl In Sheet1.OLEObjects
If ctl.progID = "Forms.CommandButton.1" Then
Set ButtonClass = New clsButtons
Set ButtonClass.obj = ctl.Object
myButtons.Add ButtonClass
End If
Next ctl
End Sub
答案 1 :(得分:1)
创建一个标准模块,并将过程放入其中。
虽然可以在私有模块中共享过程,但最佳实践是将任何共享过程放在共享模块中。
在VBA编辑器中,单击Insert
> Module
,
粘贴到那里,并为其指定一个唯一的名称。使用您的示例,您可以执行以下操作:
Public Sub SetTimeValue()
Range("I4").Value = Now
End Sub
...然后从另一个电话中调用此公共存根,例如:
Private Sub StartTimer_Click()
SetTimeValue
End Sub
...以及其他需要调用代码的位置。
我假设您所关心的 actual 过程有多行代码,否则重复复制并不是真正的问题。