El objetivo de este artículo es la de crear un formulario
que nos sirve para además de introducir datos, tener la posibilidad de
buscarlos y modificarlos. En un artículo
anterior habíamos visto como crear un formulario simple para ingreso de
datos.
Por otro lado ya hemos visto varios artículos de cómo
buscar datos sin embargo esta vez vamos a ver una forma sencilla de efectuar
una búsqueda usando el formulario pero con formulas ya conocidas. Siempre
empezamos con lo más básico para luego ir agregando funcionalidades e ir
creando cosas más complejas.
Antes de empezar vamos a hablar de otras posibilidades que
tenemos para manejar datos en Excel. Hay una función que propone para trabajar
con formularios. Es muy fácil de usar y
puede servir para nuestro cometido sin necesidad en meterse en el uso de VBA o
programación en Excel. Lo pueden chequear en la página de Microsoft con el
nombre “Agregar,
editar, buscar y eliminar filas usando un formulario de datos”.
En este artículo vamos a ver cómo construir un formulario
con el cual podemos agregar datos, y luego poder modificarlos. Además podemos
efectuar una búsqueda por código. También es posible modificar cantidades, que
generalmente es lo que plantea manejar estos tipos de datos.
Click en la imagen para ver el video o en este link.
Elementos básicos:
En el artículo
anterior habíamos visto como crear el formulario e introducir los botones,
etiquetas y cajas de texto. A Continuación vamos a describir dichos elementos
con los nombres asignados para la aplicación.
1.
Formulario (UserForm): El formulario se
llama “Ingreso” y el nombre visible es para este caso “Stock”.
Es decir que las propiedades:
o Name
= Ingreso
o Caption
= Stock
2.
Botones de Comando (CommandButton): se
utilizan dos botones de comando más comparado con el artículo anterior cuyas
propiedades la vemos a continuación.
·
Guardar Nuevo
o Name
= Ingresar
o Caption
= Guardar Nuevo
·
Cerrar
o Name
= Cerrar
o Caption
= Cerrar
·
Buscar
o Name
= Buscar
o Caption
= Buscar
·
Modificar
o Name
= Modifica
o Caption
= Modificar
3.
Cajas de Texto (TextBox): se utilizan las
mismas ya utilizados, es decir no sé modifica el formulario del artículo
anterior. Los textbox no tienen propiedad Caption. Los nombres de la
propiedad “Name” para “ID”, “Producto”,
“Cantidad” y “Descripción” son: Id, Producto, Cantidad y Desc respectivamente.
4.
Etiqueta (Label): las etiquetas
utilizadas son tres, Label1, Label2, y Label3 cuyos Caption dentro de las
propiedades son “ID”, “Producto” y “Cantidad” respectivamente.
5.
Caja de verificación (CheckBox): para
esta aplicación se agrega una caja de verificación. La propiedad Name es “suma” y la propiedad Caption
es “Sumar”.
Es necesario aclarar que para simplificar y hacer algo
intuitivo los temas de referencia, se
utiliza la aplicación de los conocimientos de VBA de la forma más básica posible
para no confundir ya que no es la intensión enseñar teoria de sistemas ni
hablar en lenguaje tan técnico. Esto porque
a alguién muy interiorisado en programación o en sistemas le puede
parecer algo burdo o básico la forma en que se utiliza el código.
Por ejemplo, a los controles se los nombra de acuerdo a
lo que es y la función que cumple . El boton de ingreso se podria llamar “ingreso_button” y la
etiqueda id “id_label”. Es la forma
correcta, se utiliza para aplicaciones
mucho más avanzadas en dónde los conocimientos de progrmación son mas
avanzados. Para algo sencillo como en nuestro caso que intentamos introducir
ideas nuevas, no es necesario.
Funcionamiento:
El
funcionamiento es similar al que habíamos visto para el formulario de ingreso
de datos, cuando deseamos ingresar un dato nuevo el formulario carga automaticamente,
para este caso, un ID consecutivo ya que son numeros y se deben rellenar los
campos , luego guardar nuevo.
Por
otro lado, si queremos modificar un dato como el cursos se posiciona
automaticamente en el campo ID, cuando le damos “BackSpace o tecla retroceso”
el número se borra y se me habilitan dos botones nuevos, el botón buscar y el
botón modificar. Una vez que ponemos un ID que suponemos existente pulsamos el
boton buscar, encuentra los datos y una vez modificados se pulsa el boton
modificar y los datos han sido modificados.
Cómo
ves es muy facil este metodo, es por id. En otros artículos veremos luego otras
posibles formas de búsqueda. Empezemos por lo más básico.
Proceso:
Vamos a comenzar
modificando el formulario que ya habíamos visto en un artículo anterior, luego
vemos el código utilizado y para qué sirve.
Empezamos desde la pantalla anterior. Tenemos el formulario
que ya teníamos al cual solo le vamos a agregar tres elementos nuevos, dos
botones de comando y un checkbox o botón de verificación.
El Textbox del ID lo hacemos menos ancho para que entre el
botón buscar. El botón modificar y el checkbox los insertamos debajo del
textbox cantidad, si es necesario hacemos más grande el formulario.
Ya
vimos la denominación de los elementos del formulario al principio del artículo
con lo que pasaremos a ver los códigos y a describir que es lo que realizan.
Código:
Recuerden
que al hacer doble click sobre el objeto dentro del editor de VBA nos lleva a
la parte de edición del evento principal del objeto. Por ejemplo si es un
command_button el evento es Click, etc.
INICIALIZACIÓN DEL FORMULARIO: esto
código hace que al cargarse el formulario se inicie los objetos de determinada
manera o con determinada propiedad. El código hace que al iniciar el formulario
la propiedad Enabled (habilitar) del control se inicie en falso para el botón
buscar y modificar y en verdadero para ingresar. Además hace que el ID tome el
valor del último código ingresado y suma 1 para crear uno nuevo, en este caso.
Private Sub UserForm_Initialize()
Buscar.Enabled = False
ingresar.Enabled = True
modifica.Enabled = False
Id.Value =
Range("f2").Value + 1
End Sub
BOTON
GUARDAR NUEVO: este código hace lo que ya habíamos visto en el artículo
relacionado anterior.
Private Sub ingresar_Click()
With Sheets("Stock
productos")
.Range("A" & 5 +
Range("F2").Value).Value = Val(Id)
.Range("B" & 5 +
Range("F2").Value - 1).Value = producto.Value
.Range("C" & 5 +
Range("F2").Value - 1).Value = cantidad.Value
.Range("d" & 5 +
Range("F2").Value - 1).Value = desc.Value
End
With
End Sub
BOTON CERRAR: este código hace lo que
ya habíamos visto en el artículo
relacionado anterior.
Private Sub Cerrar_Click()
Unload Me
End Sub
BOTON BUSCAR: ATENCIÓN CON ESTE CODIGO
QUE ES NUEVO!!!! Este código hace lo mismo que hacemos para buscar elementos de
una base de datos con el BUSCARV. La diferencia es que lo hacemos con código
desde el formulario y no desde celdas de la planilla. Se utiliza dentro del objeto WorkSheetFunction el método Vlookup
(BuscarV en Inglés). Se deben declarar las mismas variables habituales, tal
como lo usamos comúnmente. Primero la variable a buscar, luego dónde buscar,
luego el indicador de columnas y luego
si queremos coincidencia exacta o no.
Usamos
el “On Error Resume Next” en este caso sin peligro ya que lo único que hace es
evitarnos mostrar el error de un dato no encontrado. Cuando no encuentra un Id,
no muestra resultado. Con el ID introducido buscamos los tres datos que
necesitamos, el nombre del producto, la cantidad y la descripción.
Private Sub buscar_Click()
On Error Resume
Next
producto.Value
= WorksheetFunction.VLookup(Val(Id.Value), Sheets(1).Range("A5:D12"),
2, False)
cantidad.Value
= WorksheetFunction.VLookup(Val(Id.Value), Sheets(1).Range("A5:D12"),
3, False)
desc.Value
= WorksheetFunction.VLookup(Val(Id.Value), Sheets(1).Range("A5:D12"),
4, False)
End Sub
BOTON MODIFICAR: en este código
primeramente declaramos una nueva variable denominada “bus_id”. Para declararla
usamos el método “Match” (Coincidir en Inglés) que es el mismo de las formulas
de Excel. Nos arroja como resultado la
fila dónde esta el dato que coincide con el introducido en ID. Es decir que
compara el valor de Id con la columna de Id’s y nos dice dónde esta el valor
buscado. Se utiliza un checkbox condicional para no tener que estar sumando
manualmente una cantidad previamente introducida con un valor nuevo a cargar en
el stock. Una vez ejecutado el comando se actualizan todos los valores
correspondientes.
Recuerden
que el With únicamente nos sirve para
no tener que volver a declarar una parte del código, en este caso la hoja
“Stock Productos”.
Private Sub modifica_Click()
bus_id =
WorksheetFunction.Match(Val(Id.Value), Sheets(1).Range("A5:A12"), 0)
+ 4
With Sheets("Stock
productos")
.Range("B" &
bus_id).Value = producto.Value
If
suma.Value = False Then
.Range("C" &
bus_id).Value = cantidad.Value
Else
.Range("C" &
bus_id).Value = Range("C" & bus_id).Value + cantidad.Value
End If
.Range("d" &
bus_id).Value = desc.Value
End With
End Sub
TEXTBOX ID: este código responde a un
evento “Change” (cambio en inglés). Si cambia algo en el textbox id ejecuta las
acciones declaradas. En este caso habilita los botones “Buscar y modificar” y deshabilita
el botón “Guardar Nuevo”. Cómo con en las propiedades del textbox ID esta
declarado como “0”, el focus del cursor esta en el textbox ID, al hacer
backspace o tecla retroceso se borra el ID, se ejecuta el código y podemos
introducir numero de ID nuevo.
Private Sub Id_Change()
If Val(Id.Value)
= 0 Then
Buscar.Enabled = True
ingresar.Enabled = False
modifica.Enabled = True
End If
End Sub
CHECKBOX SUMAR: este código hace que
cuando cambia el estado del checkbox se vuelva el focus al textbox de cantidad
y se borre el valor anterior. Se borra
el valor en el textbox no así en la base de datos, si actualizamos con el botón
modificar se guarda el valor según cómo este el textbox. Si esta tildado suma
al valor anterior sino lo reemplaza.
Private Sub suma_Click()
If suma.Value =
True Then
cantidad.SetFocus
cantidad.Value
= ""
End If
End Sub
-------------------------------------- FIN CÓDIGOS
Recuerden que los artículos algunas veces requieren un
mayor o menor nivel de conocimiento en ciertos temas de Excel, por ejemplo
formulas avanzadas, macros o VBA, etc. Sin embargo en los artículos se nombran
todos los elementos y con esta información podemos hacer nuestras pequeñas
investigaciones usando internet, así desarrollamos nuestro conocimiento. Por
ejemplo si utilizamos la función “Y”,
que la suponemos conocida, y no sabemos ¿qué es? podemos buscar en internet
para ver como se utiliza y cuales son los componentes. Las mini aplicaciones no
son más que la recopilación de muchos elementos para dar forma a una nueva
idea.
Con todos los elementos vistos podemos construir una
aplicación interesante para gestionar datos mediante un formulario. Esperamos que
les sirvan las ideas.
Pueden descargar algunos ejemplos
(plantillas/templates) de la zona de Descargas. Si
tienen alguna duda o consulta pueden hacerlo a través del formulario de contacto.
Les recomendamos que sigan el
blog por alguno de los medios, mail o por redes sociales, para recibir las
actualizaciones y novedades.
¡Éxitos!
Keys:
·
Formulario de entrada, modificación y búsqueda
de datos
·
Altas, bajas y modificaciones con formulario
·
Formulario ActiveX de entrada de datos en Excel
·
Modificaciones de datos en formulario
·
Insertar buscar y modificar datos en Excel
·
Form de búsqueda captura modificación de datos
en Excel
·
Agregar, editar, buscar y eliminar filas usando
un formulario de datos.
72 comentarios:
Hola, buena tarde.
Respecto a este código, tengo problemas porque no me hace la búsqueda y sólo me manda mensajes. ¿me podrías explicar la parte donde dice Sheets(1)? ¿Cómo sale el número uno, o ´cómo hago referencia a donde está la base de datos?
Gracias.
Riszard
producto.Value = WorksheetFunction.VLookup(Val(Id.Value), Sheets(1).Range("A5:D12"), 2, False)
Hola amigo, cómo estas!
Como dice el artículo esta código expresa lo mismo que expresa la formula BuscarV. Justamente se llama la función "worksheetfunction.Vloolup" de función de la hoja y buscarv. Entonces las variables si te fijas bien son las mismas.
Con respecto a Sheets(1) quiere decir la hoja 1.
Espero te hayamos podido aclarar el tema. Recuerda que también nos puedes escribir directamente desde el formulario de contacto. Saludos
Hola Juan, te felicito por el aporte.
He hecho un formulario sin embargo no me funciona el boton modificar.
en la funcion match que significa el +4?:
bus_id = WorksheetFunction.Match(Val(Id.Value), Sheets(1).Range("A5:A12"), 0) + 4
Hola amigo, cómo estas!
Si te fijas bien esta variable arroja un numero que es de lugar en que coincide con lo buscado, le sumamos 4 seguramente para acomodar a como tenemos en la hoja los datos y sumar filas de arriba.
Espero te haya servido el comentario. Si quieres también nos puedes escribir directamente. Saludos
Hola Juan Pablo,
gracias por la aclaración. funcionó a la perfección.
saludos
Adriano
Private Sub Buscar_Click()
Hola de nuevo!
ya probé este código pero sigue sin funcionarme.
Private Sub Buscar_Click()
RFC.Value = WorksheetFunction.VLookup(Val(id.Value), Sheets(2).Range("D3:Z200"), 2, False)
NoPersonal.Value = WorksheetFunction.VLookup(Val(Nombre.Value), Sheets(2).Range("D3:Z200"), 3, False)
End Sub
pero me sigue mandando el mensaje
Se ha producido el error 1004 en tiempo de ejecución:
No se puede obtener la propiedad VLookup de la clase worksheet.function
Mi formulario lo puse en la hoja 1 y mis datos están en la hoja 2 pero en la ficha le puse el nombre de BASE
¿qué podrá estar fallando?
Gracias
Riszard
Hola amigo, cómo estas! Al parecer estas usando mal la formula, tienes que revisar que estén bien asignado los campos. Por ejemplo que en el primer campo del Rango que seleccionas para cada formula este el valor de búsqueda. Recuerda que nos puedes escribir directamente mediante el formulario de contacto. Saludos
Hola Juan, e tenido el mismo problema que Roberto Gonzales, al momento de realizar busquedas y modificaciones, y solo me funciona cuando trabajo con una sola hoja dentro del libro de excel, pero cuando trabajo con dos o tres hojas ya no me funciona y me manda el error 1004 o a veces me manda el error de no coinciden los datos... que debo hacer?
gracias de antemano.
podrias subir el programita para descargarlo xfavor si fueras tan amable esque tus codigos no me funcan
Guga DK, todavía no esta disponible para descargar la plantilla. Esperamos tenerla muy pronto. Saludos
Muchas gracias, me sirvio muchiisimo como base :D
Hola Rodrigo! Muchas gracias por tus comentarios!
Esa es nuestra idea!! Que les sirva de Base de ejemplo, de...
Saludos!!
Hola amigo...
tengo un inconveniente... todo me funciona perfectamente excepto el botón modificar,
el caso es que el valor de mis codigos no coincide con la posicion del dato, por lo tanto no puedo utilizar la funcion coincidir "match", porque por ejemplo mi codigo 10 esta en la fila 4 y el siguiente es el codigo 15 el de la fila 5.
sabes como solucionar esto?
te agradeceria mucho.. gracias
Hola amigo, cómo estas! Gracias por escribir!
En cuanto a tu consulta, creo que lo dice en el video o en los comentarios que siempre que sea numérico tu código, para que coincida tienes que hacer una suma o resta aritmética con el valor dentro del código así te coinciden los IDs. Recuerda que nos puedes escribir directamente mediante el formulario de contacto. Saludos
Cordial saludo,, si tengo dos botones de busqueda, como hago para que la funcion WorksheetFunction.VLookup no busuqe en la primera columna si no alguna que yo le asigen
Hola amigo, cómo estas! Gracias por escribirnos. Esa función funciona así, busca el primer dato que encuentra de la lista porque en realidad esta función de búsqueda para datos ùnicos. Si necesitas eso deberías estudiar otra alternativa. Se puede hacer algo similar a lo que hicimos en el search engine o motor de búsqueda sin macros. Revisalo en el blog. Esperamos tus comentarios. Saludos
Hola amigo, cómo estas! Gracias por escribirnos. Esa función funciona así, busca el primer dato que encuentra de la lista porque en realidad esta función de búsqueda para datos ùnicos. Si necesitas eso deberías estudiar otra alternativa. Se puede hacer algo similar a lo que hicimos en el search engine o motor de búsqueda sin macros. Revisalo en el blog. Esperamos tus comentarios. Saludos
Hola Antes que nada gracias por estos tutoriales que me estan siendo muy utiles.
Yo les escribi comentandoles un problema con la opcion de busqueda. pues ya lo solucione, asi que dejo aca para otros que lo necesiten, como quedo mi formula
ApellidoNombre.Value = WorksheetFunction.VLookup((dni.Value), Sheets(1).Range("A2:K1048576"), 2, False)
Buen dia compañero, podrias darme el ultimo archivo? es que el link de esta pagina me envia a una descarga de un archivo anterior que no tienen la funcion de busqueda! osea el que explicas aqui!
te lo agradeceria mucho.
Buen dia compañero, podrias darme el ultimo archivo? es que el link de esta pagina me envia a una descarga de un archivo anterior que no tienen la funcion de busqueda! osea el que explicas aqui!
te lo agradeceria mucho.
Hola amigo, cómo estas! Gracias por comentar!
En cuanto a tu consulta, las plantillas disponibles por el momento están en la zona de descargas. Si encuentras algún link roto nos avisas. Saludos
Hola amigo, cómo estas! Gracias por comentar!
En cuanto a tu consulta, las plantillas disponibles por el momento están en la zona de descargas. Si encuentras algún link roto nos avisas. Saludos
Muy Bueno, queria saber si se podria buscar cualquier dato de la base de datos que tengo, no solamente el ID
Hola amigo, cómo estas! Gracias por comentar! En realidad la opción de búsqueda ya la tienes que es el famoso "Ctrl + b" donde te aparece un formulario para buscar en toda la hoja. Lo que se puede hacer y se hace es usar esa misma herramienta creando primero una macro luego modificándola para usarlo en un formulario personalizado o como lo desees. Cosa que hemos hecho en otros artículos ya. Espero te hayamos respondido sino nos escribes nuevamente por aquí o mediante el formulario de contacto. Saludos
hola buen día
tu publicacion esta excelente sin embargo te agradeceria si me pudieses ayudar con lo siguiente:
al momento de agregar este codigo:
Private Sub UserForm_Initialize()
Buscar.Enabled = False
ingresar.Enabled = True
modifica.Enabled = False
Id.Value = Range("f2").Value + 1
End Sub
quiero entender que lo que estamos diciendole es que active o desactive los boptones desde el inicio de nuestro formulario y lo mas maravilloso es el Id.Value que tenia dias buscandolo para enumerar con numeros consecutivos cada fila tomando el valor que en tu table esta en f2 agregandole 1 con la formula de contara de excel para que cuantifique las filas elegidas
Sin embargo, tengo combboxes codificadas dentro de userform_initialize y me marca error al meter este codigo, de que forma lo puedo agregar?
ejemplo:
Private Sub UserForm_Initialize()
Me.CBACTO.AddItem "COMPRA VENTA SIMPLE"
Me.CBACTO.AddItem "FE DE HECHOS"
With Me.CBRESP
.AddItem "ORION (ORCG)"
.AddItem "OTROS"
End With
End Sub
agradezco mucho tu atencion y quedo en espera de tus comentarios
saludos cordiales
Hola amigo, cómo estas! Gracias por comentar!
En cuanto a tu consulta, si revisas la listas de artículos te daras cuenta que hay más de un artículo en que tratamos el tema de formularios y elementos. Hay un par de ellos que tratan sobre el combo e introducir los datos, revisarlos.
Cualquier cosa nos avisas. Esperamos tus comentarios.
Saludos
La forma sería la siguiente:
-----
Private Sub UserForm_Initialize()
ComboBox1.AddItem "A"
ComboBox1.AddItem "B"
ComboBox1.AddItem "C"
ComboBox1.AddItem "D"
ComboBox1.AddItem "E"
End Sub
-----
Link artículo: http://excelminiapps.blogspot.com.ar/2014/06/formulario-activex-con-combobox.html
no puedo echar andar el ID . siempre me sale 1
Private Sub UserForm_Initialize()
btn_buscar.Enabled = False
btn_agregar.Enabled = True
btn_modificar.Enabled = False
txt_cod.Value = Range("k2").Value + 1
End Sub
Private Sub txt_cod_Change()
If Val(txt_cod.Value) = 0 Then
btn_buscar.Enabled = True
btn_agregar.Enabled = False
btn_modificar.Enabled = True
End If
tengo ambos, fallo en algo? gracias
lo arreglé . ahora tengo el problema que aparecen 3 , 2, 1 y no en orden correlativo como seria lo correcto
Hola amigo, cómo estas! Gracias por comentar!
A veces es una cuestión de concepto, cuando entras a probar te das cuenta cómo es y lo captas. Seguramente lo lograras, sino nos escribes.
Saludos
Hola juan pablo, buenas noches gracias por este tipo de publicaciones, me podrías ayudar, como te darás cuenta en el siguiente código lo he modificado, pero no encuentro el error que me arroja, podrías ayudarme? pienso que el inconveniente esta en el +4, lo he intentado pero no meda. gracias por tu ayuda
Private Sub MODIFICA_Click()
bus_id = WorksheetFunction.Match(Val(REGISTRO.Value), Sheets(2).Range("A5:q1000"), 0) + 4
With Sheets("CONTROL")
.Range("B" & bus_id).Value = FRECIBIDO.Value
.Range("C" & bus_id).Value = PROGRAMA.Value
.Range("d" & bus_id).Value = CODIGO.Value
.Range("E" & bus_id).Value = PROVEEDOR.Value
.Range("F" & bus_id).Value = PRODUCTO.Value
.Range("G" & bus_id).Value = GRAMOS.Value
.Range("H" & bus_id).Value = CANPEDIDA.Value
.Range("I" & bus_id).Value = CFACTURADA.Value
.Range("J" & bus_id).Value = CRECIBIDA.Value
.Range("K" & bus_id).Value = FALTANTE.Value
.Range("L" & bus_id).Value = CRECHAZADA.Value
.Range("M" & bus_id).Value = LOTE.Value
.Range("N" & bus_id).Value = FPRODUCCION.Value
.Range("O" & bus_id).Value = FVENCIMIENTO.Value
.Range("P" & bus_id).Value = CSOBRANTE.Value
.Range("Q" & bus_id).Value = CDONADA.Value
End With
Application.Run "'RECEP. E INVENTARIO MP.xlsm'!convmays"
End Sub
Hola amigo, cómo estas! Gracias por escribirnos!
En cuanto a tu consulta, nosotros siempre damos una recomendación en estos casos en que hay muchas variables en juego. Y es que lleven su idea al caso más simple posible y luego que les funciona trasladar a toda la idea. En este caso probaríamos primero en el formulario con un solo textbox por ejemplo. Por otro lado, cuando se usan funciones de Excel ,como en este caso que utilizamos la función "Coincidir" , recomendamos que en una celda de excel prueben la función y parámetros para ver que están bien seteados. En este caso si construyes la función coincidir que tienes (MATCH) en una celda te generará un error porque debes comparar un valor con una lista, y la lista que estas definiendo tienen dos o mas columnas, debería ser una única columna es la "A". Luego y por último el valor que pones luego para hacer la suma aritmética depende de dónde empiecen tus datos.
Esperamos te haya servido de ayuda nuestros comentarios. Esperamos los tuyos.
Saludos
Buenas!
Genial el tutorial, me ha servido mucho para hacer una base de datos de los productos fabricados, comprados, conjuntos de sub-productos y producto acabado de nuestra empresa.
Sin embargo tengo un problemilla con el botón modificar. Muchos de los valores no son números enteros. Si cargo la fila en el formulario y modifico un valor, al guardar, me redondea los valores. Esto solo me ocurre cuando modifico una fila, si la creo nueva todo funciona bien.
Me puedes ayudar?
Un saludo y de nuevo gracias por el tutorial.
Hola amigo, cómo estas! Gracias por tus comentarios!
En cuanto a tu consulta, puedes darle al valor que tomas del formulario con cualquier formato usando la función "format" en el código, que es lo mismo que usar la función "texto" en una celda. Pruébalo , no deberías tener problemas con eso.
Saludos
Buenas noches amigo, desearía saber si me podría ayudar a encontrar una manera de crear una macro que me permita ubicar una celda (insertando anteriormente la cédula de un trabajador) y luego insertar unos datos en esa misma fila, pasando los datos que estaban en esta a otra fila. De antemano, muchas gracias. Y disculpe las molestias causadas.
Hola amigo, cómo estas! Gracias por escribirnos!
Con los lineamientos de este artículo lo puedes hacer sin problemas. Sobre todo buscar un elemento de la lista. Para el caso de cambiar los datos de esa fila a otra, puedes hacer ya que una vez que encuentras el elemento sabes donde esta. El tema estaría que hacer con los datos de esa fila, a que lugar llevarlos?
Esperamos tus comentarios.
Saludos
Buenas, muchas gracias por su respuesta. La cosa es que estoy trabajando en base a una base de datos ya creada. Y necesito que al modificar los datos, los que estaban antes se vayan a una hoja igual a la original. (ir haciendo un historial con los datos que han sido modificados). Gracias de antemano
Hola amigo, cómo estas! Gracias por escribirnos!
Claro que se puede, lo haces grabando macros en gran parte y luego modificando.
Tienes que ver cómo harás para reconocer la celda donde esta el dato que tu quieres modificar, lo puedes hacer con doble clic sobre la celda o posicionando el cursos en la celda, o puedes hacerlo identificando la celda en una celda o ingresando en un formulario. Hay varias maneras, al comienzo deberías elegir la más sencilla. Luego para guardar el dato en el historial, lo haces como ya hemos hecho, Te ayudas de un "contar" para saber cuánto datos tienes y cuál es la última celda. Con eso ubicas la celda vacía y donde colocaras el dato. Creemos que nuestros artículos anteriores te servirán.
Esperamos tus comentarios.
Saludos
Hola!
Muy claro todo, pero la verdad yo soy muy lega para estas cosas. Me pasa que pruebo el código para ingresar datos y no los va acumulando en la fila siguiente sino que lo guarda en la misma. ¿Qué estoy haciendo mal?
así lo tengo guardado:
Private Sub GUARDA_Click()
With Sheets("CONTROL")
.Range("A" & 12 + Range("R2").Value).Value = Val(EXPEDI)
.Range("B" & 12 + Range("R2").Value - 1).Value = FECHA.Value
.Range("C" & 12 + Range("R2").Value - 1).Value = CONSULTANTE.Value
.Range("D" & 12 + Range("R2").Value - 1).Value = ANIOS.Value
.Range("E" & 12 + Range("R2").Value - 1).Value = JOB.Value
.Range("F" & 12 + Range("R2").Value - 1).Value = REFERENCIA.Value
.Range("G" & 12 + Range("R2").Value - 1).Value = TELCASA.Value
.Range("H" & 12 + Range("R2").Value - 1).Value = CELULAR.Value
.Range("I" & 12 + Range("R2").Value - 1).Value = OTRO.Value
.Range("J" & 12 + Range("R2").Value - 1).Value = ER.Value
.Range("K" & 12 + Range("R2").Value - 1).Value = CORREO.Value
.Range("L" & 12 + Range("R2").Value - 1).Value = CALLYNUM.Value
.Range("M" & 12 + Range("R2").Value - 1).Value = COLONY.Value
.Range("N" & 12 + Range("R2").Value - 1).Value = DELEGAC.Value
.Range("O" & 12 + Range("R2").Value - 1).Value = MOTIV.Value
.Range("P" & 12 + Range("R2").Value - 1).Value = SEGUIMIENTO.Value
End With
End Sub
Te agradezco de antemano.
Private Sub Buscar_Click()
RFC.Value = WorksheetFunction.VLookup(Val(id.Value), Sheets(2).Range("D3:Z200"), 2, False)
NoPersonal.Value = WorksheetFunction.VLookup(Val(Nombre.Value), Sheets(2).Range("D3:Z200"), 3, False)
sabes que ocupe ese codigo de busqueda pero no funciona para buscar de 1 hoja a otra en el mismo libro cual seria el codigo correcto
Hola, Gracias por escribirnos!
Nelly, tienes que revisar este articulo y otro anterior. Recuerda que deberías primero grabar la macro básica y después modificarla. Antes de agregar el dato debes insertar una fila nueva arriba si es con macro, es la mejor forma para ti que eres inexperta. Hay otra forma con código que también la vemos en otros artículos.
Jhon, para otro hoja debes modificar el sheet().
Esperamos sus comentarios.
Saludos
hola buenas noches todo muy bien hasta ahora solo que me gustaria saber como al momento de ingresar los datos se puede indicar el tipo de dato que debe de ser es decir si es numero fecha o texto, porque al momento de realizar la busqueda siempre no me la realiza conlos ultimos datos ingresados porque lo agrega como texto en vez de numero y otro error es que al momento de buscar los que si puede buscar en las casillas de fecha no me muestra la informacion con el formato de fecha pero en la tabla de excel si esta como fecha
Private Sub ingresar_Click()
With Sheets("Entregas de Productos")
.Rows("5:5").Insert Shift:=xlDown
.Rows("5:5").Interior.Pattern = xlNone
.Range("A5").Value = Pedido
.Range("B5").Value = Cliente
.Range("C5").Value = Contacto
.Range("d5").Value = Telefono
.Range("e5").Value = Correo
.Range("f5").Value = Alta
.Range("g5").Value = Entrega
.Range("h5").Value = Observaciones
End With
End Sub
y el codigo de busqueda
Private Sub buscar_Click()
On Error Resume Next
Cliente.Value = WorksheetFunction.VLookup(Val(Pedido.Value), Sheets(1).Range("A5:h15000"), 2, False)
Contacto.Value = WorksheetFunction.VLookup(Val(Pedido.Value), Sheets(1).Range("A5:h15000"), 3, False)
Telefono.Value = WorksheetFunction.VLookup(Val(Pedido.Value), Sheets(1).Range("A5:h15000"), 4, False)
Correo.Value = WorksheetFunction.VLookup(Val(Pedido.Value), Sheets(1).Range("A5:h15000"), 5, False)
Alta.Value = WorksheetFunction.VLookup(Val(Pedido.Value), Sheets(1).Range("A5:h15000"), 6, False)
Entrega.Value = WorksheetFunction.VLookup(Val(Pedido.Value), Sheets(1).Range("A5:h15000"), 7, False)
Observaciones.Value = WorksheetFunction.VLookup(Val(Pedido.Value), Sheets(1).Range("A5:h15000"), 8, False)
End Sub
Hola amigo, cómo estas! Gracias por escribirnos!
En cuanto a tu consulta, es lo mismo que en una operación normal de excel usando las celdas. Tienes diferentes tipos de datos, numéricos, alfanuméricos, etc. Cuando haces una formula hay veces que debes indicarle que tipo de valor es. Para eso existen las formulas valor(), Texto(), Esnumero(), etc. En el código es similar, tienes "Val()", en vez de texto tienes "Format". Con este último puedes dar el formato que quieras de la manera, si fuera fecha por ejemplo. Format("dd/mm/yy").
Esperamos tus comentarios.
Saludos
Hola buenos días tengo un problema
Private Sub UserForm_Initialize()
Cmdbuscar.Enabled = False
Cmdaceptar.Enabled = True
Cmdmodificar.Enabled = False
Txtid.Value = Range("J4").Value + 1
end sub
con el Txtid.value = Range("J4").value + 1 dice que no encuentra el metodo y no compila y lo dejo asì Txtid = Range("J4").value + 1 y me sobreescribe los datos que ingreso al formulario
Hola amigo, cómo estas! Gracias por tus comentarios.
Revisa en la ayuda o busca en internet o en otro de nuestros artículos cómo definir un rango dentro del libro. Desconocemos cómo tienes organizado el libro pero hay veces que tienes que decirle en que hoja se encuentra. Por ejemplo definir "hoja1.range("A1").value". es una forma pero depende de cómo estés trabajando se puede definir de otra manera.
Esperamos tus comentarios.
Saludos
hola he visto tu articulo y me parece interesante pero a mi no me funciona
tengo una hoja llamada data el boton que llama al formulario esta en la hoja consulta, pero mis datos como el codigo que es el dato que consultare es un texto no numero y he tratado de cambiar tu formula y no me jala ya arme el formulario y todo pero en la programcion del boton busqueda al ingresar no jala nada apesar que hay datos me puedes ayudar
Hola amigo, tengo una duda, intento usar la parte de del código para modificar en mi formulario, pero me marca el error '1004':
No se puede obtener la propiedad Match de la clase WorksheetFunction.
Agradecería mucho tu ayuda, para saber cual es mi error y como puedo darle solución.
El código es el siguiente.
Private Sub cmbCambiaOKC_Click()
Dim id_nombre, idBusca As String
Dim fila As Integer
fila = 6
id_nombre = txtid
Do While idBusca <> id_nombre
fila = fila + 1
idBusca = Range("A" & fila).Value
If idBusca = Empty Then
MsgBox "Consecutivo Invalido"
Exit Do
End If
Loop
txtMaterial2 = Range("D" & fila).Value
txtLote2 = Range("F" & fila).Value
txtSolicitante2 = Range("H" & fila).Value
txtEmpresa2 = Range("Q" & fila).Value
txtContacto2 = Range("X" & fila).Value
txtTeléfono2 = Range("Y" & fila).Value
txtRemision2 = Range("AB" & fila).Value
txtPedido2 = Range("AC" & fila).Value
txtFactura2 = Range("AD" & fila).Value
txtFecha2 = Range("j" & fila).Value
txtNotas2 = Range("AE" & fila).Value
txtid = SetFocus
End Sub
Private Sub cmbOKC_Click()
bus_id = WorksheetFunction.Match(Val(txtid.Value), Sheets(1).Range("A7:A100"), 0) + 31
With Sheets("Registro")
.Range("D" & bus_id).Value = txtMaterial2.Value
.Range("F" & bus_id).Value = txtLote2.Value
.Range("H" & bus_id).Value = txtcmbSolicitante2.Value
.Range("Q" & bus_id).Value = txtEmpresa2.Value
.Range("X" & bus_id).Value = txtContacto2.Value
.Range("Y" & bus_id).Value = txtTeléfono2.Value
.Range("AB" & bus_id).Value = txtRemision2.Value
.Range("AC" & bus_id).Value = txtPedido2.Value
.Range("AD" & bus_id).Value = txtFactura2.Value
.Range("J" & bus_id).Value = txtFecha2.Value
.Range("AE" & bus_id).Value = txtNotas2.Value
End With
End Sub
Private Sub CommandButton1_Click()
Unload Me
End Sub
Private Sub UserForm_Click()
End Sub
Hola, antes que nada, excelente trabajo, es de mucha utilidad para quienes excel representa una herramienta diaria en nuestros trabajos. De verdad, tu trabajo es muy valioso!
Quería hacer una pregunta, quizás mi pregunta ya está respondida en otra publicación, en caso de ser así, por favor me dirías cual?
Deseo hacer dos formularios, el primero para ingresar datos, y el segundo para modificarlos y guardarlos. Por lo tanto dividi las formulas aquí vistas. Para el ingreso de nuevos artículos todo está excelente!
Para el registro de modificaciones tengo un problema: Mi intención es completar las filas ya grabadas con datos complementarios. Pero al buscar, para luego modificar, surge el problema de no poder usar un solo ID.
Te comento: El ID, en mi caso, se repite, dado que representa a un numero de comprobantes que contienen varios artículos diferentes, es decir, hay una fila por cada artículo con un mismo comprobante (ID) y Los artículos no pueden ser ID porque se repiten con otro comprobante (ID) diferente. La búsqueda solo es precisa cuando coinciden tres datos.
Pienso que al realizar la búsqueda debo utilizar una formula SI o Y- Para ingresar 3 datos y al buscar, me busque la posición de la fila donde coincidan los 3 parámetros buscados. y allí pueda COMPLETAR con otros datos y guardar. Podrías instruirme? Espero que se entienda.
Desde ya muchísimas gracias por todo el trabajo y el tiempo en responder cada pregunta.
Hola amigo, cómo estas! Gracias por escribirnos!
En cuanto a consulta, la idea de ID es una "una identificación único". Eso es lo que significa. Hay sistemas u otras cosas que pueden contener ID's porque en general también representa un número de pieza, objeto, etc. Es decir que se puede repetir. Sin embargo, siempre cuando nos referimos a ID es darle a cada elemento introducido en una base de datos un identificación única. Para tu caso, si hay Identificaciones iguales para tus productos, son elementos individuales así que deberías generar otra clave que sea única para cada elemento así no tendrás ese problema.
Esperamos tus comentarios.
Saludos
Buenas, muy buen post. Tengo dos dudas
1- es como le doy formato a la fecha y monto:
Private Sub Ingresar_Click()
With Sheets("BD")
.Rows("3:3").Insert shift:=xlDown, CopyOrigin:=xlformat_fromabove
.Rows("3:3").Interior.Pattern = xlNone
.Range("A3").Value = codigo
.Range("B3").Value = fecha
.Range("C3").Value = descripcion
.Range("D3").Value = precio
.Range("E3").Value = (impuesto / 100) * precio
.Range("F3").Value = precio + .Range("E3").Value
.Range("G3").Value = proveedor
.Range("H3").Value = .Range("F3").Value / present
End With
codigo.Value = ""
fecha.Value = ""
descripcion.Value = ""
precio.Value = ""
impuesto.Value = ""
proveedor.Value = ""
present.Value = ""
End Sub
2- La parte de buscar la realiza bien, pero si le quiero modificar algo, me da error, no tengo el código completo:
Me indica que no se puede optener la propiedad Math de la Funcion:
Private Sub Modificar_Click()
ID = WorksheetFunction.Match(Val(codigo.Value), Sheets(1).Range("A2:I2000"), 0)
With Sheets("BD")
'.Range("B" & ID).Value = fecha.Value
.Range("C" & ID).Value = descripcion.Value
'.Range("D" & ID).Value = precio.Value
'.Range("E" & ID).Value = impuesto.Value
End With
End Sub
Gracias
hola amigo, primero que todo te quiero dar las gracias por este tutorial que a servido muchisimo, te cuento que estoy intentando realizar la busqueda y modificar. En que consiste la busqueda debo ingresar el nombre de alguna persona y me debiese de devolver las responsabilidades que este posea (son mas de 1)
y use esta formula
Registro_historico.Value = WorksheetFunction.VLookup(Val(Lista.Value), Sheets("Historico actividades").Range("e22:g23"), 2, False)
pero me dice este error (deje el onerror modo comentario)
"Se ha producido el error 1004 en tiempo de ejecución:
No se puede obtener la propiedad VLookup de la clase worksheet.function"
Registro_Historico, es donde se almacenara el resultado de mi busqueda
lista, el nombre que estoy ingresando para despues realizar busqueda
Historico actividades, la hoja donde se encuentra la matriz
en que me puedo estar equivocando ?
Hola DJ y Diego, cómo están ! Gracias por escribirnos!
En cuanto a sus consultas, vienen las dos por el mismo camino. Esas dos son formulas típicas de excel, esto quiere decir que en el código hay algo mal declarado en la formula. Quiere decir que la tienen que revisar con cuidado, ver si están bien puesto los valores. Por ejemplo en el buscarV hay siempre problemas con el tipo de dato de Ref. hay diferencias a si son números o no.
La recomendación que siempre damos es que se olviden del código y creen la formula de prueba en una celda común de excel para ver y estudiar los datos y como completar correctamente los campos.
Saludos
Hola buen día, Tengo una duda, tengo un archivo de una sola hoja llamada "Datos" realice un formulario similar al que me enseñaron en el tutorial, pero con mas campos, pero lo único que hace es buscar y modificar, el buscar me esta sirviendo a medias, por que quiero que me busque una cédula y no me la busca por que el formato es #-###-### o muchas veces #-##-## bueno varían mucho, pero coloque otro campo para que buscara que es un numero entero, Por otro lado el codigo de Modificar no me deja usar me sale un error, el codigo es el siguiente:
Private Sub Modifica_Click()
bus_Cedula = WorksheetFunction.Match(Val(Cedula.Value), Sheets("Altas").Range("A5:AF8002"), 0)
With Sheets("Datos")
.Range("W" & bus_Cedula).Value = RCB_Cupon.Value
.Range("X" & bus_Cedula).Value = Anticipo.Value
.Range("Y" & bus_Cedula).Value = Ven_instala.Value
.Range("Z" & bus_Cedula).Value = Prom_VM.Value
.Range("AA" & bus_Cedula).Value = VL_instala.Value
.Range("AB" & bus_Cedula).Value = rcb_fact.Value
.Range("AC" & bus_Cedula).Value = date_contr.Value
.Range("AD" & bus_Cedula).Value = date_orden.Value
.Range("AE" & bus_Cedula).Value = Vendedor.Value
.Range("AF" & bus_Cedula).Value = Instalador.Value
End With
End Sub
Como me podrian ayudar
Buenas tardes,
Antes de nada agradecer su tutorial, está super bien explicado, sobretodo para mi que soy nueva en esto. Por el momento me surge una duda, tengo el dato que necesito trabajar como id en la celda H2 de la Hoja 3, esta celda, ya tiene la formula + 1 para que me indique el total de registros realizados.
He detectado que con el código:
TextBox1.Value = Range("H2").Value + 1
Me aparece siempre el 1, como le indico la hoja y la celda?
Y por otro lado, al darle al botón guardar y siguiente que lo tengo creado, necesito que me cambie el id por el nuevo número.
¿Qué código debería usar?
Espero haberme explicado bien y de nuevo gracias por sus tutoriales!
Disculpen!! Conseguí ambas cosas!!!
Declare rs como variable
Dim rs as Worksheet
Set rs = Worksheets("mi_hoja")
textbox1.value =rs.range("h2").value + 0
Y en el guardar y siguiente
Set rs = Worksheets("DATOS")
TextBox1.Value = rs.Range("H2").Text
Así lo actualiza al guardar!!
Gracias!
Hola Gente , cómo están! Disculpen la tardanza en responder.
Básicamente una vez que tenemos la estructura básica probamos de acuerdo a lo que queremos. Por supuesto muchas veces no nos va a salir de primera pero probando varias veces y sobre todo estudiando el concepto de lo que hace el código "que es lo más importante" lo van a lograr. Para consultas también pueden escribirnos por el formulario de contacto!
Muchas gracias!
Hola, me ha servido de mucho el post. Sin embargo tengo un problema al modificar. No me permite dar de alta la función bus_id dice q es un error 1004 "no se puede obtener la propiedad match de la clase worksheetfunction
Gracias
Hola amigo, cómo estas! Gracias por el contacto!
En cuanto a tu consulta, si tira ese error es porque estas usando mal la función en la sintaxis. Es decir que debes revisarla bien.
Esperamos tus comentarios.
Slaudos
Hola a todos alguien sabe como hacer la búsqueda de una forma diferente, trate de utilizar código que aparece aquí pero no me sirvió porque solo hace la búsqueda si el dato aparece en la primera columna "como buscarv", pero el problema es que no puedo mover la columna porque la necesito en la tercera posición alguien sabe como mas podría hacer la búsqueda.
Que se haga desde una caja de texto porque se debe introducir el dato, agradecería mucho su ayuda lo necesito realmente.
Private Sub buscar_Click()
On Error Resume Next
nombre.Value = WorksheetFunction.VLookup(Val(id.Value), Sheets(1).Range("A5:D450"), 2, False)
cedula.Value = WorksheetFunction.VLookup(Val(id.Value), Sheets(1).Range("A5:D450"), 3, False)
fecha.Value = WorksheetFunction.VLookup(Val(id.Value), Sheets(1).Range("A5:D450"), 4, False)
End Sub
Hola amigo, cómo estas! Así es, utilizas un buscarv porque si te fijas el código aparece "WorksheetFunction.VLookup" que es precisamente esa formula. Puedes usar otras formulas, como coincidir en donde cambiaría la sintaxis.
Esperamos tus comentarios.
Saludos
Private Sub ingresar_Click()
With Sheets("Stock productos")
.Range("A" & 5 + Range("F2").Value).Value = Val(Id)
.Range("B" & 5 + Range("F2").Value - 1).Value = producto.Value
.Range("C" & 5 + Range("F2").Value - 1).Value = cantidad.Value
.Range("d" & 5 + Range("F2").Value - 1).Value = desc.Value
End With
End Sub
POR FAVOR ME PODRIAN EXPLICAR LO FUNCIONAL DE ESTOS MACRO
COLOQUE ESTE MISMO EN MI FORMULARIO Y EL INGRESO DEL PRODUCTO LO HACE EN LA FILA 5 (ES DECIR SE MONTA ARRIBA LA INFORMACION SI TENGO EL ID Nº 12 AL INGRESAR EL SIGUIENTE LO MONTA ARRIBA Y NO LO HACE CONSECUTIVO) Y NO CONSECUTIVO Y ESO QUE LO COPIE IGUAL AL HECHO POR UD PARA PROBARLO Y ADAPTARLO A UN PROYECTO QUE ESTOY HACIENDO
Hola amigo, cómo estas! Gracias por escribirnos!
En cuanto a tu consulta, el artículo esta muy completo en cuanto a la explicación. Y también en la mayoría de las ocasiones utilizamos elementos vistos en artículos anteriores. En este caso, para que el código no sobrescriba la información tienes que decirle dónde ubicar el dato, eso lo haces con la primera parte, lo que esta antes del signo "=". Ahí es dónde debes probar y ver qué esta pasando.
Esperamos tus comentarios.
Saludos
Hola el checkbox se puede cambiar por un botón y cual seria su macro
Muchísimas gracias por el tutorial.
Nunca he aplicado este tipo de funciones pero después de un rato de probar, al fin pude lograr lo que quería, es cuestión de analizar un poco las variables y listo.
De verdad, gracias a gente como uds que se toman el tiempo de explicarlo sencillamente.
Saludos
Gracias Amigo, eres una persona muy amable.
Saludos
amigo buen dia me gustaria sabar como quedaria el codigo de buscar y necesita un fecha por que busco uba fecha y me sale un cifra gracias por su atencio
Hola amigo, cómo estas! Gracias por escribirnos!
En cuanto a tu comentario ten en cuenta que en excel tenemos diferentes tipos de datos, cómo testo número, alfanuméricos, fechas, etc. El dato en la celda tiene un formato, ese formato lo defines tú. Si es una fecha para excel en realidad es un número de fomra por ejemplo para 12/05/19 es "43597". Es decir que si quieres buscar con fechas debes tener en cuenta esto, estas comparando dos números y tienes que hacer todas las transformaciones o formulas necesarias teniendo en cuenta eso.
Esperamos tus comentarios.
Saludos
Buenas Noches tengo un problema, al momento de realizar la busqueda si la hace pero si son puros números, como le hago para que busque si el codigo tiene letras y números.
Hola amigo, cómo estas! Gracias por tus comentarios!
En cuanto a tu consulta, en realidad lo que hacemos aquí es usar buscarV con código así que cumple las mis mas reglas que una formula común. Debes cambiar la formula para que no tenga problemas con alfanuméricos. Primero prueba en una celda con la formula y te darás cuenta de lo que necesitas.
Esperamos tus comentarios.
Saludos
Buenos días
Cómo puedo hacer un userform que tenga estos botones buscar, editar y guardar, pero cuando le de buscar me traiga todos los datos a los textbox pero de otra hoja cómo por ejemplo (hoja5) y que los pueda modificar y guardar los cambios o cuando le de buscar a un cliente que ya esté registrado lo pueda registrar como un nuevo cliente osea con un nuevo ID o código
De ante mano le doy muchas gracias por su colaboración.
Hola amigo, cómo estás! Gracias por escribirnos!
En cuanto a tu comentario, con el contenido del artículo y el blog no tendrás problemas. Ten en cuenta que es necesario comprender los conceptos de cada cosa para poder hacerlo.
Esperamos tus comentarios.
Saludos.
Publicar un comentario