多个对象的类似语法

时间:2016-03-23 08:13:24

标签: excel excel-vba form-control vba

我的用户表单上有多个自旋按钮,我想在每个按钮上放置相同的代码,

Me.TextBox1.Value = Me.TextBox1.Value - 1

If Me.TextBox1.Value = 0 Then
    Me.TextBox1.Value = 12
End If

If Me.TextBox1.Value < 10 Then
    Me.TextBox1.Value = "0" & Me.TextBox1.Value
End If

但是有一种简化的方法,而不是在多个旋转按钮上放置多个块,只是将它们组合在一个块中?

2 个答案:

答案 0 :(得分:2)

将大部分代码放入自己的Sub过程中,并将对象从每个按钮的'handler'子句传递给它。

Private Sub button1_Click()
    allSpin Me.TextBox1
End Sub

Private Sub button2_Click()
    allSpin Me.TextBox2
End Sub

Private Sub button3_Click()
    allSpin Me.TextBox3
End Sub

Sub allSpin(ByRef tb As Object)
    With tb
        .Value = .Value - 1
        If .Value = 0 Then
            .Value = 12
        ElseIf .Value < 10 Then
            .Value = "0" & .Value
        End If
    End With
End Sub

这是非常普遍的,我怀疑它是否可以直接使用,但我希望它足以让你了解它的工作原理。

最后一个子可能会更好,

Sub allSpin(ByRef tb As Object)
    With tb
        If Int(.Value) = 1 Then
            .Value = 12
        Else
            .Value = Format(Int(.Value) - 1, "00")
        End If
    End With
End Sub

答案 1 :(得分:1)

您的代码将Textbox.value称为整数。 我认为你可能想要做的是在点击时让旋转按钮从0到12换行,当点击时可能在12时停止。假设SpinButton是SpinButton1,SpinButton2,SpinButton3,并且有相同数字的相关文本框: 试试这个

Private Sub SpinButton1_Change()
  SpinUpdate
End Sub
Private Sub SpinButton2_Change()
  SpinUpdate
End Sub
Private Sub SpinButton3_Change()
  SpinUpdate
End Sub
Private Sub SpinUpdate()
Dim StrI As String
  StrI = Right(ActiveControl.Name, 1)
  With Me.Controls("SpinButton" & StrI)
    If .Value = 0 Then
        .Value = 12
    End If
    Me.Controls("TextBox" & StrI).Text = Format(.Value, "00")
  End With
End Sub
Private Sub UserForm_Click()
Dim i As Integer
  For i = 1 To 3
    With Me.Controls("SpinButton" & Format(i))
      .Min = 0
      .Max = 12
    End With
  Next i
End Sub