Validación de datos dentro de código vba

'Usar validacion de datos dentro de un formulario vba
'
'Hola es mi primer consulta dentro del foro, por cierto antes de ser miembro pude solucionar
'muchos inconvenientes con este formulario, por este motivo necesito hacerte una consulta
'con problemita que tengo y no lo puedo resolver
'esto es un ejmplo:
'un formulario con con un comboBox, una textBox y boton y lo que quiero lograr es que
'no se ingresen datos duplicados, lo pude lograr con validacion de datos en excel, pero
'no se como implmentarlo dentro del formulario, el código que tengo es siguiente la macro
'que grabe este al principio entre whith y end with, el resto es el codigo que funciona de maravilla.
'Usar validacion de datos dentro de un formulario vba''Hola es mi primer consulta dentro del foro, por cierto antes de ser miembro pude solucionar'muchos inconvenientes con este formulario, por este motivo necesito hacerte una consulta'con problemita que tengo y no lo puedo resolver'esto es un ejmplo:'un formulario con con un comboBox, una textBox y boton y lo que quiero lograr es que'no se ingresen datos duplicados, lo pude lograr con validacion de datos en excel, pero'no se como implmentarlo dentro del formulario, el código que tengo es siguiente la macro'que grabe este al principio entre whith y end with, el resto es el codigo que funciona de maravilla.
codigo vba
With Selection.Validation
        .Delete
        .Add Type:=xlValidateCustom, AlertStyle:=xlValidAlertStop, Operator:= _
         xlBetween, Formula1:="=CONTAR.SI($A$1:$A$1048576;A1)<2"
        .IgnoreBlank = True
        .InCellDropdown = True
        .InputTitle = ""
        .ErrorTitle = "DATO DUPLICADO"
        .InputMessage = ""
        .ErrorMessage = "EL CONTACTO YA FIGURA EN LA BASE DE DATOS"
        .ShowInput = True
        .ShowError = True
End With
Sheets("Hoja1").Select
Range("a2").Select
Do While Not IsEmpty(ActiveCell)
ActiveCell.Offset(1, 0).Select
Loop
If Me.TextBox1.Visible = False Then
ActiveCell = Me.ComboBox1
ActiveCell.Offset(0, 1).Select
Else
ActiveCell = Me.TextBox1
ActiveCell.Offset(1, 0).Select
End If
MsgBox ("Los datos se han agregado Satisfactoriamente a la base")
ComboBox1.Clear
Me.TextBox1 = ""
End Sub
With Selection.Validation        .Delete        .Add Type:=xlValidateCustom, AlertStyle:=xlValidAlertStop, Operator:= _         xlBetween, Formula1:="=CONTAR.SI($A$1:$A$1048576;A1)<2"        .IgnoreBlank = True        .InCellDropdown = True        .InputTitle = ""        .ErrorTitle = "DATO DUPLICADO"        .InputMessage = ""        .ErrorMessage = "EL CONTACTO YA FIGURA EN LA BASE DE DATOS"        .ShowInput = True        .ShowError = TrueEnd With
Sheets("Hoja1"). SelectRange("a2").SelectDo While Not IsEmpty(ActiveCell)ActiveCell.Offset(1, 0). SelectLoopIf Me. TextBox1.Visible = False ThenActiveCell = Me. ComboBox1ActiveCell.Offset(0, 1).SelectElseActiveCell = Me. TextBox1ActiveCell.Offset(1, 0). SelectEnd IfMsgBox ("Los datos se han agregado Satisfactoriamente a la base")ComboBox1. ClearMe.TextBox1 = ""End Sub

1 respuesta

Respuesta
3
Disculpa la demora, quizás ya lo tengas resuelto... si no es así explicame un poco tu intención :
Imagino que ingresarás un dato en el textbox y que al guardarlo querés verificar que no se encuentre duplicado.
Si es así, no es necesario que le agregues la validación a la celda, sino simplemente que evalúes si la función CONTAR.SI da > 0
Pruébala así . La dejé al clic del botón:
Private Sub CommandButton1_Click()
Sheets("Hoja1").Select
Range("a2").Select
Do While Not IsEmpty(ActiveCell)
ActiveCell.Offset(1, 0).Select
Loop
If Me.TextBox1.Visible = False Then
    ActiveCell = Me.ComboBox1
    ActiveCell.Offset(0, 1).Select
Else
    'verifico si ya se encuentra:
    nro = Application.WorksheetFunction.CountIf(Range("A2:A" & ActiveCell.Row - 1), TextBox1)
    If nro > 0 Then
        MsgBox "El dato ya se encuentra en la base"
    Else
        ActiveCell = Me.TextBox1
        ActiveCell.Offset(1, 0).Select
        MsgBox ("Los datos se han agregado Satisfactoriamente a la base")
    End If
End If
ComboBox1.Clear
Me.TextBox1 = ""
End Sub
PD) En la página de macros de mi sitio, encontrarás otros modos de encontrar la primer fila libre - con End(xl...)
Elsa, Agradezco infinitamente por la gran ayuda que me has dado con el código, ya la había resuelto pero el código que hice me traía algunos conflictos así que use el código que me has pasado. Muchas gracias.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas