Condicionar captura con formulario en VBA

Tengo el siguiente código:

strTitulo = "Agregar Registro"
'
Continuar = MsgBox("Dar de alta los datos?", vbYesNo + vbExclamation, strTitulo)
If Continuar = vbNo Then Exit Sub
'
Cuenta = Application.WorksheetFunction.CountIf(Range("A:A"), Me.txtID)
'
If Cuenta > 0 Then
    '
    MsgBox "El ID '" & Me.txtID & "' ya se encuentra registrado", vbExclamation, strTitulo
    '
Else

Pero no encuentro la manera de hacer que se relacionen dos columnas y me diga si ya esta capturado el dato de la columna A con el dato de columna B, por ejemplo, si quiero capturar "mexico" y "futbol" y despues "mexico" y "basketball"

1 respuesta

Respuesta
3

Quedaría así, lo que hace es buscar todas las coincidencias a txtID, con cada coincidencia revisa el textbox2 con la columna "B" (ajusta estos datos según tu información), si encuentra uno igual, entonces envía el aviso.

    strTitulo = "Agregar Registro"
    '
    Continuar = MsgBox("Dar de alta los datos?", vbYesNo + vbExclamation, strTitulo)
    If Continuar = vbNo Then Exit Sub
    '
    'Cuenta = Application.WorksheetFunction.CountIf(Range("A:A"), Me.txtID)
    cuenta = 0
    Set h = ActiveSheet
    Set r = h.Columns("A")
    Set b = r.Find(Me.txtID, LookAt:=xlWhole)
    If Not b Is Nothing Then
        celda = b.Address
        Do
            'detalle
            If LCase(h.Cells(b.Row, "B")) = LCase(TextBox2) Then
                cuenta = cuenta + 1
                Exit Do
            End If
            Set b = r.FindNext(b)
        Loop While Not b Is Nothing And b.Address <> celda
    End If
    '
    If cuenta > 0 Then
        '
        MsgBox "El ID '" & Me.txtID & _
            "' y el dato '" & Me.TextBox2 & "' ya están registrados", vbExclamation, strTitulo
        '
    Else
    End If

Hola Dante gracias por la respuesta, aunque aun tengo dudas ya que el colocar el código que me pusiste, el cual te agradezco, no gusrada ningún registro, te dejo el código completo ya con la info que me proporcionaste

Private Sub CommandButton1_Click()
'Declaración de variables
'
Dim strTitulo As String
Dim Continuar As String
Dim TransRowRng As Range
Dim NewRow As Integer
Dim Limpiar As String
'
strTitulo = "Agregar Registro"
    '
    Continuar = MsgBox("Dar de alta los datos?", vbYesNo + vbExclamation, strTitulo)
    If Continuar = vbNo Then Exit Sub
    '
    Cuenta = Application.WorksheetFunction.CountIf(Range("A:A"), Me.txtID)
    Cuenta = 0
    Set h = ActiveSheet
    Set r = h.Columns("A")
    Set b = r.Find(Me.txtID, LookAt:=xlWhole)
    If Not b Is Nothing Then
        celda = b.Address
        Do
            'detalle
            If LCase(h.Cells(b.Row, "D")) = LCase(txtUsuario) Then
                Cuenta = Cuenta + 1
                Exit Do
            End If
            Set b = r.FindNext(b)
        Loop While Not b Is Nothing And b.Address <> celda
    End If
    '
    If Cuenta > 0 Then
        '
        MsgBox "El ID '" & Me.txtID & _
            "' y el dato '" & Me.txtUsuario & "' ya están registrados", vbExclamation, strTitulo
        '
    Else
    End If
End Sub

Tu código es este:

strTitulo = "Agregar Registro"
'
Continuar = MsgBox("Dar de alta los datos?", vbYesNo + vbExclamation, strTitulo)
If Continuar = vbNo Then Exit Sub
'
Cuenta = Application.WorksheetFunction.CountIf(Range("A:A"), Me.txtID)
'
If Cuenta > 0 Then
    '
    MsgBox "El ID '" & Me.txtID & "' ya se encuentra registrado", vbExclamation, strTitulo
    '
Else

Solamente pusiste información hasta el "Else"

Supongo que ya tienes el código para pasar los datos a la hoja.

Entonces lo tienes que copiar en mi macro:

Private Sub CommandButton1_Click()
'Declaración de variables
'
Dim strTitulo As String
Dim Continuar As String
Dim TransRowRng As Range
Dim NewRow As Integer
Dim Limpiar As String
'
strTitulo = "Agregar Registro"
    '
    Continuar = MsgBox("Dar de alta los datos?", vbYesNo + vbExclamation, strTitulo)
    If Continuar = vbNo Then Exit Sub
    '
    Cuenta = Application.WorksheetFunction.CountIf(Range("A:A"), Me.txtID)
    Cuenta = 0
    Set h = ActiveSheet
    Set r = h.Columns("A")
    Set b = r.Find(Me.txtID, LookAt:=xlWhole)
    If Not b Is Nothing Then
        celda = b.Address
        Do
            'detalle
            If LCase(h.Cells(b.Row, "D")) = LCase(txtUsuario) Then
                Cuenta = Cuenta + 1
                Exit Do
            End If
            Set b = r.FindNext(b)
        Loop While Not b Is Nothing And b.Address <> celda
    End If
    '
    If Cuenta > 0 Then
        '
        MsgBox "El ID '" & Me.txtID & _
            "' y el dato '" & Me.txtUsuario & "' ya están registrados", vbExclamation, strTitulo
        '
    Else
        '
        'en esta parte va tu código para guardar el registro
        '
    End If
End Sub

Si quieres que te ayude con esa parte, valora esta pregunta y crea una nueva ; y me explicas con detalle qué controles se van a guardar y en dónde van.

Si de hecho tienes razón Dante, solo que olvide poner el código para guardar, una disculpa, y muchísimas gracias por la ayuda, me es de mucha utilidad.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas