Por lo general, lo que hacemos es construir en una hoja una tabla (o lista) a la cual iremos agregando datos. También podemos crear una especia de formulario en otra hoja usando controles y también usar validación de datos.
Un ejemplo de este tipo de "aplicación" ya hemos mostrado en la nota Agrupar controles botones de opción en hojas Excel.
Una de las consultas que recibo con cierta frecuencia es: "cómo hago para que al agregar datos a mi base de datos, lo haga en la primer fila libre de la tabla?"
El archivo del ejemplo de la nota mencionada incluye una macro (de hecho dos, una para cada método de crear el formulario) que realiza esa tarea.
La macro es muy sencilla y fácil de adaptar a todo tipo de aplicaciones. Para los lectores sin experiencia en Vba, daremos aquí una explicación de la macro.
Sub clientes_form()
Dim linea_libre As Long
Application.ScreenUpdating = False
Sheets("Clientes").Select
linea_libre = WorksheetFunction.CountA(Range("A:A")) + 1
Cells(linea_libre, 1).Value = Sheets("Formularios").[I2]
Cells(linea_libre, 2).Value = Sheets("Formularios").[I3]
Cells(linea_libre, 3).Value = Sheets("Formularios").[I4]
Sheets("Formularios").Select
Application.ScreenUpdating = True
MsgBox "Se ha agregado el cliente " & Sheets("Formularios").[I2]
End Sub
Empezamos declarando una variable que contendrá el número de la primer fila disponible
Dim linea_libre As Long
Para calcular cuál es la primer fila libre, seleccionamos la hoja Clientes
Sheets("Clientes").Select
y usamos en el código la función CONTARA de Excel para establecer el valor de la variable
linea_libre = WorksheetFunction.CountA(Range("A:A")) + 1
Luego fijamos los valores de las celdas en clientes
Cells(linea_libre, 1).Value = Sheets("Formularios").[I2]
Cells(linea_libre, 2).Value = Sheets("Formularios").[I3]
Cells(linea_libre, 3).Value = Sheets("Formularios").[I4]
y volvemos a la hoja Formulario
Sheets("Formularios").Select
Para evitar que Excel "parpadee" durante la corrida de la macro, usamos la orden Application.ScreenUpdating = False y al final de la macro, antes de la aparición el mensaje, reponemos Application.ScreenUpdating = True.
Esta macro está ligada al botón "Agregar Cliente" en la hoja Formulario.
Technorati Tags: MS Excel
Buenas Tardes!, mi consulta no esta relacionada con el tema, pero daod que he estado leyendo tus respuestas y las encuentro más que útiles, me gustaría consultarte respecto a una duda que ha surgido en mi trabajo. Allí utlizamos archivos que estan vinculados a otros en forma mensual, por ej: mi libro principal llamemosle A, se vincula a un libro 200802.xls en la fila que se corresponde con el mes de feb-08. El problema que tenemos es que queremos encontrar la forma en que mensualmente ese vinculo se edite en los meses venideros, es decir en la fila 2 que se corresponderia con mar-08, la celda b2 se vincule automaticamente con la ruta del archivo 200803. Sabes como ayudarme, Desde ya te lo agradecere. Sdos! Bárbara
ResponderBorrarHola Bárbara
ResponderBorrarparece una tarea para la función INDIRECTO. Puedes leer esta nota sobre INDIRECTO y también ésta, que trata el tema de los vínculos a cuadernos cerrados.
Con respecto a este ejercicio me quedo una duda, como hacemos cuando un dato ingresado se repite, hay manera de generar alguna advertencia?
ResponderBorrarMuy Buenas Tardes!
ResponderBorrarYa hice todo....pero me aparece el siguiente dialogo
"Object Required"
quiero que excel agregue todos los datos que capture en una hoja a un listado...
Esto hice:
Sub Crear_Tarjeta_Roja_Form()
Dim linea_libre As Long
aplication.ScreenUpdating = False
Sheets("Crear_tarjeta_Roja").Select
linea_libre = WorksheetFunction.CountA(Range("B:B")) + 1
Cells(linea_libre, 2).Value = Sheets("Crear_Tarjeta_Roja").[c5]
Cells(linea_libre, 3).Value = Sheets("Crear_targeta_roja").[c6]
Cells(linea_libre, 4).Value = Sheets("Crear_targeta_roja").[c7]
Cells(linea_libre, 5).Value = Sheets("Crear_targeta_roja").[c8]
Cells(linea_libre, 6).Value = Sheets("Crear_targeta_roja").[c9]
Cells(linea_libre, 7).Value = Sheets("Crear_targeta_roja").[c10]
Cells(linea_libre, 8).Value = Sheets("Crear_targeta_roja").[c11]
Cells(linea_libre, 9).Value = Sheets("Crear_targeta_roja").[c12]
Cells(linea_libre, 10).Value = Sheets("Crear_targeta_roja").[c13]
Cells(linea_libre, 11).Value = Sheets("Crear_targeta_roja").[c14]
Cells(linea_libre, 12).Value = Sheets("Crear_targeta_roja").[c16]
Cells(linea_libre, 13).Value = Sheets("Crear_targeta_roja").[c18]
Cells(linea_libre, 15).Value = Sheets("Crear_targeta_roja").[c19]
Cells(linea_libre, 16).Value = Sheets("Crear_targeta_roja").[c20]
Cells(linea_libre, 17).Value = Sheets("Crear_targeta_roja").[c21]
Application.ScreenUpdating = True
MsgBox "se ha agregado la targeta" & Sheets(Crear_Tarjeta_Roja).[c5]
End Sub
Apreciaria su comentario.
En la sentencia
ResponderBorraraplication.ScreenUpdating = False
hay un error de ortografía. Debe ser
Application.... con dos "p"
Muchas gracias por responder. Alguna vez habia visto este sitio, pense que no contestaria.
ResponderBorrarGracias.
Ahora bien me sale un error
Run-time error'9':
Subscript out of range
he consultado en internet pero la respuesta para solucionarlo no me queda clara.
Te sugiero que sigamos la conversación por línea privada. Fijate en las condiciones en la pestaña Ayuda (en la parte superior del blog).
ResponderBorrarGracias, esto fue muy útil para mi.
ResponderBorrar