1

我的用户窗体上有多个旋转按钮,我想在每个按钮上放置相同的代码,

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

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

4

2 回答 2

2

将大部分代码放入它自己的 Sub 过程中,并将对象从每个按钮的“处理程序”子传递给它。

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
于 2016-03-23T08:24:57.367 回答
1

您的代码将 Textbox.value 称为整数。我认为您可能想要做的是让旋转按钮在单击时从 0 换到 12,并且在单击时可能会在 12 处停止。假设 SpinButtons 是 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
于 2016-03-23T12:21:41.287 回答