La siempre fastidiosa comprobacion o averiguacion del NIF y las que no tenemos ni idea de VBA (que Dios castigue)

07/07/2003 - 20:46 por Laura McNee | Informe spam
He encontrado en Google una rutina en VBA enviada por Sendo hace unos meses.
Algo más o menos así:

Function LetraDNI( lDNI as long) as String
Dm sLetras as string
sLetras = "TRWAGMYFPDXBNJZSQVHLCKE"
LetraDNI = Mid(sLetras, (lDNI Mod 23) + 1, 1)
end function

Una, que es cotilla por naturaleza, ha observado esta mañana en mi banco
(sí, no os lo he dicho, pero yo soy JPMorgan disfrazao de lagarterana) que
el chico (macizo todo él) que me atendió, introdujo el número de mi DNI en
una casilla en blanco (un txtBox), que traía al lado un botón_de_comando en
que decía NIF, y al pulsarlo apareció, tomáticamente, junto al número del
DNI y en la misma casilla, la letra correspondiente. Inmediatamente apareció
mi nombre, mi domicilio, mi talla de sujet... digo mi cuenta, mis tarjetas,
mi... en fin. El macizo me dijo que todo funcionaba bajo Oracle, pero yo
creo que a alguien se le habría ocurrido hacer un algo así en Access.

¿Me equivoco?
:-)'

Preguntas similare

Leer las respuestas

#1 Eva Etxebeste
07/07/2003 - 21:44 | Informe spam
A qué oficina dices que has ido?????? :)=''''''' ;)

Bue, el botón de comando que ha pulsado el macizo seguramente haría algo
como (suponiendo que el txtbox donde se introduce el numerico sea txtDNI):

txtDNI = txtDNI & LetraDNI(txtDNI)

Con las comprobaciones oportunas para no ir concatenando letra del DNI hasta
donde se plantan los nabos, claro...

Y después una búsqueda por su fichero de clientes en base al famoso DNI y un
refresco de la pantalla con los datos encontrados. Aro, que si al macizo le
toca un DNI de los repetidos (que los hay, fíjese usté) pues hubiera quedado
muy macizo, pero con una cara de pan.

Tú prueba que sale, y si no, ñusea las dudas :)
Eva Etxebeste
[MS MVP]


"Laura McNee" escribió en el mensaje
news:becf6h$3r7$
He encontrado en Google una rutina en VBA enviada por Sendo hace unos


meses.
Algo más o menos así:

Function LetraDNI( lDNI as long) as String
Dm sLetras as string
sLetras = "TRWAGMYFPDXBNJZSQVHLCKE"
LetraDNI = Mid(sLetras, (lDNI Mod 23) + 1, 1)
end function

Una, que es cotilla por naturaleza, ha observado esta mañana en mi banco
(sí, no os lo he dicho, pero yo soy JPMorgan disfrazao de lagarterana) que
el chico (macizo todo él) que me atendió, introdujo el número de mi DNI en
una casilla en blanco (un txtBox), que traía al lado un botón_de_comando


en
que decía NIF, y al pulsarlo apareció, tomáticamente, junto al número del
DNI y en la misma casilla, la letra correspondiente. Inmediatamente


apareció
mi nombre, mi domicilio, mi talla de sujet... digo mi cuenta, mis


tarjetas,
mi... en fin. El macizo me dijo que todo funcionaba bajo Oracle, pero yo
creo que a alguien se le habría ocurrido hacer un algo así en Access.

¿Me equivoco?
:-)'


Respuesta Responder a este mensaje
#2 Laura McNee
08/07/2003 - 09:47 | Informe spam
Anda, pues lo he intentado, pero como de código ando fatal, he creado un
botón junto al txtbox, al que he asociado un evento al hacer click con el
siguiente texto:

Private Sub Comando32_Click()

Function letraDNI(lDNI As Long) As String
Dim sLetras As String
sLetras = "TRWAGMYFPDXBNJZSQVHLCKE"
letraDNI = Mid(sLetras, (lDNI Mod 23) + 1, 1)

Me.BuscaCIF = BuscaCIF & letraDNI(BuscaCIF)

End Function
End Sub
-

Pero me da un error en la primera línea, porque dice que esperaba un End
Sub.
¿Qué he hecho mal?


"Eva Etxebeste" <eetxebesteARROBAhotmail.com> escribió en el mensaje
news:
A qué oficina dices que has ido?????? :)=''''''' ;)

Bue, el botón de comando que ha pulsado el macizo seguramente haría algo
como (suponiendo que el txtbox donde se introduce el numerico sea txtDNI):

txtDNI = txtDNI & LetraDNI(txtDNI)

Con las comprobaciones oportunas para no ir concatenando letra del DNI


hasta
donde se plantan los nabos, claro...

Y después una búsqueda por su fichero de clientes en base al famoso DNI y


un
refresco de la pantalla con los datos encontrados. Aro, que si al macizo


le
toca un DNI de los repetidos (que los hay, fíjese usté) pues hubiera


quedado
muy macizo, pero con una cara de pan.

Tú prueba que sale, y si no, ñusea las dudas :)
Eva Etxebeste
[MS MVP]


"Laura McNee" escribió en el mensaje
news:becf6h$3r7$
> He encontrado en Google una rutina en VBA enviada por Sendo hace unos
meses.
> Algo más o menos así:
>
> Function LetraDNI( lDNI as long) as String
> Dm sLetras as string
> sLetras = "TRWAGMYFPDXBNJZSQVHLCKE"
> LetraDNI = Mid(sLetras, (lDNI Mod 23) + 1, 1)
> end function
>
> Una, que es cotilla por naturaleza, ha observado esta mañana en mi banco
> (sí, no os lo he dicho, pero yo soy JPMorgan disfrazao de lagarterana)


que
> el chico (macizo todo él) que me atendió, introdujo el número de mi DNI


en
> una casilla en blanco (un txtBox), que traía al lado un botón_de_comando
en
> que decía NIF, y al pulsarlo apareció, tomáticamente, junto al número


del
> DNI y en la misma casilla, la letra correspondiente. Inmediatamente
apareció
> mi nombre, mi domicilio, mi talla de sujet... digo mi cuenta, mis
tarjetas,
> mi... en fin. El macizo me dijo que todo funcionaba bajo Oracle, pero yo
> creo que a alguien se le habría ocurrido hacer un algo así en Access.
>
> ¿Me equivoco?
> :-)'
>
>


Respuesta Responder a este mensaje
#3 Eva Etxebeste
08/07/2003 - 10:50 | Informe spam
Hola Laura

A ver si consigo explicarme más o menos bien:

Las funciones y procedimientos (sub) son trocitos de código que separas del
resto, y a los que les pones un nombre para poder ser utilizados repetidas
veces sin tener que volver a escribirlos.

En nuestro caso, la función LetraDNI se merece tal tratamiento, puesto que
en tu aplicación será utilizada repetidas veces y sería un engorro ir
copiando el trocito de código que hay entre "function" y "end function" cada
vez que quieres utilizarlo. Al crear la función, le has asignado un nombre
(LetraDNI), a partir de ahora, sólo tendrás que llamarla para que el código
contenido en ella se ejecute.

Oki, vamos a ver dónde colocar nuestra Sta. Función y cómo llamarla.

Si la función va a ser utilizada en un formulario y no fuera de él (para
realizar algo muy específico al formu), se puede quedar en módulo asociado
al formulario. En este módulo está todo el código generado específicamente
para el formu, como son los click de los botones, etc.

Si la función va a ser utilizada en cualquier sitio de la base de datos,
entonces hacemos algo distinto:

1. Creamos un módulo nuevo, independiente. Todo lo que haya en este módulo
podrá ser visible para el resto de la aplicación. Y este "podrá ser visible"
nos lleva al punto 2 :)

2. Le decimos a nuestra Sta. Función que va a ser pública, anteponiendo la
palabra reservada PUBLIC al nombre de la función. Todo lo que esté en un
módulo estándar (que es como se llaman estos módulos independientes) y tenga
un PUBLIC por delante, será accesible desde cualquier punto de nuestra
aplicación. En el módulo puede haber también funciones, procedimientos y
variables que sean exclusivamente de uso interno, y no llevarán public, no
siendo accesibles más que desde el propio módulo.

Ya tenemos lista la primera parte, nuestro código con "nombre" y dispuesto
para ser utilizado. Ahora vamos a ver cómo lo invocamos. Tomando tu ejemplo:

Private Sub Comando32_Click()
' Creo una variable de trabajo
Dim strDNI as string

' Le asigno el contenido del txtBox donde el usuario introduce el DNI y
le quito blancos
strDNI = TRIM(me.txtBox)

' Si el último carácter no es un número, lo elimino
If Not IsNumeric( Right( strDNI,1 ) ) then
strDNI = Left( strDNI, Len(strDNI) -1 )
EndIf

' Calculo la letra correcta y la concateno
strDNI = strDNI & LetraDNI (strDNI)

' Asigno a mi textbox la cadena calculada
me.txtBox = strDNI

End Sub

Espero te sirva, un saludo
Eva Etxebeste
[MS MVP]


"Laura McNee" escribió en el mensaje
news:bedt1f$44krg$
Anda, pues lo he intentado, pero como de código ando fatal, he creado un
botón junto al txtbox, al que he asociado un evento al hacer click con el
siguiente texto:

Private Sub Comando32_Click()

Function letraDNI(lDNI As Long) As String
Dim sLetras As String
sLetras = "TRWAGMYFPDXBNJZSQVHLCKE"
letraDNI = Mid(sLetras, (lDNI Mod 23) + 1, 1)

Me.BuscaCIF = BuscaCIF & letraDNI(BuscaCIF)

End Function
End Sub
-

Pero me da un error en la primera línea, porque dice que esperaba un End
Sub.
¿Qué he hecho mal?


"Eva Etxebeste" <eetxebesteARROBAhotmail.com> escribió en el mensaje
news:
> A qué oficina dices que has ido?????? :)=''''''' ;)
>
> Bue, el botón de comando que ha pulsado el macizo seguramente haría algo
> como (suponiendo que el txtbox donde se introduce el numerico sea


txtDNI):
>
> txtDNI = txtDNI & LetraDNI(txtDNI)
>
> Con las comprobaciones oportunas para no ir concatenando letra del DNI
hasta
> donde se plantan los nabos, claro...
>
> Y después una búsqueda por su fichero de clientes en base al famoso DNI


y
un
> refresco de la pantalla con los datos encontrados. Aro, que si al macizo
le
> toca un DNI de los repetidos (que los hay, fíjese usté) pues hubiera
quedado
> muy macizo, pero con una cara de pan.
>
> Tú prueba que sale, y si no, ñusea las dudas :)
> Eva Etxebeste
> [MS MVP]
>
>
> "Laura McNee" escribió en el mensaje
> news:becf6h$3r7$
> > He encontrado en Google una rutina en VBA enviada por Sendo hace unos
> meses.
> > Algo más o menos así:
> >
> > Function LetraDNI( lDNI as long) as String
> > Dm sLetras as string
> > sLetras = "TRWAGMYFPDXBNJZSQVHLCKE"
> > LetraDNI = Mid(sLetras, (lDNI Mod 23) + 1, 1)
> > end function
> >
> > Una, que es cotilla por naturaleza, ha observado esta mañana en mi


banco
> > (sí, no os lo he dicho, pero yo soy JPMorgan disfrazao de lagarterana)
que
> > el chico (macizo todo él) que me atendió, introdujo el número de mi


DNI
en
> > una casilla en blanco (un txtBox), que traía al lado un


botón_de_comando
> en
> > que decía NIF, y al pulsarlo apareció, tomáticamente, junto al número
del
> > DNI y en la misma casilla, la letra correspondiente. Inmediatamente
> apareció
> > mi nombre, mi domicilio, mi talla de sujet... digo mi cuenta, mis
> tarjetas,
> > mi... en fin. El macizo me dijo que todo funcionaba bajo Oracle, pero


yo
> > creo que a alguien se le habría ocurrido hacer un algo así en Access.
> >
> > ¿Me equivoco?
> > :-)'
> >
> >
>
>


Respuesta Responder a este mensaje
#4 Laura McNee
08/07/2003 - 11:10 | Informe spam
Gracias Eva. He copiado el evento tal que así, pero en la línea que te
señalo con asteriscos me dice que se esperaba una variable y no un módulo.
¿En qué fallo ahora?

Private Sub Comando32_Click()
' Creo una variable de trabajo
Dim strDNI As String

' Le asigno el contenido del txtBox donde el usuario introduce el DNI y
_
le quito blancos
strDNI = Trim(Me.BuscaCIF)

' Si el último carácter no es un número, lo elimino
If Not IsNumeric(Right(strDNI, 1)) Then
strDNI = Left(strDNI, Len(strDNI) - 1)
End If

' Calculo la letra correcta y la concateno
***** strDNI = strDNI & letraDNI(strDNI)

' Asigno a mi textbox la cadena calculada
Me.BuscaCIF = strDNI

End Sub



"Eva Etxebeste" <eetxebesteARROBAhotmail.com> escribió en el mensaje
news:
Hola Laura

A ver si consigo explicarme más o menos bien:
Respuesta Responder a este mensaje
#5 Laura McNee
08/07/2003 - 11:43 | Informe spam
Pos nada, se me sigue parando en "letraDNI" diciendo que se esperaba una
variable o procedimiento, pero no un módulo.
:-(



"Eva Etxebeste" <eetxebesteARROBAhotmail.com> escribió en el mensaje
news:
Perdóneme usté, que he metido la gamba

La función LetraDNI espera un valor de tipo Long, y yo le estoy pasando un
string. Cambia la línea por: strDNI = strDNI & letraDNI(CLng(strDNI))

Un saludo
Eva Etxebeste
[MS MVP]

"Laura McNee" escribió en el mensaje
news:bee1s1$44q4c$
> Gracias Eva. He copiado el evento tal que así, pero en la línea que te
> señalo con asteriscos me dice que se esperaba una variable y no un


módulo.
> ¿En qué fallo ahora?
>
> Private Sub Comando32_Click()
> ' Creo una variable de trabajo
> Dim strDNI As String
>
> ' Le asigno el contenido del txtBox donde el usuario introduce el


DNI
y
> _
> le quito blancos
> strDNI = Trim(Me.BuscaCIF)
>
> ' Si el último carácter no es un número, lo elimino
> If Not IsNumeric(Right(strDNI, 1)) Then
> strDNI = Left(strDNI, Len(strDNI) - 1)
> End If
>
> ' Calculo la letra correcta y la concateno
> ***** strDNI = strDNI & letraDNI(strDNI)
>
> ' Asigno a mi textbox la cadena calculada
> Me.BuscaCIF = strDNI
>
> End Sub
>
>
>
> "Eva Etxebeste" <eetxebesteARROBAhotmail.com> escribió en el mensaje
> news:
> > Hola Laura
> >
> > A ver si consigo explicarme más o menos bien:
>
>


Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida