Buen día, necesito ayuda ya que estoy programando una macro que al hacer click en un botón me ingrese los datos de un formulario en una planilla, tengo lista esa parte, pero ahora necesito que mediante el mismo botón se borren los datos ya ingresados, y que al reingresar un dato envíe un mensaje que el dato se encuentra ya registrado, desde ya muchas gracias Saludos
Respuesta de Isaac Reyes
1
1
Isaac Reyes, Es mejor enseñar a pescar que dar el pescado
Tu pregunta es muy genérica, si la detallas un poco quizá te pueda ayudar. ¿Cómo se organizan los datos en la hoja? ¿En forma de tabla? ¿Qué dato es el que no se debe repetir? Vendría a ser como el campo clave.
Primero gracias por el interés en la pregunta, segundo mira los datos son en forma de formulario como ej: Nombre Rut Etc. Y se organizan en la segunda hoja de forma Nombre Rut Etc. Y lo que necesito es que no se repitan los datos ya ingresados, por ser ingresar datos de 2 o 3 formularios, y que si vuelvo por ejemplo a anotar un rut que ya esta en los registros me envíe el mensaje que el rut ya esta registrado, y claro que al ingresar los datos mediante el botón el formulario (hoja1) quede en blanco para el siguiente registro, ojala se entienda Saludos
Ahora está más claro. Para vaciar el formulario, utiliza este procedimiento (siempre y cuando sea un UserForm) Private Sub subLimpiar() For i = 0 To Me.Controls.Count - 1 If TypeName(Me.Controls(i)) = "TextBox" Or _ TypeName(Me.Controls(i)) = "ComboBox" Then Me.Controls(i).Text = "" End If Next End Sub Lo que hace es eliminar todos el contenido de todos los campos que son textbox o combobox. Debe estar en la sección de código del formulario, ya que la palabra reservada "Me" hace referencia al objeto que es dueño de la sección de código (si lo pones en un módulo te enviará un error y si lo agregas a la sección de código de una hoja, "Me" hace referencia a la hoja). Si está ingresando los datos en una planilla y no hay un patrón en ella, el procedimiento debería ser el siguiente: 'Para el ejemplo, voy a asumir que tienes los campos NOMBRE en B3 RUT en E3 DIRECCION en B4 Private Sub subLimpiar() Me.Range("B3").Clear 'Limpia nombre Me.Range("E3").Clear 'Limpia RUT Me.Range("B4").Clear 'Limpia direccion End Sub 'Ahí lo adaptas a tu necesidad Para limpiar, simplemente la llamas de algún lugar de la siguiente forma SubLimpiar --------- Para que no se repitan los datos (lo que vamos a verificar es el RUT) 'buscar en una columna Function buscaEnCol(hojaBusq As Worksheet, _ strCol As String, _ strValor As String) As Double Dim resulta As Range Set resulta = hojaBusq.Range(strCol & ":" & strCol).Find(strValor, _ hojaBusq.Range(strCol & "65536").End(xlUp), _ LookIn:=xlValues, LookAt:=xlWhole) If (Not resulta Is Nothing) Then buscaEnCol = resulta.Row End If End Function Esta función busca un dato en una columna y si existe, devuelve el número de la fila en que están los datos, si no existe, devuelve 0. ¿Cómo usarla? Supongamos que el RUT lo tienes en la columna B de la hoja "Lista" [OJO: Al irte a la sección de código, el campo (Name), de las propiedades de la hoja, debe tener el nombre Lista, no el campo Name - La diferencia la hacen los paréntesis ()] La forma de llamarla sería filaResult = BuscaEnCol (Lista, "B", valorRut) Donde: filaResult debe ser una variable de tipo Double ValorRut debe ser el RUT que desear verificar si existe o no. Si filaResult es un número mayor que 0, entonces el RUT ya existe en la columna B.
mmm me quedo algo claro, pero al ingresar el código para borrar la información me borra todo el formato, y el tema del aviso necesito que sea como mensaje de alerta si lo había pensado hacer con la fuuncion buscar, pero necesito que salte como un mensaje, no se si se podrá enviar un archivo para explicar mejor la idea de lo que necesito Saludos