BUENAS TARDES
DESEO HACER UNA MACRO CON VBA DONDE AL CREAR UN FORMULARIO PUEDA CARGAR DATOS EN UNA HOJA DE EXCEL CON LAS SIG. CARACTERISTICAS
A B C D
NOMBRE CLIENTE GASTOS1 GASTOS2 GASTOS3
PEDRO 100 50.75
JUAN 68
AL INTRODUCIR EL NOMBRE DEL CLIENTE EN EL FORMULARIO ESTE VERIFIQUE SI EXISTE Y SE POSICIONE EN LA PRIMERA CASILLA DE GASTOS EN BLANCO PARA ESE CLIENTE
EN CASO DE QUE NO EXISTA ELCLIENTE LO INSERTE EN LA HOJA DE EXCEL
GRACIAS DE ANTEMANO
antes de empezar. ¿seguro que quieres almacenar los datos así? me refiero a ponerlos en una fila para cada cliente.
por ejemplo ¿existe alguna relación entre el gasto 3 de los distintos clientes?
mira también este envío donde se comenta cómo pasar datos de un formulario a un listado conjunto.
------
Ya sé Excel, pero necesito más
------
Ya sé Excel, pero necesito más.
Supongo que tu formulario de introducción será tan sencillo como algo así:
Con una celda para el nombre y otra para indicar el gasto. Luego le pondremos un botón para que copie los datos a la tabla de gastos por nombre de cliente.
A mí me gusta definir nombres en la hoja para luego identificar más fácilmente las cosas, así que vamos a definir unos nombres para este formulario, llamaremos Nombre a la celda donde está el nombre, y llamaremos Gasto a la celda donde está el gasto. Los defino a partir de la selección (Fórmulas>nombres definidos>Crear desde la selección)
con esto tenemos identificados los campos del formulario. He supuesto que el formulario estará en una hoja diferente de la tabla con los datos.
Ahora hay que identificar la posición de la tabla conjunta de datos.
Yo utilizaría la esquina superior izquierda de la tabla de datos para localizarla, porque todo lo demás va a crecer. Es posible también definir una tabla que incorpore todos los datos y que vaya creciendo a medida que añadas nueva información, esto depende un poco de los gustos de cada uno.
También hay que tener en cuenta cómo vamos a localizar un nombre de cliente existente, si vamos a utilizar la función Coincidir de la hoja de cálculo, o si vamos a recorrer la lista de nombres con la macro hasta encontrar uno coincidente.
en este caso vamos a hacerlo recorriendo la lista de nombres y así nos sirve de ejemplo para movernos por la hoja de cálculo.
Resumiendo:
Para movernos por la hoja vamos a utilizar el método Offset de la celda, que permite referise a una celda que se encuentra tantas filas y tantas columnas como queramos de la celda original.
También utilizaremos el método End(xlToRight) que equivale a pulsar la tecla Fin y la flecha derecha, para ir al último gasto desde la posición del nombre
quedaría algo así (adjunto también el archivo para que lo veas en funcionamiento).
Sub CopiarDatosListadoConjunto()
' copiaremos los datos del formulario a la hoja conjunta
Dim Nombre, Gasto
' leemos los datos del formulario
Nombre = Worksheets("Formulario").Range("Nombre").Value
Gasto = Worksheets("Formulario").Range("Gasto").Value
' vamos a la hoja de datos y nos situamos debajo de la esquina superior izquierda
Worksheets("Datos").Activate
ActiveSheet.Range("EsquinaSuperiorDatos").Offset(1, 0).Activate
' recorremos los datos buscando el nombre
Do Until IsEmpty(ActiveCell)
If ActiveCell.Value = Nombre Then
' anotamos el importe a la derecha del último gasto
ActiveCell.End(xlToRight).Offset(0, 1).Value = Gasto
' ya hemos terminado, así que salimos
Exit Sub
End If
'pasamos a la siguiente fila
ActiveCell.Offset(1, 0).Activate
Loop
' si llegamos aquí es porque hemos llegado al final sin encontrar el nombre
' así que escribimos el nombre y el importe
ActiveCell.Value = Nombre
ActiveCell.Offset(0, 1).Value = Gasto
End Sub
luego se pueden añadir algunas mejoras como por ejemplo que una vez copiados los datos se borren del formulario para evitar que se introduzca dos veces. Tampoco vendrá mal un mensaje informando de que se han copiado los datos bien, y cosas por el estilo.
------
Ya sé Excel, pero necesito más
------
Ya sé Excel, pero necesito más.
Etoy suiguiendo el tema por interes personal. No soy experto en esto de macros, no me dá mi ocupacion pero entro siempre a WEBs a buscar codigos cuando necesito de algo
Seria posible agregar una linea mas al codigo para que inserte la fecha actual? (fecha del sistema. Explico al insertar los datos, inserta el nombre y gasto (Miguel 72,00)
nombre en una celda y gasto en otra, PERFECTO
podria insertar tambien la fecha en la celda siguiente(a la derecha) a gastos y
Si inserto 2º gasto al mismo nombre, que me inserte nuevamente la fecha a la derecha del 2º gasto, algo así
Hoja Formulario
Hoja Datos
puedes utilizar las funciones de VBA date que devuelve la fecha del sistema, o la función now que devuelve fecha y hora.
Se puede anotar de muchas maneras, pero tal y como está el ejemplo, anotaríamos los datos de esta menra:
' anotamos el importe a la derecha del último gasto
ActiveCell.End(xlToRight).Offset(0, 1).Value = Gasto
' anotamos la fecha y hora actual a la derecha de lo anterior
ActiveCell.End(xlToRight).Offset(0, 1).Value = now
------
Ya sé Excel, pero necesito más ahora en pdf
------
Ya sé Excel, pero necesito más.
Muy bien. una pregunta y solicitud si es posible
¿Seria posible que ingresara tambien la fecha al 1º ingreso y no solamente al 2º?.
Esta ingresando la fecha solo despues del 1º estar insertado, es decir al insertar el segundo Gastos es cuando inserta la fecha.
Gracias por contestar y gracias por tu aporte, me será de utilidad
Edito:
Agregue mas esta linea al final pero no se resuelve lo que estoy buscando, BUENO, no es que no se resuelva, en parte si, EXPLICO
Si cambio en ves de Now cambio por Date, no funciona bien, si funciona con Now,
Porque no puedo SOLO marcar la fecha sin la hora?
ActiveCell.Value = Nombre
ActiveCell.Offset(0, 1).Value = Gasto
' anotamos la fecha y hora actual a la derecha de lo anterior
ActiveCell.End(xlToRight).Offset(0, 1).Value = now
End Sub
En cuanto a lo de Date, debería funcionar, ¿qué anota en la celda cuando le dices que emplee Date?
------
Ya sé Excel, pero necesito más ahora en pdf
------
Ya sé Excel, pero necesito más.
Anota la fecha y 00.00 seguido pero si activas la celda en la barra te aparece fecha y hora a 12:00:00 AM ASÃ: 17/12/2011 12:00.00 AM
Revisando, la celda tiene formato dd/mm/yyyy hh:mm
Ahora, me di cuenta que con Now y la linea abajo que le monte, inserta fecha y hota desde el 1º inserto, 2º bien pero el 3º inserta solo la fecha, 4º bien(fecha y hora) 5º bien ect ect, hasta 10 que inserte bien,solo falla en el 3º que solo inserta la fecha
comprueba el formato de la columna, si tiene formato de fecha sin hora, puede que la hora no se vea, aunque sí esté en la celda, mira lo que pone en la barra de fórmulas, porque la celda puede no mostrarlo todo.
------
Ya sé Excel, pero necesito más ahora en pdf
------
Ya sé Excel, pero necesito más.
La columna como tal, no tiene formato pero al insertar, como dije arriba, la celda presenta ese formato.
Di el mismo formato a toda columna y sucede lo mismo con Date.
Me llama la atencion que: verifique las columnas VACIAS, donde pudiera ser insertadas la fecha y hora y todas tiene el formato mensionado.
Despues de escribir lo anterior, LA MENTE TRABAJABA y me pedia para hacer una otra prueba, la fui hacer y consistio en:
Cree una hoja nueva, le di el nombre de datos1, en el codigo hice el cambio de Datos a Datos1, defini el nombre de A1, verifique que las celdas donde podieran insertar la fecha y hora y me di cuenta que NINGUNA tenia formato, ni celdas ni columnas.
Hice 1 inserto de datos con Now, me inmserto la fecha y hora en C2, verifico el formato de celda y tiene dd/mm/yyyy hh:mm.
Hago el cambio en el codigo de Now para Date, inserto datos (en la misma linea(mismo nombre)) y inserta en E2 solo la fecha, verifico el formato, tiene SOLO formato de fecha sin hora.
¿Porque sucedia lo anterior? de insertar con Date 17/12/2011 00:00, PORQUE LAS CELDAS AL SER USADAS ANTERIORMENTE CON FECHA Y HORA (Now) puedes borrar el contenido pero el formato queda, entonces, al hacer el cambio de Now a Date, ya la celda tiene el formato dd/mm/yyyy hh:mm anterior y así se queda, POR ESO EL ERROR EN LAS CELDAS ANTERIORMENTE con Date.
Este punto ya resuelto el de fallar en el 3º inserto, tambien
Me queda un tema a resolver, el tema se llama
Error en Macro copia hoja Activa en nuevo libro