2016-03-23 8 views
1

Ich habe mehrere spinbuttons auf meinem Userform, und ich möchte auf jeden von ihnen die gleichen Codes setzen,ähnliche Syntax für mehrere Objekte

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 

aber gibt es eine vereinfachte Art und Weise, anstatt mehrere Blöcke auf mehrere spinbuttons setzen und gruppiere sie alle in einem Block?

Antwort

2

Setzen Sie den Großteil des Codes in eine eigene Sub-Prozedur und übergeben Sie das Objekt vom Handler-Sub jeder Schaltfläche.

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 

Das ziemlich verallgemeinert und TBH, ich zweifle, ob es gerade aus der Box funktionieren würde, aber ich hoffe, es ist genug, um Ihnen eine Idee zu geben, wie es funktioniert.

Das letzte Unter wie dies besser sein können,

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 
+0

sorry für nicht jetzt keine Worte für fast eine Woche zu geben, hatte gerade einen Urlaub Ostern und gerade zurück zu Arbeit, wird den Code in ein bisschen ausprobieren, danke. – xtoybox

+0

danke euch beiden, ich habe versucht, Ihre Codes zusammen zu Maischen und es funktioniert, danke. – xtoybox

1

Ihr Code bezieht sich als eine ganze Zahl an Textbox.value. Ich denke, was Sie vielleicht tun möchten, ist, die Drehschaltflächen von 0 bis 12 zu bewegen, wenn Sie nach unten klicken, und vielleicht bei 12 aufhören, wenn Sie nach oben klicken. Unter der Annahme, die SpinButtons sind SpinButton1, SpinButton2, SpinButton3 und es gibt ähnliche Textfelder mit der gleichen Nummer: dieses Versuchen

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 
+0

Entschuldigung, dass ich seit fast einer Woche keine Worte mehr gebe, ich hatte gerade einen Osterurlaub und bin gerade wieder an die Arbeit gegangen, werde den Code ein wenig ausprobieren, danke. – xtoybox

+0

danke euch beiden, ich habe versucht, Ihre Codes zusammen zu Maischen und es funktioniert, danke. – xtoybox