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
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
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 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
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
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
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
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..
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 < < <
- Compartir respuesta