Juan, mil gracias por tanta dedicación y por querer compartir lo que sabes y de qué manera. No tengo preguntas, sólo gratitud. Me impresiona la pedagogía, la claridad, la organización en sus clases. Un abrazo.
La verdad es que tiene una forma de enseñar bastante didactica. Sus explicaciones son bastante claras y ayudan a entender de una manera muy sencilla esto que parece bastante complejo. Muchas gracias, recibe un saludo desde ACAYUCAN, VERACRUZ, MEXICO.
Aprovechando la cuarentena aca en Chile, he hecho un refresh de este curso, lo encuentro brillante profesor en terminos pedagogicos, ¡ Dios le bendiga de sobremanera por su tiempo !...Un abrazo desde Stgo. de Chile
No sé si se ha comentado antes, pero la letra en el NIF se usa muchísimo para evitar errores de entrada. Lo que se llama un "dígito de control". En la administración (donde trabajo) nos evita muchísimos errores de tecleo, pues cuando una persona escribe mal su DNI (o el propio usuario al entrar el dato) la letra no coincide y el sistema no nos deja continuar. Me ha encantado tu forma de hacerlo, Juan. Me copio. Hasta ahora lo hacía creando una matriz con las posiciones de las letras, pero es mucho más tedioso. ¡GRACIAS!
jajajaj Me divierto mucho con tus errores de escritura pero eres un crack enceñando. Yo tenía algo de experiencia con C# y eso me ayuda pero el 80% de lo bien que lo paso viendo el curso y aprendiendo es gracias a tus metodos de enceñansa. Gracias y saludos desde tenerife.
Profe! Mi respeto por su sabiduria en el campo de programacion. Sus videos me an sido de mucha ayuda ya que estoy principiando en esto de programacion. Gracias por sus videos que Dios le bendiga..
Hola, explica demasiado bien y he aprendido muchísimo, saludos desde Colombia, aquí no tenemos NIF sino NIT y la letra es un DV que es un número, es decir, se llama Numero de Identificación Tributaria y un Dígito de Verificación.
muy bueno el curso, excelentemente explicado, super claro en los conceptos , muy bueno. Yo hago sistemas con VB.net 2010 y mysql como DB e imprimir informes con crystal report. Me intereso meterme en el mundo de access VBA y veo que es muy rapido para desarrollar. Muchas Gracias por el aporte , bueno continuo viendo tus videos..
Gracias por la información!! Muy bien explicado y muy útil. Cómo puedo hacer para que el formulario se ejecute como NO MAXIMIZADO?? Desde dentro de Access, cuando paso de Modo Diseño a Formulario, me ocupa toda la ventana de la solapa. Lo he puesto como modal, movible y demás pero no hay caso. Gracias por la respuesta.
Hola Juan, creo que la utilidad de la letra del NIF es para evitar errores en la introducción del mismo, de forma que el número y la letra deben corresponderse. Lo mismo que los dígitos de control de una CCC ó el IBAN. Así pues, pienso que el formulario debería contrastar la letra introducida por el usuario con la que "debería" haber introducido, y rechazar el NIF introducido en su caso. Muchas gracias.
Fernando Rosa Es correcto. En algún vídeo (no recuerdo exactamente en cuál) pongo precisamente ese ejemplo, es decir, un formulario que se encarga de validar la letra NIF de un DNI utilizando para ello el logaritmo que halla la letra NIF en base a los dígitos del DNI. Un saludo
Hola, Ante todo gracias por tu trabajo; realmente es de gran valor. Solo me gustaria recordarte que tienes la funcion Mod que te da el resto, para calcular DNI es mejor que no dividir, extraer parte entera, multiplicar y restar....
+Miguel Garcia Correcto!! Y creo que la utilizo en el curso de VBA Excel. No se por qué no la utilicé en este la verdad. Gracias por el aporte. Un saludo!!
excelente vídeo, muchas gracias por todo lo que enseñas, todo lo que no aprendí sobre programación en la universidad lo aprendí con tus vídeos, excelente trabajo. me podrías sugerir un libro para aprender programar ya que cada vez estoy mas interesado en seguir aprendiendo, gracias de antemano
Carlos Mauricio Nina Villarroel Hola !! Gracias por el comentario. Entiendo que buscas un libro para programar en VBA Access ya que el comentario está en este curso. Lo de los libros es subjetivo pero a mi personalmente para esta materia me gustan los de Anaya, categoría programación. Concretamente el de Access 2007. Programación VBA. Un saludo
Hola Juan Sigo este curso desde el primer vídeo y era de los que programaba en vba y no sabía lo que estaba haciendo. Con este curso veo sentido a lo que hacía. Solo me gustaría que me resolvieras una duda. Yo nunca había utilizado la propiedad .value sino que lo hacía mediante me.nombredelcampo. ¿Hay alguna diferencia? Gracias por adelantado y por supuesto gracias por compartir tus conocimientos.
Ricardo Polanco Hola !! Gracias por el comentario y por seguir mis vídeos. Cuando se trata de cuadros de texto o menús desplegables (que es la mayoría de las veces) , no hay diferencia. La propiedad por defecto de estos controles es value, y eso significa que puedes ponerla o no. Es más breve no mencionar la propiedad, pero yo tengo la costumbre de hacerlo. Un saludo
pildorasinformaticas En cuanto a poner y no poner yo estoy contigo y es mejor escribir el código lo mas claro posible poniendo value y otros y a esto lo llamo buena praxis o práctica, ya que según la regla del 80/20 es decir nos pasamos el 80% leyendo código y cuanto mas claro esté mejor para nosotros o para otros que lo lean y el 20% restante es de escritura de código. Por cierto y muy importante, el comentar el código es fundamental. Saludos
Juan muchas gracias por el Curso lo sigo desde el primer vídeo, realmente hay poco gente con tanta generosidad como la tuya, de explicar esto abiertamente y desde cero. Tengo una pregunta para hacerte: hay alguna orden que me permita copiar el valor almacenado en una capo especifico de un tabla (por ejemplo un numero) y pegarlo en otra tabla en un campo especifico, (es decir copiar y pegar) pero siempre serian valores diferentes. Específicamente soy medico y tengo bases de datos con pacientes, pero no puedo mostrar el nombre en un formulario de base de dato porque eso esta prohibido, lo que si puedo mostrar es un numero de paciente (es una codificación). Cada vez que ingresa un paciente nuevo a la base de datos necesito que ese numero de paciente se copie en el sistema y luego pegarlo en diferentes campos de diferentes tablas, Se que es un poco complicado pero debe ser así. lógicamente el valor que debo copiar es siempre diferente ya que cada paciente así como cada numero es único. Muchas gracias por tu ayuda, realmente me ha sido de mucha utilidad.
Roque Carlos Fernandez Hola !! Muchas gracias por tu comentario. La forma que yo conozco para hacer tal cosa es utilizando ADO (se explica más adelante en este curso). ADO te permite examinar registros de otras tablas de la misma BBDD o incluso de otras BBDD. Una vez encontrado el registro que quieres copiar utilizando ADO, utilizarías una consulta de actualización SQL para insertar el registro copiado en otra tabla, o en varias tablas. Es complicado, pero es la única forma que yo conozco de hacer lo que pides teniendo en cuenta las restricciones que planteas. Un saludo
Vídeo 20 - 30 de noviembre de 2.014 Hola Juan Ya sé que tú haces cosas para que nosotros aprendamos nuevas funciones (Int y Mid, para este caso), sin embargo quisiera comentar: 1. Tu nos hablaste en vídeos anteriores sobre la función “Mod”, creo que es la apropiada para evitar divisiones, multiplicaciones y restas, el módulo queda más limpio e igualmente encontraremos el numero al que asignarle la letra. Estoy en lo cierto? 2. Por sola curiosidad porque se divide por 23 y no por otro número? 3. En mi país (Colombia) las empresas se identifican, para negociones comunes, tal como lo planteas con el NIF, pero las personas naturales no, como hacer si necesito tener en la misma base ambos tipos de identificación? 4. Tengo algún enredo, pues veo que tú haces módulos independientes y sin embargo utilizas resultados de otros módulos sin hace el respectivo llamado. Voy a ver como desenredo la “Pita”. 5. Hiciste un comentario que me llamó la atención: “No quiero darle el mismo nombre del módulo al del procedimiento (Sub - End Sub).” Pues bien en una oportunidad anterior te hice una consulta, que desafortunadamente no pudiste resolverme, era justamente que al ejecutarla y/o al hacer un llamado a un procedimiento me enviaba el mensaje: “Se esperaba una función o un procedimiento no un módulo”. Después de muchas frustraciones y de abandonar el llamado, pues no encontraba la solución, se me ocurrió modificar uno de los nombres, el del procedimiento o el del módulo, y todo funcionó. Concluí entonces que le daba prioridad al nombre del módulo y entonces no se podía usar nombres iguales. Podrías contarme como es la explicación y si se puede usar el mismo nombre? 6. Finalmente, excúsame por favor preguntas que para ti pueden ser muy elementales, pero como te lo he dicho varias veces el 95% de lo que sé de Código VBA, te lo debo a ti. Tenía desde hace mucho tiempo el deseo de aprender pero no había conocido tu canal, así que soy muy novato en estos temas. Chao, millón de gracias Humberto
Humberto Chinchilla Mora Hola !! Vayamos por partes: 1. La función Mod devuelve el resto de una división, mientras que Mid e Int hacen cosas totalmente diferentes. Es decir, cada una debe usarse en su ámbito y no pueden reemplazarse unas por otras. Mid extrae caracteres de un String e Int deveulve la parte entera de un número decimal. Lo que haces con una no lo puedes hacer con las otras y viceversa. 2. Se trata de un cálculo predefinido, un algoritmo. Al igual que para hallar el número de seguridad de las tarjetas de crédito (ese que son 3 cifras y se encentra en el reverso de las tarjetas) se utiliza un cálculo predefinido con todos los dígitos de la tarjeta. Son algoritmos que inventan para hacer cálculos y en este caso a un buen hombre se le ocurrió en su día este cálculo para hallar la letra del NIF. 3. En ese caso tendrías que crear dos campos clave (que se puede) o mejor aún, rediseñar la BBDD porque nadie dijo que fuera obligatorio tener ambos campos en la misma tabla. Quizás puedas tener los campos en tablas diferentes y correctamente relacionadas para obtener la información. 4. Aquí no se a qué te refieres. Efectivamente se pueden utilizar resultados de otros módulos pero para poder hacer esto es indispensable realizar una llamada a un procedimiento en algún sitio. 5. Desafortunadamente algunas preguntas que me realizáis quedan sin contestar por varios motivos: porque no las veo (recibo cientos a diario), porque se me olvidan (las dejo pendientes y al final se me olvidan) o porque me piden cosas que me llevaría más de 15 min realizar. En este caso que me comentas seguro que fue porque no la vi. Es mala idea nombrar dos cosas con el mismo nombre, en general. Para evitar tener que memorizar preguntas del tipo ¿pasa algo si llamo a dos módulos con el mismo nombre? ¿pasa algo si llamo a un módulo y a un procedimiento con el mismo nombre? ¿pasa algo si llamo a una variable y a un módulo con el mismo nombre? etc. La casuística es casi infinita. para evitar dolores de cabeza, no nombres dos cosas con el mismo nombre. 6. Son preguntas normales que surgen en un proceso de aprendizaje de lo que sea. Cuando la enseñanza es presencial, se solucionan rápido. Pero cuando la enseñanza es online, se complica un poco. Un saludo !!
pildorasinformaticas Juan, de nuevo muchas gracias de nuevo por todo. No supe hacerte la observación, me refería a que nos habías enseñado esas dos nuevas funciones. Int y Mid. Mi comentario es que en lugar de dividir por 23, luego multiplicar el entero por 23 y después restar este valor del numero original, quedaría más sencillo usar la función Mod. Pero no problem. Gracias. Apenas empiezo a mirar lo de Word. Chao Humberto
Como estas Juan, estaba viendo este video de nuevo y reduje un poco el codigo de la funcion para calcular el NIF. Lo comparto, a ver que te parece Function calculo_nif(NIF As Integer) As String Dim Resto As Integer Dim Letra As String Dim myArray As Variant myArray = Array("T", "R", "W", "A", "G", "M", "Y", "F", "P", "D", "X", "B", "N", "J", "Z", "S", "Q", "V", "H", "L", "C", "K", "E") Resto = NIF Mod 23 Letra = myArray(Resto) calculo_nif = Letra End Function Como siempre, es un placer escuchar tus videos porque cada vez descubro nuevas cosas a las que no les habia prestado atencion.
Hola Profesor, primero saludarlo, quisiera si usted puede que me auxilie con el uso del DIM, tengo una Bd donde aquí en México tenemos un registro que se llama (R.F.C.) Registro federal de Causante es único para cada persona que paga impuestos, la pregunta es como le puedo hacer para usar el DIM correctamente Ejem: Pedro Pérez García nació el 20 de Sept de 1950, y su registro quedaría así PEGP500920, donde hay que extraer las 2 primeras letras del apellido paterno (PE), después primera letra del apellido materno (G) , enseguida primera letra del Nombre(s) (P) y por último la fecha 500920, espero me pueda auxiliar , de antemano gracias saludos
Hola !! Tienes razón pero entonces obligaría a introducir ceros a la izquierda o espacios en blanco para dni cortos. No todos los dni tienen 8 carateres
De todas formas quedan por controlar muchas cosas aun, como por ejemplo, ¿qué ocurre si introducimos texto en el dni? el procedimiento function espera un long.... ¿qué ocurre si dejamos el dni vacío? en la tabla nif es clave.... lo intentaremos poco a poco
pues la verdad es que no, no haría falta. Pensaba en las máscaras de entrada en tablas, pero esto nada que ver. Pues me acabas de dar una buena idea... lo controlaremos en los próximos vídeos. Saludos !!
Dentro del Private Sub Lost Focus(), la instrucción c_nif.value = calcula_letradelnif(c_nif.value) me devuelve un mensaje de error. "Se esperaba una variable o procedimiento , no un módulo". Reconoce el procedimiento Function sólo cuando copio el procedimiento function del módulo y lo pego debajo del Private Sub Lost Focus(). Lo he revisado varias veces, pero no encuentro el error. ¿Por qué pasará esto?
Seguramente eso te pasa porque usaste el mismo nombre tanto para el módulo cómo para el procedimiento function. Cambia el nombre a cualquiera de los dos y verifica si así se corrige el error.
Function calcula_letradelnif(dni As Long) As String Dim cadena As String, resultado1 As Long, resultado2 As Long cadena = "TRWAGMYFPDXBNJZSQVHLCKE" 'dni = InputBox("Introdusca el DNI") resultado1 = Int(dni / 23) resultado2 = dni - (resultado1 * 23) calcula_letradelnif = Mid(cadena, resultado2 + 1, 1) End Function Private Sub c_nif_LostFocus() c_nif.Value = c_nif.Value & " " & calcula_letradelnif(c_nif.Value) End Sub
Pues como hace años que grabé este vídeo, ya no recuerdo el código que hice en él. Pero si tu código lo has probado, funciona y tiene menos líneas que el mío, entonces sí es más sencillo. También hay que mirar si a las alturas de este vídeo en el curso, he explicado lo necesario para hacer más simple el código.... pero como yo siempre digo: "en programación siempre hay varios caminos para llegar a Roma". Un saludo!!
Juan, mil gracias por tanta dedicación y por querer compartir lo que sabes y de qué manera. No tengo preguntas, sólo gratitud. Me impresiona la pedagogía, la claridad, la organización en sus clases. Un abrazo.
Muchísimas gracias por el comentario. Me alegro de que te gusten los vídeos. Un saludo!
La verdad es que tiene una forma de enseñar bastante didactica. Sus explicaciones son bastante claras y ayudan a entender de una manera muy sencilla esto que parece bastante complejo. Muchas gracias, recibe un saludo desde ACAYUCAN, VERACRUZ, MEXICO.
Gracias por el comentario. Me alegro de que te guste el curso. Un saludo!!
Aprovechando la cuarentena aca en Chile, he hecho un refresh de este curso, lo encuentro brillante profesor en terminos pedagogicos, ¡ Dios le bendiga de sobremanera por su tiempo !...Un abrazo desde Stgo. de Chile
No sé si se ha comentado antes, pero la letra en el NIF se usa muchísimo para evitar errores de entrada. Lo que se llama un "dígito de control". En la administración (donde trabajo) nos evita muchísimos errores de tecleo, pues cuando una persona escribe mal su DNI (o el propio usuario al entrar el dato) la letra no coincide y el sistema no nos deja continuar. Me ha encantado tu forma de hacerlo, Juan. Me copio. Hasta ahora lo hacía creando una matriz con las posiciones de las letras, pero es mucho más tedioso. ¡GRACIAS!
jajajaj Me divierto mucho con tus errores de escritura pero eres un crack enceñando. Yo tenía algo de experiencia con C# y eso me ayuda pero el 80% de lo bien que lo paso viendo el curso y aprendiendo es gracias a tus metodos de enceñansa. Gracias y saludos desde tenerife.
Profe! Mi respeto por su sabiduria en el campo de programacion. Sus videos me an sido de mucha ayuda ya que estoy principiando en esto de programacion. Gracias por sus videos que Dios le bendiga..
+ogir noel d Gracias a ti por el comentario y por seguir mis vídeos. Un cordial saludo
Hola, explica demasiado bien y he aprendido muchísimo, saludos desde Colombia, aquí no tenemos NIF sino NIT y la letra es un DV que es un número, es decir, se llama Numero de Identificación Tributaria y un Dígito de Verificación.
muy bueno el curso, excelentemente explicado, super claro en los conceptos , muy bueno. Yo hago sistemas con VB.net 2010 y mysql como DB e imprimir informes con crystal report. Me intereso meterme en el mundo de access VBA y veo que es muy rapido para desarrollar. Muchas Gracias por el aporte , bueno continuo viendo tus videos..
+GUSTAVO juarez Gracias por el comentario. Me alegro de que te guste el curso. Un saludo
Nuevamente Excelente. Desde Venezuela
Gracias por la información!! Muy bien explicado y muy útil. Cómo puedo hacer para que el formulario se ejecute como NO MAXIMIZADO?? Desde dentro de Access, cuando paso de Modo Diseño a Formulario, me ocupa toda la ventana de la solapa. Lo he puesto como modal, movible y demás pero no hay caso. Gracias por la respuesta.
Un gran trabajo, tal como nos tienes habituados. Gracias
Gracias. Un saludo
Hola Juan, creo que la utilidad de la letra del NIF es para evitar errores en la introducción del mismo, de forma que el número y la letra deben corresponderse. Lo mismo que los dígitos de control de una CCC ó el IBAN. Así pues, pienso que el formulario debería contrastar la letra introducida por el usuario con la que "debería" haber introducido, y rechazar el NIF introducido en su caso. Muchas gracias.
Fernando Rosa Es correcto. En algún vídeo (no recuerdo exactamente en cuál) pongo precisamente ese ejemplo, es decir, un formulario que se encarga de validar la letra NIF de un DNI utilizando para ello el logaritmo que halla la letra NIF en base a los dígitos del DNI.
Un saludo
Hola, Ante todo gracias por tu trabajo; realmente es de gran valor.
Solo me gustaria recordarte que tienes la funcion Mod que te da el resto, para calcular DNI es mejor que no dividir, extraer parte entera, multiplicar y restar....
+Miguel Garcia Correcto!! Y creo que la utilizo en el curso de VBA Excel. No se por qué no la utilicé en este la verdad. Gracias por el aporte. Un saludo!!
Me encanta, estupendo como todos y deseando ver el siguiente
Excelente maestro!!!! Muchisimas gracias por sus buenisimas ense;anzas
Gracias por tu comentario. Un saludo!!
hola juan, cuantos videos conforman este curso
CDEI KNOTICA Estos:
ua-cam.com/play/PLC3E8FA619DF71898.html
Un saludo
excelente vídeo, muchas gracias por todo lo que enseñas, todo lo que no aprendí sobre programación en la universidad lo aprendí con tus vídeos, excelente trabajo.
me podrías sugerir un libro para aprender programar ya que cada vez estoy mas interesado en seguir aprendiendo, gracias de antemano
Carlos Mauricio Nina Villarroel Hola !! Gracias por el comentario. Entiendo que buscas un libro para programar en VBA Access ya que el comentario está en este curso. Lo de los libros es subjetivo pero a mi personalmente para esta materia me gustan los de Anaya, categoría programación. Concretamente el de Access 2007. Programación VBA.
Un saludo
Hola Juan
Sigo este curso desde el primer vídeo y era de los que programaba en vba y no sabía lo que estaba haciendo. Con este curso veo sentido a lo que hacía. Solo me gustaría que me resolvieras una duda.
Yo nunca había utilizado la propiedad .value sino que lo hacía mediante me.nombredelcampo. ¿Hay alguna diferencia?
Gracias por adelantado y por supuesto gracias por compartir tus conocimientos.
Ricardo Polanco Hola !! Gracias por el comentario y por seguir mis vídeos. Cuando se trata de cuadros de texto o menús desplegables (que es la mayoría de las veces) , no hay diferencia. La propiedad por defecto de estos controles es value, y eso significa que puedes ponerla o no.
Es más breve no mencionar la propiedad, pero yo tengo la costumbre de hacerlo. Un saludo
pildorasinformaticas En cuanto a poner y no poner yo estoy contigo y es mejor escribir el código lo mas claro posible poniendo value y otros y a esto lo llamo buena praxis o práctica, ya que según la regla del 80/20 es decir nos pasamos el 80% leyendo código y cuanto mas claro esté mejor para nosotros o para otros que lo lean y el 20% restante es de escritura de código.
Por cierto y muy importante, el comentar el código es fundamental.
Saludos
Juan muchas gracias por el Curso lo sigo desde el primer vídeo, realmente hay poco gente con tanta generosidad como la tuya, de explicar esto abiertamente y desde cero.
Tengo una pregunta para hacerte: hay alguna orden que me permita copiar el valor almacenado en una capo especifico de un tabla (por ejemplo un numero) y pegarlo en otra tabla en un campo especifico, (es decir copiar y pegar) pero siempre serian valores diferentes. Específicamente soy medico y tengo bases de datos con pacientes, pero no puedo mostrar el nombre en un formulario de base de dato porque eso esta prohibido, lo que si puedo mostrar es un numero de paciente (es una codificación). Cada vez que ingresa un paciente nuevo a la base de datos necesito que ese numero de paciente se copie en el sistema y luego pegarlo en diferentes campos de diferentes tablas, Se que es un poco complicado pero debe ser así. lógicamente el valor que debo copiar es siempre diferente ya que cada paciente así como cada numero es único.
Muchas gracias por tu ayuda, realmente me ha sido de mucha utilidad.
Roque Carlos Fernandez Hola !! Muchas gracias por tu comentario. La forma que yo conozco para hacer tal cosa es utilizando ADO (se explica más adelante en este curso). ADO te permite examinar registros de otras tablas de la misma BBDD o incluso de otras BBDD. Una vez encontrado el registro que quieres copiar utilizando ADO, utilizarías una consulta de actualización SQL para insertar el registro copiado en otra tabla, o en varias tablas.
Es complicado, pero es la única forma que yo conozco de hacer lo que pides teniendo en cuenta las restricciones que planteas.
Un saludo
Vídeo 20 - 30 de noviembre de 2.014
Hola Juan
Ya sé que tú haces cosas para que nosotros aprendamos nuevas funciones (Int y Mid, para este caso), sin embargo quisiera comentar:
1. Tu nos hablaste en vídeos anteriores sobre la función “Mod”, creo que es la apropiada para evitar divisiones, multiplicaciones y restas, el módulo queda más limpio e igualmente encontraremos el numero al que asignarle la letra. Estoy en lo cierto?
2. Por sola curiosidad porque se divide por 23 y no por otro número?
3. En mi país (Colombia) las empresas se identifican, para negociones comunes, tal como lo planteas con el NIF, pero las personas naturales no, como hacer si necesito tener en la misma base ambos tipos de identificación?
4. Tengo algún enredo, pues veo que tú haces módulos independientes y sin embargo utilizas resultados de otros módulos sin hace el respectivo llamado. Voy a ver como desenredo la “Pita”.
5. Hiciste un comentario que me llamó la atención: “No quiero darle el mismo nombre del módulo al del procedimiento (Sub - End Sub).” Pues bien en una oportunidad anterior te hice una consulta, que desafortunadamente no pudiste resolverme, era justamente que al ejecutarla y/o al hacer un llamado a un procedimiento me enviaba el mensaje: “Se esperaba una función o un procedimiento no un módulo”. Después de muchas frustraciones y de abandonar el llamado, pues no encontraba la solución, se me ocurrió modificar uno de los nombres, el del procedimiento o el del módulo, y todo funcionó. Concluí entonces que le daba prioridad al nombre del módulo y entonces no se podía usar nombres iguales. Podrías contarme como es la explicación y si se puede usar el mismo nombre?
6. Finalmente, excúsame por favor preguntas que para ti pueden ser muy elementales, pero como te lo he dicho varias veces el 95% de lo que sé de Código VBA, te lo debo a ti. Tenía desde hace mucho tiempo el deseo de aprender pero no había conocido tu canal, así que soy muy novato en estos temas.
Chao, millón de gracias
Humberto
Humberto Chinchilla Mora Hola !! Vayamos por partes:
1. La función Mod devuelve el resto de una división, mientras que Mid e Int hacen cosas totalmente diferentes. Es decir, cada una debe usarse en su ámbito y no pueden reemplazarse unas por otras. Mid extrae caracteres de un String e Int deveulve la parte entera de un número decimal. Lo que haces con una no lo puedes hacer con las otras y viceversa.
2. Se trata de un cálculo predefinido, un algoritmo. Al igual que para hallar el número de seguridad de las tarjetas de crédito (ese que son 3 cifras y se encentra en el reverso de las tarjetas) se utiliza un cálculo predefinido con todos los dígitos de la tarjeta. Son algoritmos que inventan para hacer cálculos y en este caso a un buen hombre se le ocurrió en su día este cálculo para hallar la letra del NIF.
3. En ese caso tendrías que crear dos campos clave (que se puede) o mejor aún, rediseñar la BBDD porque nadie dijo que fuera obligatorio tener ambos campos en la misma tabla. Quizás puedas tener los campos en tablas diferentes y correctamente relacionadas para obtener la información.
4. Aquí no se a qué te refieres. Efectivamente se pueden utilizar resultados de otros módulos pero para poder hacer esto es indispensable realizar una llamada a un procedimiento en algún sitio.
5. Desafortunadamente algunas preguntas que me realizáis quedan sin contestar por varios motivos: porque no las veo (recibo cientos a diario), porque se me olvidan (las dejo pendientes y al final se me olvidan) o porque me piden cosas que me llevaría más de 15 min realizar. En este caso que me comentas seguro que fue porque no la vi. Es mala idea nombrar dos cosas con el mismo nombre, en general. Para evitar tener que memorizar preguntas del tipo ¿pasa algo si llamo a dos módulos con el mismo nombre? ¿pasa algo si llamo a un módulo y a un procedimiento con el mismo nombre? ¿pasa algo si llamo a una variable y a un módulo con el mismo nombre? etc. La casuística es casi infinita. para evitar dolores de cabeza, no nombres dos cosas con el mismo nombre.
6. Son preguntas normales que surgen en un proceso de aprendizaje de lo que sea. Cuando la enseñanza es presencial, se solucionan rápido. Pero cuando la enseñanza es online, se complica un poco.
Un saludo !!
pildorasinformaticas Juan, de nuevo muchas gracias de nuevo por todo.
No supe hacerte la observación, me refería a que nos habías enseñado esas dos nuevas funciones. Int y Mid.
Mi comentario es que en lugar de dividir por 23, luego multiplicar el entero por 23 y después restar este valor del numero original, quedaría más sencillo usar la función Mod. Pero no problem. Gracias. Apenas empiezo a mirar lo de Word.
Chao
Humberto
Juan, hasta de tus errores aprendemos, que bueno que no edites esas situaciones! =)
Muy bien y muchas gracias.
Saludos.
Pienso que puede ser de utilidad el que me equivoque. Un saludo
muy bien explicado
Como estas Juan, estaba viendo este video de nuevo y reduje un poco el codigo de la funcion para calcular el NIF. Lo comparto, a ver que te parece
Function calculo_nif(NIF As Integer) As String
Dim Resto As Integer
Dim Letra As String
Dim myArray As Variant
myArray = Array("T", "R", "W", "A", "G", "M", "Y", "F", "P", "D", "X", "B", "N", "J", "Z", "S", "Q", "V", "H", "L", "C", "K", "E")
Resto = NIF Mod 23
Letra = myArray(Resto)
calculo_nif = Letra
End Function
Como siempre, es un placer escuchar tus videos porque cada vez descubro nuevas cosas a las que no les habia prestado atencion.
Muchas gracias por el comentario y sobre todo por el aporte. Un saludo!!
Hola Profesor, primero saludarlo, quisiera si usted puede que me auxilie con el uso del DIM, tengo una Bd donde aquí en México tenemos un registro que se llama (R.F.C.) Registro federal de Causante es único para cada persona que paga impuestos, la pregunta es como le puedo hacer para usar el DIM correctamente Ejem: Pedro Pérez García nació el 20 de Sept de 1950, y su registro quedaría así PEGP500920, donde hay que extraer las 2 primeras letras del apellido paterno (PE), después primera letra del apellido materno (G) , enseguida primera letra del Nombre(s) (P) y por último la fecha 500920, espero me pueda auxiliar , de antemano gracias saludos
+Jose Manuel Jimenez Hola !! ¿El DIM tiene siempre el mismo número de caracteres?
que buen video
Para pulirlo un poco mas, la entrada del dni deberia de ser una cadena de 8 caracteres de longitud ;-)
Me gusta como lo explicas, sigue asi...
Hola !! Tienes razón pero entonces obligaría a introducir ceros a la izquierda o espacios en blanco para dni cortos. No todos los dni tienen 8 carateres
De todas formas quedan por controlar muchas cosas aun, como por ejemplo, ¿qué ocurre si introducimos texto en el dni? el procedimiento function espera un long.... ¿qué ocurre si dejamos el dni vacío? en la tabla nif es clave.... lo intentaremos poco a poco
pildorasinformaticas Bueno como es una string no haria falta lo de los 0 a la izq ¿no?
pues la verdad es que no, no haría falta. Pensaba en las máscaras de entrada en tablas, pero esto nada que ver. Pues me acabas de dar una buena idea... lo controlaremos en los próximos vídeos. Saludos !!
Pildorasinformaticas tienes razon, mi msg anterior no vale.
Ok poco a poco :)
Dentro del Private Sub Lost Focus(), la instrucción c_nif.value = calcula_letradelnif(c_nif.value) me devuelve un mensaje de error. "Se esperaba una variable o procedimiento , no un módulo". Reconoce el procedimiento Function sólo cuando copio el procedimiento function del módulo y lo pego debajo del Private Sub Lost Focus(). Lo he revisado varias veces, pero no encuentro el error. ¿Por qué pasará esto?
Seguramente eso te pasa porque usaste el mismo nombre tanto para el módulo cómo para el procedimiento function. Cambia el nombre a cualquiera de los dos y verifica si así se corrige el error.
excelente
muy monstruo usted!!!
+Jorge Ivan Molina jejeje gracias !!
6:34 Creacion del formulario
29:40 accion al perder el foco
Al ejecutar el código me da un error en " c_nif.Value = c_nif & "-" & calcula_letradenif(c_nif.Value)", por que c_nif no puede ser nulo
Use debug.print para ver el resultado de las operaciones y sin usar int me salían siempre enteros en la ventana de inmediato
Gracias.
Function calcula_letradelnif(dni As Long) As String
Dim cadena As String, resultado1 As Long, resultado2 As Long
cadena = "TRWAGMYFPDXBNJZSQVHLCKE"
'dni = InputBox("Introdusca el DNI")
resultado1 = Int(dni / 23)
resultado2 = dni - (resultado1 * 23)
calcula_letradelnif = Mid(cadena, resultado2 + 1, 1)
End Function
Private Sub c_nif_LostFocus()
c_nif.Value = c_nif.Value & " " & calcula_letradelnif(c_nif.Value)
End Sub
y no es mas sencillo hacer:
dni = InputBox("introduce dni:")
dni = dni Mod 23
MsgBox dni
calcular el mod del dni
saludos.
Pues como hace años que grabé este vídeo, ya no recuerdo el código que hice en él. Pero si tu código lo has probado, funciona y tiene menos líneas que el mío, entonces sí es más sencillo. También hay que mirar si a las alturas de este vídeo en el curso, he explicado lo necesario para hacer más simple el código.... pero como yo siempre digo: "en programación siempre hay varios caminos para llegar a Roma". Un saludo!!