2016-07-21 12 views
1

# aktualisiert CodesEinstellung Validierung für Kombinationsfeld Fehler

Function condition(ByRef objCmb As ComboBox) 
    If objCmb.Value ="" And objCmb.Value = "g" Then 
     Call MsgBox("gg", vbOKOnly, "error") 
    End If 
End Function 

Private Sub ComboBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean) 
    condition (ComboBox1) 
End Sub 

'other codes for reference: 
Private Sub CommandButton1_Click() 
    Dim lastrow As Integer 
    lastrow = Cells(Rows.Count, "A").End(xlUp).Row 


    For i = 1 To 3 
     For j = 1 To 5 
      With Me.Controls("ComboBox" & (i - 1) * 5 + j) 
       If .Text <> "" Then 
       Cells(lastrow + i, j) = .Text 
       Else 

       Exit Sub 

       End If 

      End With 
     Next j 
    Next i 


End Sub 

Ich habe 50 Combo und Textfelder in VBA Bedienpanel. Da es zu mühsam ist, Einschränkungen in jedem Kombinations- oder Textfeld festzulegen, möchte ich, dass eine Funktion auf jedes Kombinations- und Textfeld angewendet wird.

Für die Codes oben zeigt es cant find object Fehler

Wie bis lösen?

Btw, wie die Funktionsanweisung für Textbox festlegen? ist es Function condition2(ByRef objCmb As textbox)...

+0

Sie erhalten 'objCmb' in Ihrer Funktion. Benutze es, nicht 'ComboBox'. –

+0

Was Ken sagt, ist ersetzen Sie Ihre 'If ComboBox.Value <>" "Und ComboBox.Value =" g "Then' mit' If objCmb.Value <> "" Und objCmb.Value = "g" Then' –

+0

i versucht, kann immer noch nicht den Objektfehler in 'Bedingung (ComboBox1) finden' – Monchhichi

Antwort

1

Sie erhalten einen Fehler, da ComboBox nicht 10 ist. Verwenden Sie keine Klammern beim Aufrufen eines Subs. Verwenden Sie beim Aufrufen der Funktion keine Klammern, wenn Sie den Rückgabewert der Funktionen nicht verwenden. Wenn eine Funktion keinen Wert zurückgibt, sollte es ein Sub sein.

Sub condition(ByRef objCmb As MSForms.ComboBox) 
    If objCmb.Value <> "" And objCmb.Value = "g" Then 
     MsgBox "gg", vbOKOnly, "error" 
     objCmb.Value = "" 
    End If 
End Sub 

Private Sub ComboBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean) 
    condition ComboBox1 
End Sub 

schrieb ich eine Funktion, die Sie den Exit-Ereigniscode für alle Text- und Kombinationsfelder erzeugen zu helfen.

Sub AddCodeToCipBoard(frm As UserForm) 

    Const BaseCode = " Private Sub @Ctrl_Exit(ByVal Cancel As MSForms.ReturnBoolean)" & vbCrLf & _ 
      "  condition ComboBox1" & vbCrLf & _ 
      " End Sub" & vbCrLf & vbCrLf 

    Dim s As String 
    Dim ctrl 
    Dim clip As DataObject 
    Set clip = New DataObject 

    For Each ctrl In frm.Controls 
     If TypeName(ctrl) = "ComboBox" Or TypeName(ctrl) = "TextBox" Then 
      s = s & Replace(BaseCode, "@Ctrl", ctrl.Name) 
     End If 
    Next 

    clip.SetText s 

    clip.PutInClipboard 

End Sub 

Diesen Code in einem Modul und es so nennen:

AddCodeToCipBoard Userform1 

Nun ist der ganze Ereigniscode Ausgang wird in die Windows-Zwischenablage kopiert werden. Gehen Sie in Ihr Benutzerformular-Codemodul und fügen Sie den neuen Code ein.

Ausgabe:

Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean) 
    condition ComboBox1 
End Sub 

Private Sub TextBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean) 
    condition ComboBox1 
End Sub 

Private Sub TextBox3_Exit(ByVal Cancel As MSForms.ReturnBoolean) 
    condition ComboBox1 
End Sub 

Private Sub ComboBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean) 
    condition ComboBox1 
End Sub 

Private Sub TextBox4_Exit(ByVal Cancel As MSForms.ReturnBoolean) 
    condition ComboBox1 
End Sub