Macro para validar cuenta bancaria en access

Necesito una macro o algo que al darle a un botón, me verifique la cuenta bancaria, da igual si tengo que meter los números en campos distintos o en uno solo meter los 20 dígitos (entidad, sucursul, dc y cuenta). He mirado en internet pero no encuentro nada claro, no entiendo casi nada de vba así que si hay algo que este medio hecho mejor.

1 Respuesta

Respuesta
1
Supongamos que la tabla dónde tienes las cuentas bancacias se llama Cuentas y el campo CuentaBancaria
En el formulario insertamos un cuadro de texto que llamaremos txtCuenta, en este cuadro digitamos la cuenta.
Después insertas un botón, que llamaremos por ejemplo Enviar. En las propiedades del botón, acción Al hacer clic ---> Procedimiento de evento ---> Picas en el cuadrado de la derecha, el de los ... y pones el código:
If IsNull(DLookup("[CuentaBancaria]","[Cuentas]","CuentaBancaria=form!txtCuenta.Value")=true then
MsgBox "La cuenta no existe"
else
Msgbox "La cuenta si existe"
End if
Es decir, utilizamos la función isnull y dlookup, ésta última nos busca el registro en el campo CuentaBancaria de la tabla Cuentas con la condición de que CuentaBancaria sea igual al valor introducido en el cuadro de texto txtCuenta. La función IsNull nos dará true si es nulo el resultado de la búsqueda y false si el resultado no es nulo.
Luego puedes poner un mensaje con MsgBox
Me cuentas.
Falta un paréntesis de cierre:
If IsNull(DLookup("[CuentaBancaria]","[Cuentas]","CuentaBancaria=form!txtCuenta.Value"))=true then
Muchas gracias por tu pronta respuesta. Entiendo perfectamente tu respuesta, muy clara.
Pero me parece que no es lo que necesito, esto lo que hace es buscar el numero de cuenta en otra tabla, yo necesito verificar que la cuenta bancaria sea correcta, que no sea una cuenta bancaria inventada, creo que es algo de verificar el DC.
De acuerdo, pensé que querías verificar si la cuenta existía.
¿Sabes la fórmula para calcular el DC?
He buscado por ahí y he encontrado esta:
La primera cifra del banco se multiplica por 4.
La segunda cifra del banco se multiplica por 8.
La tercera cifra del banco se multiplica por 5.
La cuarta cifra del banco se multiplica por 10.
La primera cifra de la entidad se multiplica por 9.
La segunda cifra de la entidad se multiplica por 7.
La tercera cifra de la entidad se multiplica por 3.
La cuarta cifra de la entidad se multiplica por 6.
Se suman todos los resultados obtenidos.
Se divide entre 11 y nos quedamos con el resto de la división.
A 11 le quitamos el resto anterior, y ese el el primer dígito de control, con la salvedad de que si nos da 10, el dígito es 1
Para obtener el segundo dígito de control:
La primera cifra de la cuenta se multiplica por 1
La primera cifra de la cuenta se multiplica por 2
La primera cifra de la cuenta se multiplica por 4
La primera cifra de la cuenta se multiplica por 8
La primera cifra de la cuenta se multiplica por 5
La primera cifra de la cuenta se multiplica por 10
La primera cifra de la cuenta se multiplica por 9
La primera cifra de la cuenta se multiplica por 7
La primera cifra de la cuenta se multiplica por 3
La primera cifra de la cuenta se multiplica por 6
Se suman todos los resultados obtenidos.
Se divide entre 11 y nos quedamos con el resto de la división.
A 11 le quitamos el resto anterior, y ese el el segundo dígito de control, con la salvedad de que si nos da 10, el dígito es 1
¿Me puedes decir si es correcto antes de pasarlo a visual?
He encontrado este ejemplo ¿es correcto?
Ejemplo: Vamos a calcular los dígitos de control de la cuenta ficticia de la imagen.
Primer dígito de control:
4·0+8·0+5·0+10·4+9·3+7·0+3·0+6·6=103. Divido 103 entre 11. El resto es 4. Calculo 11- 4 y obtengo 7 que es el primer dígito de control.
Segundo dígito de control:
1·0+2·0+4·0+8·0+5·0+10·1+9·2+7·3+3·4+6·5=91. Divido 91 entre 11. El resto es 3. Calculo 11- 3 y obtengo 8 que es el segundo dígito de control.
Número de cuenta: 0004 3006 78 0000012345
Me cuentas.
Haciendo los cálculos manualmante si que funciona. Ahora lo complicado es pasarlo a vba
No te preocupes, esta tarde lo hago y te lo mando.
Encontré esto en internet, por si te puede servir, pero no puedo ver el código
http://sites.google.com/site/jjjt1973/Home/verificar-cuenta-bancaria
La casilla de verificación que hay no me hace falta.
Enlace directo para descarga
http://sites.google.com/site/jjjt1973/Home/verificar-cuenta-bancaria/VerificarCuentaBancaria.rar?attredirects=0&d=1
Ya puede verle las tripas a la bd, hay un formulario y un modulo, ¿creo qué con esto ya tienes menos trabajo no?, pero yo no se darle forma:
El Formulario:
Private Sub Bank_BeforeUpdate(Cancel As Integer)
If Bank = DLookup("Bank", "Banco", "Bank ='" & Me.Bank & "'") Then
Else
MsgBox "Banco Errado"
End If
Cancel = True
Exit Sub
End Sub
Private Sub Bank_Change()
Dim txtBank As String
txtBank = Me.Bank.Text
If Len(txtBank) >= 4 Then
Me.Bank = Left(txtBank, 4)
Me.Agencia.SetFocus
End If
End Sub
Private Sub CobroBanc_Click()
If CobroBanc = True Then
Bank.Enabled = True
Agencia.Enabled = True
CrBanc.Enabled = True
Cuenta.Enabled = True
Bank.SetFocus
Else
Bank.Enabled = False
Agencia.Enabled = False
CrBanc.Enabled = False
Cuenta.Enabled = False
End If
End Sub
Private Sub CrBanc_Change()
Dim txtCrBanc As String
txtCrBanc = Me.CrBanc.Text
If Len(txtCrBanc) >= 2 Then
Me.CrBanc = Left(txtCrBanc, 2)
Me.Cuenta.SetFocus
End If
End Sub
Private Sub Form_Close()
'DoCmd.Quit
End Sub
Private Sub Form_Current()
Bank.Enabled = False
Agencia.Enabled = False
CrBanc.Enabled = False
Cuenta.Enabled = False
End Sub
Private Sub Agencia_Change()
Dim txtSubBank As String
txtSubBank = Me.Agencia.Text
If Len(txtSubBank) >= 4 Then
Me.Agencia = Left(txtSubBank, 4)
Me.CrBanc.SetFocus
End If
End Sub
Private Sub Cuenta_Change()
Dim txtCuenta As String
txtCuenta = Me.Cuenta.Text
If Len(txtCuenta) >= 10 Then
Me.Cuenta = Left(txtCuenta, 10)
Me.Verificar.SetFocus
End If
End Sub
Private Sub Verificar_Click()
If CobroBanc = True Then
If IsNull(Me![Bank]) Or IsNull(Me![Agencia]) _
Or IsNull(Me![CrBanc]) Or IsNull(Me![Cuenta]) Then
MsgBox "Debe Incluir todos los datos de la cuenta", vbCritical, "Faltan Datos"
Bank.SetFocus
Exit Sub
End If
If Bank = DLookup("CodigoBanco", "Banco", "CodigoBanco ='" & Me.Bank & "'") Then
Else
MsgBox "El Codigo Banco No esta ASOCIADO a ninguna entidad Bancaria" & vbCrLf & _
"Por favor Verifique de nuevo", vbCritical, "Codigo Banco"
Bank.SetFocus
Cancel = True
Exit Sub
End If
If CrBanc = sBankControlDigit(Me.Bank, Me.Agencia, Me.Cuenta) Then
MsgBox "Cuenta Valida", vbExclamation, "Correcto"
Else
MsgBox "Esta cuenta esta Errada" & vbCrLf & vbCrLf & _
"La secuencia del Dígito de Control no es VALIDA", vbCritical, "Dígito Errado"
CrBanc.SetFocus
Exit Sub
End If
Else
MsgBox "Debe seleccionar la Opcion Verificar Cuenta Bancaria" & vbCrLf & _
"luego introducir los datos de la cuenta", vbCritical, "Opción Verificar"
End If
End Sub
Módulo "CalculoDigitoControl"
Option Compare Database
' Funcion para verificar el Digito de Control de una cuenta Bancaria
==============
Function sBankControlDigit(Bank As Integer, SubBank As Integer, Account As Double) As String
Dim sBank As String
Dim sSubBank As String
Dim sAccount As String
Dim Temporal As Integer
sBank = Format(Bank, "0000")
sSubBank = Format(SubBank, "0000")
sAccount = Format(Account, "0000000000")
Temporal = 0
Temporal = Temporal + Mid(sBank, 1, 1) * 4
Temporal = Temporal + Mid(sBank, 2, 1) * 8
Temporal = Temporal + Mid(sBank, 3, 1) * 5
Temporal = Temporal + Mid(sBank, 4, 1) * 10
Temporal = Temporal + Mid(sSubBank, 1, 1) * 9
Temporal = Temporal + Mid(sSubBank, 2, 1) * 7
Temporal = Temporal + Mid(sSubBank, 3, 1) * 3
Temporal = Temporal + Mid(sSubBank, 4, 1) * 6
Temporal = 11 - (Temporal Mod 11)
If Temporal = 11 Then
sBankControlDigit = "0"
ElseIf Temporal = 10 Then
sBankControlDigit = "1"
Else
sBankControlDigit = Format(Temporal, "0")
End If
Temporal = 0
Temporal = Temporal + Mid(sAccount, 1, 1) * 1
Temporal = Temporal + Mid(sAccount, 2, 1) * 2
Temporal = Temporal + Mid(sAccount, 3, 1) * 4
Temporal = Temporal + Mid(sAccount, 4, 1) * 8
Temporal = Temporal + Mid(sAccount, 5, 1) * 5
Temporal = Temporal + Mid(sAccount, 6, 1) * 10
Temporal = Temporal + Mid(sAccount, 7, 1) * 9
Temporal = Temporal + Mid(sAccount, 8, 1) * 7
Temporal = Temporal + Mid(sAccount, 9, 1) * 3
Temporal = Temporal + Mid(sAccount, 10, 1) * 6
Temporal = 11 - (Temporal Mod 11)
If Temporal = 11 Then
sBankControlDigit = sBankControlDigit + "0"
ElseIf Temporal = 10 Then
sBankControlDigit = sBankControlDigit + "1"
Else
sBankControlDigit = sBankControlDigit + Format(Temporal, "0")
End If
End Function
Me parece demasiado código si lo que necesitas unicamente es validar el dígito.
Yo lo he hecho de la siguiente forma:
En el formulario 4 cuadros de texto para digitar la entidad, sucursal, DC y cuenta. Los llamaremos: txtEntidad, txtSucursal, txtDC y txtCuenta respectivamente.
Después insertar un botón que llamaré Validar y en el código de ese botón:
Private Sub Verificar_Click()
Dim v1, v2 As Integer
Dim vDC1, vDC2 As String
v1 = 0
v2 = 0
If IsNull(Form!txtEntidad) = True Or IsNull(Form!txtSucursal) = True Or IsNull(Form!txtDC) = True Or IsNull(Form!txtCuenta) = True Then
MsgBox "No se puede dejar ningún campo vacío"
Else
If Len(Form!txtEntidad) <> 4 Or Len(Form!txtSucursal) <> 4 Or Len(Form!txtDC) <> 2 Or Len(Form!txtCuenta) <> 10 Then
MsgBox "El nº de dígitos es incorrecto"
Else
v1 = Mid(Form!txtEntidad, 1, 1) * 4
v1 = v1 + Mid(Form!txtEntidad, 2, 1) * 8
v1 = v1 + Mid(Form!txtEntidad, 3, 1) * 5
v1 = v1 + Mid(Form!txtEntidad, 4, 1) * 10
v1 = v1 + Mid(Form!txtSucursal, 1, 1) * 9
v1 = v1 + Mid(Form!txtSucursal, 2, 1) * 7
v1 = v1 + Mid(Form!txtSucursal, 3, 1) * 3
v1 = v1 + Mid(Form!txtSucursal, 4, 1) * 6
If 11 - v1 Mod 11 = 10 Then
vDC1 = 1
Else
vDC1 = 11 - v1 Mod 11
End If
v2 = Mid(Form!txtCuenta, 1, 1) * 1
v2 = v2 + Mid(Form!txtCuenta, 2, 1) * 2
v2 = v2 + Mid(Form!txtCuenta, 3, 1) * 4
v2 = v2 + Mid(Form!txtCuenta, 4, 1) * 8
v2 = v2 + Mid(Form!txtCuenta, 5, 1) * 5
v2 = v2 + Mid(Form!txtCuenta, 6, 1) * 10
v2 = v2 + Mid(Form!txtCuenta, 7, 1) * 9
v2 = v2 + Mid(Form!txtCuenta, 8, 1) * 7
v2 = v2 + Mid(Form!txtCuenta, 9, 1) * 3
v2 = v2 + Mid(Form!txtCuenta, 10, 1) * 6
If 11 - v2 Mod 11 = 10 Then
vDC2 = 1
Else
vDC2 = 11 - v2 Mod 11
End If
If Trim(Str(vDC1)) + Trim(Str(vDC2)) = Form!txtDC Then
MsgBox "Cuenta correcta"
Else
MsgBox "Cuenta incorrecta"
End If
End If
End If
End Sub
Me cuentas, saludos Angeles
Página Supuestos y Soluciones en Access:

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas