设置组合框错误的验证

时间:2016-07-21 02:26:01

标签: vba excel-vba combobox excel

# 更新的代码

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

我在VBA用户面板中有50个组合框和文本框。因为在每个组合框或文本框中设置约束太麻烦,我想要一个函数应用于每个组合和文本框。

对于上述代码,它会显示cant find object错误

如何解决?

顺便说一下,如何设置textbox的函数语句? 是Function condition2(ByRef objCmb As textbox)...

1 个答案:

答案 0 :(得分:1)

您收到错误,因为ComboBox不是ByRef objCmb As ComboBox。在调用sub时不要使用括号。如果不使用函数返回值,则在调用函数时不要使用括号。如果函数没有返回值,则它应该是sub。

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

我编写了一个函数来帮助您为所有文本和组合框生成Exit事件代码。

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

将此代码放入模块中并按如下方式调用:

AddCodeToCipBoard Userform1

现在所有的Exit事件代码都将被复制到Windows剪贴板中。进入您的Userforms代码模块并粘贴新代码。

示例输出:

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