Ingresar datos en un userform y que me salga un msg que el dato no puede ser ingresado porque restrin.. (vba excel

Si me pueden ayudar... Tengo una b/d donde tengo más de 2000 registrado, esto lo ingreso mediante un userform, pero lo que deseo al momento de registrarlo nuevamente si esta activo lo registro, pero si no, que me salga un msgbox comunicando acceso denegado por el motivo restringido... Estas opción esta en una celda... Más o menos así...

N INTERNO     ApellidosNombres    DNI                  condicion 

223                       valera diaz          12323456            restringuido

2333                     francisc  juezgues    0087654        acceso

1 respuesta

Respuesta
1

Podrías explicarte un poco más que es lo que deseas hacer, pasar foto del userform o algo que ayude a entender mejor tu caso...

Estimado gracias por el interes

lo que pasa es que tengo un archivo de Excel ejecutado en vbexcel, para ingreso de datos, te adjunto la toma principal....al ingresar su nombre me va mostrando en un list,, pero si la persona tiene una restricción como decir , Licencia suspendida, ….que salga un msg y me diga persona suspendida por tal motivo....de este modo no me graba...el registro.... y me muestre el motivo, espero su apoyo .. gracias

Osea dejame ver si entendi... tu tienes una hoja nombre "X" con 2000 registros de licencias y un userform con el cual tomas los nombres de los registros de la hoja "X" y se llenan los campos para luego guardarlo en la hoja "Y" hasta aqui vamos bien?

Lo que tu quieres hacer es que cuando se llene los campos de la hoja "X" si la licencia de dicho registro esta "Suspendida" te salte una alerta en un mensaje y que finalize aqui la macro sin guardar nada en la hoja "Y", pero si la licencia de dicho registro no dice "Suspendida" que guarde los datos en la hoja "Y"

¿Es esto lo que deseas hacer?

De ser correcto necesito que me digas en que campo es el que se llena con la licencia o si lo cargas en el listbox en que columna aparece...

Osea dejame ver si entendi... tu tienes una hoja nombre "X" con 2000 registros de licencias y un userform con el cual tomas los nombres de los registros de la hoja "X" y se llenan los campos para luego guardarlo en la hoja "Y" hasta aqui vamos bien?.....(si perfecto )…

te describo a la brevedad….al ingresar el nombre, automáticamente se va llenando el listbox, de los datos ingresados ,,al mostrarla en el listbox doy dobe click,.. se llenan los datos de la persona en los texbox que se visualizan y sino están, comienzo a llenar todos los Textbox para luego grabar......

lo que deseo es que cuando voy ingresando y si la persona se encuentra Suspendida,..que salga un mensaje.. detallando la suspensión y por cuantos años....y que no me deje grabar el dato...estos datos se encuentran en el cuadro que te envio...y que me de un aviso de los suspendidos y cuanto falta para su levante de suspensión...te agradezco mucho tu interés ...mil gracias

Si ya cuentas con una macro que te trae los datos al escribir el nombre quizás te seria más fácil Crear un textbox o un label que te capture el estado "Suspendido" de estarlo, ¿de lo contrario que diga vigente o que no diga nada no?ç

¿Me parece más fácil esta opción que otra ya que de otra forma tendrías que crear otra macro y agregarsela al botón "Guardar" para que recorra el registro solamente por el estado no te parece que estarías perdiendo tiempo esperando el resultado siendo que lo podrías tener de una cuando escribes el nombre?

Es solo una humilde opinión no se que pensaras tu =) je je

Podrías crear por ejemplo un textbox que al momento de ingresar el nombre te capture el estado, si esta suspendido que se haga visible mostrando el "Suspendido", ¿de caso contrario que quede invisible para no tener un campo vacío que te parece?

Algo como esto

If TxtEstado.value = "Suspendido" Then
 TxtEstado.Visible = True
Else
 TxtEstado.Visible = False
End if

y lo mismo en tu boton "Guardar"

If TxtEstado.value = "Suspendido" Then 
   Msgbox "Esta persona tiene la licencia suspendida.",Vbinformation,"Error al guardar registro"
   Exit Sub
End if

si perfecto estimado lo voy a ingresar ..

gracias

estimado lo probé.. desaparece, mira te envió el archivo completo haber si me puedes ayudar te agradezco...no puedo enviar el archivo de Excel, hacia donde te lo puedo enviar...

te agradezco

Disculpa la toma primera no es del archivo te envío como es ...

Si te das cuenta conforme voy ingresando el nombre se visualiza en el listbox si existe ... si no se vuelve en blanco para seguir ingresar los datos... si exite le doy doble click en el mouse y se llena los campos necesarios, como nombre, dni, clase, fecha de nacimiento,,, como te comente .. haber por favor …. Te agradezco

Si si te comprendo, ¿tienes un listbox con búsqueda al cambio en el textbox y un evento click en el listbox al dar click en un item hasta aquí todo claro... tu quieres que al dar click en un item se llene el textbox Condición y el restrinccion en caso de que existan verdad?

Mi mail es: [email protected]

Si quieres enviame el archivo y bicho igualmente aclarame lo que deseas porque no sirve de nada que me lo envies sino se lo que quieres hacer xD jeje saludos...

Si supiste crear esta macro de búsqueda, te sera muy fácil llenar también los textbox Condición y Restricción y crearle un IF al botón guardar que los revise antes de continuar..

Pero enviame el archivo si lo deseas que con gusto te lo reviso =)

Te envíe a tu correo

Te reenvíe tu archivo compañero con tu problema resuelto, el tema es que tienes unos(varios) errores en todo tu archivo =( ... se cierra solo, o estas mirando el código y se abre el UserForm xD je je súmale a eso el desorden de código que tienes... el descuido en el código muchas veces te trae problemas ... ten en cuenta este consejo..

Por ejemplo si armas For , un IF dentro y dentro del IF hay otro IF :

toma en cuenta los codigos para futuro =)

'De este modo esta mal! , puede que te funcione pero te puede generar errores
Sub Ejemplo()
Uf = Range("A" & Rows.Count).End(xlup).Row
For i = 1 To Uf
If Cells(i,1).Value = Cells(i,2).Value Then
If Cells(i,2).Value <> Cells(i,3).Value Then
Cells(i,4).Value = Cells(i,1).Value
Else
MsgBox" Datos Son Identicos",Vbinformation,"Info para Usuario"
Exit Sub
End If
Else
MsgBox" Datos Son Diferentes",Vbinformation,"Info para Usuario"
Exit Sub
End if
Next i
End Sub

Lo mejor seria que armas cada parametro con sus respectivos espacios

'De este modo esta bien! , puede esta todo bien estructurado
Sub EjemploBien()
Uf = Range("A" & Rows.Count).End(xlup).Row
For i = 1 To Uf
   If Cells(i,1).Value = Cells(i,2).Value Then
      If Cells(i,2).Value <> Cells(i,3).Value Then
         Cells(i,4).Value = Cells(i,1).Value
      Else
         MsgBox" Datos Son Identicos",Vbinformation,"Info para Usuario"
         Exit Sub
      End If
   Else
      MsgBox" Datos Son Diferentes",Vbinformation,"Info para Usuario"
      Exit sub   
   End if
Next i
End Sub

No tomes la macro para usarla que no debe servir para nada xD jeje toma  la idea de como deberian estar estructuradas tus macros que es a donde quiero llegar =)

Saludos no olvides valorar la respuesta si te a sido útil

¡Gracias! ..excelente amigo...excelente

mil gracias

Perdona compañero te coloque un if y funciona al iniciar el form, pero me olvidé del TextBox de búsqueda porque buscas con das ítem el cual sólo te trae 10 columnas ... Y tú tienes 24, diseñe un método para que te las traiga todas pero creo que tendrás que reconfigurar todo tu form, dame un segundo que me vep si me puedo conectar al servidor del laburo que deje el trabajo haya y te lo paso

¡Gracias! 

Ya te lo envíe

¡Gracias! estimado.. lo estoy bajando ...ahora lo voy a probar...

estimado una consulta al momento que sale en la condición .suspendido, NO ME DEJA GRABAR..hasta ahí ok,, pero si le agrego una S al final "SUSPENDIDOS", me graba normal ,,como puedo hacer ahí, mi estimado gracias

Es porque esta buscando específicamente la palabra "SUSPENDIDO", excelente observación je je no me di cuenta de ese punto ni del tema de las mayúsculas ni minúsculas..

Cambia esta línea

If TextBox10 <> "NINGUNA" Or Condicion = "SUSPENDIDO" Then

Por esta linea

If UCase(TextBox10) <> "NINGUNA" Or UCase(Condicion) Like "*" & "SUSPENDIDO" & "*" Then

De este modo ahora si , si dice "asdlfdfSUSPENDIDO" u "SUSPENDIDOasldkjf" igual lo va a encontrar, asi tambien si esta en minuscula o mayuscula, porque con el parametro "UCASE" pasas todo a mayuscula para que concuerde y con el parametro "LIKE" buscas toda palabra que contenga

"suspendido" en cualquier posicion... =) pruebalo y me dices compañero.

¡Gracias! ..perfecto mi estimado perfecto … y disculpa las exigencias....mira todo anda perfecto,,, pero si lo cambio  lo que visualiza ahí  "SUSPENDIDO", A ACEPTADO... me lo graba normal,,,. como puedo hacer....si encontró SUSPENDIDO ..que todo se bloque... sin acceso a grabar ni actualizar...después de que salga el mensaje ...se cierra pero todo esta bloqueado para ingresar este registro ..

No comprendo a que te refieres con que si lo cambias... ¿te refieres a los TextBox? Si es eso entra al vba haz click en los TextBox que no quieres que nadie escriba busca la propiedad "locked" que por defecto viene en "False" y cambiala a "True"

Te aviso por sino lo notaste que te desactive el label de la hora que era eso lo que trancaba todo por estar continuamente en ejecución

¡Gracias! .. Ah ya ok... No lo que deseo es que al encontrar que este usuario esta restringido ... que se bloquee todas las acciones .. de ingresar, actualizar ... y hasta los texybox... y al momento de aceptar en mensaje de bloqueo me limpie las casillas para ingresar otro nuevo... gracias estimado

Puedes ejecutar el botón de limpiar registro después del mensaje...

Con esta línea debajo del mismo y antes del "exit sub"

CommandButton2.Value = True

Te quedaria asi

If TextBox10 <> "NINGUNA" Or Condicion = "SUSPENDIDO" Then
    MsgBox "Al parecer este funcinario contiene alguna restriccion u suspencion... lamentablemente no puede continuar.", vbExclamation, "ALERTA DE RESTRICCION"
    CommandButton2.Value = True
    Exit Sub
End If

¡Gracias! Lo probare estimado ...gracias por tu apoyo y paciencia 

Te di esa línea porque para mí punto de vista no tiene mucho sentido bloquear todo para luego limpiarlo, pero también se puede hacer, podrías crear una macro y poner debajo del mensaje en lugar del botón

Call NombreDeLaMacro

Para que bloquee todo y en el botón limpiar otra macro que desbloquee todo

¡Gracias! Excelente … ni más, ni más... abra otra forma para registrar el día de ingreso sin activar lo que habías desactivado,,.. ¿automatiamente?

Saludos

Lo que yo desactive está constantemente agregando "1 segundo a la hora actual

Podrías sólo poner en el modo initialize label11=format(now,"dd-mm-yyyy hh:mm:ss")

Creo que era ese el formato que tenías, revisalo por las dudas, porque te estoy escribiendo desde el cel y no recuerdo bien...

Si lo haces así al iniciar el form se cargara la fecha actual y la hora lo único que no se estará constantemente actualizando será fija hasta que cierres el form y lo vuelvas a abrir

Si tu usas la fecha y hora para guardar registros podrías ponerlo dentro del botón tmb para que se actualize antes de guardar

¡Gracias!

Estimado buenas tardes... Mira copie tus códigos a este formulario que ssta más completo pero me sale este error míralo... ¿a qué de debe?

Yo a tus datos lees cree una tabla llamada "DatosAgenda" para que se actualize solo sin tener que buscar la ultima fila ni columna, debe de ser eso.. revisa el otro formulario

¡Gracias! ..bien perfecto... lo converti en una tabla perefecto gracias

Perfecto hasta ahí todo bien..

Pero sucede como tengo más de 40000 registro se hace demasiado lento .. ¿lentísimo al ingresar una letra... a que debe a la cantidad de registro?... porque te comento que con el anterior código que te envíe,, era rápido... saludos … gracias... de antemano

No debería ser lento, yo te envíe 2 versiones de búsqueda, una que enviaba a la hoja"TEMPORAL" que ese me parece que no sirve porque con solo 5 registros es lento, me imagino lo que demora con 40000, y la otra version de búsqueda sencilla que es rápida, pero el inconveniente es que se borran los encabezados de columna

Usa el segundo (Sin encabezados) porque el primero no te sirve con tantos registros porque demora una eternidad..

¡Gracias! estimado disculpa mi ignorancia a que te refieres sobre encabezados

Ja ja no hay drama compañero, me refiero a los encabezados del listbox que serian los que tienes en la hoja, ¿no notaste que ahora te aparecen en el listbox? xD ja ja antes no estaban ahí...

Te los cargue con el parámetro

.ColumnHead = True

Yo te deje un for armado estilo

For y = 1 To Range("A11").End(xlDown).Row
      .List(.ListCount - 1, 0) = Range("A" & y)

y otro dentro de un with Sheets("temporal")

 with Sheets("temporal") 

que va referido a la hoja temporal que te cree

El del with no te sirve.. elimínalo, usa el primero que fue el que te deje activo

Si estas a gusto con toda mi ayuda: Invitame un cafe

ESTIMADO.., disculpa agregue una cantidad de 12000 registros en la base de datos, que has creado con los encabezados en el listbox3...pero al momento de ingresar una letra en el textbox del apellido,...se demora demasiado al buscar ...recontra demasiado....que puede ser... te agradezco mucho

Te cree un ejemplo quizás te sirva de referencia para guiarte en tu problema de búsqueda je je, este con encabezados y 300.000 registros... (revisa el efecto de apertura del userform xD ja ja me quedo re buena onda ja ja

Es un broma solo me gusto para darle un efecto para que uno no se aburra esperando que abra, pensando que se tranco excel que es algo muy común)

El archivo pesa bastante ya que le puse 300 mil registros para probar la demora... pero ten paciencia para descargarlo, " la paciencia es una virtud U.U " je je

DESCARGAR EJEMPLO DE LISTBOX


Si estas a gusto con toda mi ayuda: > > > Invitame un cafe < < <

¡Gracias! ...estimado te agradezco mucho por tu tiempo...tema resuelto ..

gracias

Me alegro que hayas terminado tu proyecto...

Que fastidio cuando el corrector de esta página te quita la mitad de lo que escribís xD jeje no olvides cerrar la pregunta

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas