Escribir de fila en fila sin sobre escribir
Espero me puedan ayudar con esto: Tengo unos datos en diferentes celdas en la Hoja1 y necesito pasarlos a la Hoja2 en forma de tabla, osea, que la macro me mande estos datos cada cada cierto tiempo a una fila a la Hoja2 sin sobre escribir si no que los valla poniendo en la fila siguiente.
NOTA:Ya tengo la macro que me ejecuta una rutina cada cierto tiempo.
NOTA:Ya tengo la macro que me ejecuta una rutina cada cierto tiempo.
1 respuesta
Respuesta de paramisolo
1
1
paramisolo, Desconozco temas financieros
Lo que pretendes hacer lo pones en la misma macro:
Sheets("Hoja1").Select
Range("Tu rango a copiar").Select
Sheets("Hoja2").Select
Range("A1").Select
Do While ActiveCell.Value<>""
ActiveCell.Offset(1,0).Select
If ActiveCell.Value="" Then
ActiveCell.PasteSpecial
End If
De esta forma bajará siempre en la Col A (1) hasta que encuentra una celda vacía y en esa fila pega tu rango copiado de la hoja1. Si los rangos no te sirven los cambias a tu necesidad.
>Un saludo
>Julio
Pd: si te ha servido no olvides de puntuar y finalizar la consulta.
Sheets("Hoja1").Select
Range("Tu rango a copiar").Select
Sheets("Hoja2").Select
Range("A1").Select
Do While ActiveCell.Value<>""
ActiveCell.Offset(1,0).Select
If ActiveCell.Value="" Then
ActiveCell.PasteSpecial
End If
De esta forma bajará siempre en la Col A (1) hasta que encuentra una celda vacía y en esa fila pega tu rango copiado de la hoja1. Si los rangos no te sirven los cambias a tu necesidad.
>Un saludo
>Julio
Pd: si te ha servido no olvides de puntuar y finalizar la consulta.
Gracias por la ayuda,
Resulta que al momento de ejecutarlo me aparece un error "Do sin Loop"
No se por que sale esto, La verdad no tengo mucha experiencia con macros y te pido me ayudes con esto, Disculpa y gracias.
Resulta que al momento de ejecutarlo me aparece un error "Do sin Loop"
No se por que sale esto, La verdad no tengo mucha experiencia con macros y te pido me ayudes con esto, Disculpa y gracias.
Al ponerle Loop antes de End Sub no me funciona, o que hace es llevarme a la Hoja2 pero no escribe nada.
Exacto, me quedé a medias con las instruccines, disculpa quedaría así:
Sheets("Hoja1").Select
Range("Tu rango a copiar").Select
Sheets("Hoja2").Select
Range("A1").Select
Do While ActiveCell.Value<>""
ActiveCell.Offset(1,0).Select
Loop
If ActiveCell.Value="" Then
ActiveCell.PasteSpecial
End If
Ya está efectivamente me comí el Loop, ya lo tienes.
>Un saludo
>Julio
PD: si necesitas algo más me lo dices.
Sheets("Hoja1").Select
Range("Tu rango a copiar").Select
Sheets("Hoja2").Select
Range("A1").Select
Do While ActiveCell.Value<>""
ActiveCell.Offset(1,0).Select
Loop
If ActiveCell.Value="" Then
ActiveCell.PasteSpecial
End If
Ya está efectivamente me comí el Loop, ya lo tienes.
>Un saludo
>Julio
PD: si necesitas algo más me lo dices.
Gracias,
Mira, lo que pasa es que al ejecutar la macro m aparece un error "400", no se si de pronto a mi me falta algo, me podrías indicar si de pronto deba tener algo en cuenta.
Gracias.
Mira, lo que pasa es que al ejecutar la macro m aparece un error "400", no se si de pronto a mi me falta algo, me podrías indicar si de pronto deba tener algo en cuenta.
Gracias.
(Hasta donde se) un error 400 es tan "generico" que puede ser provocado por la aplicación o "el objeto"
En tiempo de ejecución (generalmente) se debe a algún complemento instalado (posiblemente de terceros)
Una forma de localizar al "causante" es deshabiitar TODOS los complementos (menu: herramientas / complementos)
Cerrar la aplicación y volverla a abrir (complementos deshabilitados)
E ir habilitando uno por uno hasta localizar al culpable (en caso de que se trate de los complementos instalados)
No te aparece el error si quitas mis instrucciones y dejas las tuyas solamente.
Aclarame esto.
>Un saludo
>Julio
En tiempo de ejecución (generalmente) se debe a algún complemento instalado (posiblemente de terceros)
Una forma de localizar al "causante" es deshabiitar TODOS los complementos (menu: herramientas / complementos)
Cerrar la aplicación y volverla a abrir (complementos deshabilitados)
E ir habilitando uno por uno hasta localizar al culpable (en caso de que se trate de los complementos instalados)
No te aparece el error si quitas mis instrucciones y dejas las tuyas solamente.
Aclarame esto.
>Un saludo
>Julio
Intenté en otro equipo y no me sale ese error, pero la macro no realiza lo que debería hacer,
Lo que hace es cambiarme de hoja pero sin escrbirme los datos, por ejemplo: estoy en la Hoja1 y le doy ejecutar y me lleva a la Hoja 2 pero no copia los datos de la hoja1.
Este es el código que tengo y no funciona:
Sub Llevar()
Sheets("Hoja1").Select
Range("E10:H10").Select
Sheets("Hoja2").Select
Range("A2:D2").Select
Do While ActiveCell.Value<>""
ActiveCell.Offset(1,0).Select
Loop
If ActiveCell.Value="" Then
ActiveCell.PasteSpecial
End If
End Sub
Este otro tampoco:
Sub Llevar()
Sheets("Hoja1").Select
Range("A1").Select
Sheets("Hoja2").Select
Range("A1").Select
Do While ActiveCell.Value<>""
ActiveCell.Offset(1,0).Select
Loop
If ActiveCell.Value="" Then
ActiveCell.PasteSpecial
End If
End Sub
Lo que hace es cambiarme de hoja pero sin escrbirme los datos, por ejemplo: estoy en la Hoja1 y le doy ejecutar y me lleva a la Hoja 2 pero no copia los datos de la hoja1.
Este es el código que tengo y no funciona:
Sub Llevar()
Sheets("Hoja1").Select
Range("E10:H10").Select
Sheets("Hoja2").Select
Range("A2:D2").Select
Do While ActiveCell.Value<>""
ActiveCell.Offset(1,0).Select
Loop
If ActiveCell.Value="" Then
ActiveCell.PasteSpecial
End If
End Sub
Este otro tampoco:
Sub Llevar()
Sheets("Hoja1").Select
Range("A1").Select
Sheets("Hoja2").Select
Range("A1").Select
Do While ActiveCell.Value<>""
ActiveCell.Offset(1,0).Select
Loop
If ActiveCell.Value="" Then
ActiveCell.PasteSpecial
End If
End Sub
Pues claro que no si en ningún momento has copiado ningún dato solo te has situado y has pegado (nada, claro si no has copiado previamente... miralo y te darás cuenta):
Sub Llevar()
Sheets("Hoja1").Select
Range("E10:H10").Copy
Sheets("Hoja2").Select
Range("A2").Select
Do While ActiveCell.Value<>""
ActiveCell.Offset(1,0).Select
Loop
If ActiveCell.Value="" Then
ActiveCell.PasteSpecial
End If
End Sub
Esto te servirá solo una vez si quieres seguir copiando rangos y llevándolos a la hoja 2 hay que modificar la macro. Explicame después de hacer esto que quieres hacer más, o como lo quieres hacer.
>Un saludo
>Julio
Sub Llevar()
Sheets("Hoja1").Select
Range("E10:H10").Copy
Sheets("Hoja2").Select
Range("A2").Select
Do While ActiveCell.Value<>""
ActiveCell.Offset(1,0).Select
Loop
If ActiveCell.Value="" Then
ActiveCell.PasteSpecial
End If
End Sub
Esto te servirá solo una vez si quieres seguir copiando rangos y llevándolos a la hoja 2 hay que modificar la macro. Explicame después de hacer esto que quieres hacer más, o como lo quieres hacer.
>Un saludo
>Julio
Yo si tenia datos,
Me di cuenta que no me funcionaba por que el código lo estaba grabando en el modulo de la Hoja1 y debe ser en el modulo del Libro (This WorkBook).
¿Cómo hago para que esta macro se ejecute al ejecutarse otra que tengo en el m{odulo de la hoja1? Y que no se quede en la Hoja2 si no que vuelva a mostrarme la Hoja1 y además que los datos que fueron copiados no queden lineados como cuando el doy copiar.
Gracias por la colaboración.
Me di cuenta que no me funcionaba por que el código lo estaba grabando en el modulo de la Hoja1 y debe ser en el modulo del Libro (This WorkBook).
¿Cómo hago para que esta macro se ejecute al ejecutarse otra que tengo en el m{odulo de la hoja1? Y que no se quede en la Hoja2 si no que vuelva a mostrarme la Hoja1 y además que los datos que fueron copiados no queden lineados como cuando el doy copiar.
Gracias por la colaboración.
No hay modulo de hoja, los módulos sirven para todo el libro, hay macros que se ejecutan en la hoja pero no son módulos.
Para que vuelva a la hoja 1 y se sitúe en una celda y no te quede marcado el rango copiado pones esto antes del End Sub:
Sheets("Hoja1").Select
Range("A1").Select
Si quieres ejecutar primero la macro de tu hoja y a continuación esta, antes del End Sub de la tuya debes de poner esta linea:
Call Llevar
Y con esto lo tienes todo hecho.
Finaliza la consulta y puntualá. Gracias.
>Un saludo
>Julio
Para que vuelva a la hoja 1 y se sitúe en una celda y no te quede marcado el rango copiado pones esto antes del End Sub:
Sheets("Hoja1").Select
Range("A1").Select
Si quieres ejecutar primero la macro de tu hoja y a continuación esta, antes del End Sub de la tuya debes de poner esta linea:
Call Llevar
Y con esto lo tienes todo hecho.
Finaliza la consulta y puntualá. Gracias.
>Un saludo
>Julio
Ok, mil gracias.
Solo una cosa más, metí la macro dentro de un If de una macro que ya tenía hecha y funciona hasta la parte que dice Range("A1"). Select (linea 4) al ejecutar mi macro y al llegar a esta sale un error que dice: "error en el metodo select del objeto Range" y no copia nada,
¿Sabes qué pueda ser?
Gracias, espero no tener que preguntar más. Gracias
Solo una cosa más, metí la macro dentro de un If de una macro que ya tenía hecha y funciona hasta la parte que dice Range("A1"). Select (linea 4) al ejecutar mi macro y al llegar a esta sale un error que dice: "error en el metodo select del objeto Range" y no copia nada,
¿Sabes qué pueda ser?
Gracias, espero no tener que preguntar más. Gracias
Y la linea Call Llevar no me funciona, dice que no existe, eso pasa por que la macro Llevar está en otro módulo. ¿Sabes qué hacer?
Gracias y disculpa tantas preguntas, es solo que necesito esto con mucha urgencia y no tengo mucho conocimiento en VB. Gracias
Gracias y disculpa tantas preguntas, es solo que necesito esto con mucha urgencia y no tengo mucho conocimiento en VB. Gracias
Explicame como tienes tus macros y a que le llamas tu módulos de hoja. A ver si nos aclaramos, claro que esta en otro modulo porque debe ser así si tu tienes tu macro en la hoja1.
Explicame como tienes las macros colocadas.
>Un saludo
>Julio
Explicame como tienes las macros colocadas.
>Un saludo
>Julio
En el editor de Visual puedes ver que al lado derecho está la ventana de proyectos en la cual por defecto aparece un ramal y ahí aparecen Hoja1 abajo Hoja2 abajo Hoja3 y luego ThisWorkBook, resulta que mi macro está en la Hoja1 y en la cual dentro de un If estoy poniendo Call Llevar porque necesito que me llame esta macro en ese preciso momento, quisiera que esta macro Llevar me funcionara grabándola en la misma Hoja1 pero como me funciona ahí tuve que guardarla en ThisWorkBook, pero al momento en que la macro llega a esa parte el depurador saca el mensaje que dice: "no se ha definido Sub o Function"
Espero haber sido claro, gracias
Espero haber sido claro, gracias
Vamos a ver si te aclaro un poquito el funcionamiento de VBA para ejecutar las macros:
Directamente en las hojas se pueden colocar macros que sirven para que se ejecuten en esa hoja, comienzan por Private Sub (exclusivamente para esa hoja) y en los módulos se colocan las macros que se pueden utilizar para todo el Libro, basándonos en esto te pongo un ejemplo:
Macro en la Hoja colocada en un botón que dibujamos en la misma hoja:
Private Sub CommandButton1_Click()
Range("A1").Select
ActiveCell.Value=8
End Sub
Esta macro colocada en la hoja nos evita tener que definir al principio que hoja se elije para poner en A1 que su valor es 8. Si necesitamos por ejemplo que desde ese botón vayamos a ejecutar instrucciones en otra hoja podemos crear un macro en un módulo que nos lleve a esa hoja termine su instrucción y vuelva a la macro de la hoja osea al commandbutton1, ejemplo:
Private Sub CommandButton1_click()
Range("A1").Select
ActiveCell.Value=8
If ActiveCell.Value="8" Then
Call insertar
End If
End Sub
Aquí estamos diciendo que si el valor de la celda activa es 8 que vaya a la macro insertar. Pues bien debemos tener en un modulo esta otra macro para que se ejecute:
Sub insertar()
Sheets("Hoja2").Select
Range("A1").Select
ActiveCell.Value=9
End Sub
Con esto en un modulo ( ojo debe de comenzar por Sub y no por Private Sub) conseguimos que con pulsar un botón en la Hoja1 esta misma macro ejecute la otra si se cumple la condición del valor 8 en la celda A1 y nos pondría 9 en A1 de la Hoja2, después volvería a la macro del Commanbutton1 y si hubiese más código seguiría ejecutándose.
No sé si me he explicado para que así evites los errores que te está dando tu código.
Si después de esto no lo sacas adelante, ponme un correo para que te solicite el archivo y me explicas que quieres hacer en él para que te arme las macros yo.
>Un saludo
>Julio
Directamente en las hojas se pueden colocar macros que sirven para que se ejecuten en esa hoja, comienzan por Private Sub (exclusivamente para esa hoja) y en los módulos se colocan las macros que se pueden utilizar para todo el Libro, basándonos en esto te pongo un ejemplo:
Macro en la Hoja colocada en un botón que dibujamos en la misma hoja:
Private Sub CommandButton1_Click()
Range("A1").Select
ActiveCell.Value=8
End Sub
Esta macro colocada en la hoja nos evita tener que definir al principio que hoja se elije para poner en A1 que su valor es 8. Si necesitamos por ejemplo que desde ese botón vayamos a ejecutar instrucciones en otra hoja podemos crear un macro en un módulo que nos lleve a esa hoja termine su instrucción y vuelva a la macro de la hoja osea al commandbutton1, ejemplo:
Private Sub CommandButton1_click()
Range("A1").Select
ActiveCell.Value=8
If ActiveCell.Value="8" Then
Call insertar
End If
End Sub
Aquí estamos diciendo que si el valor de la celda activa es 8 que vaya a la macro insertar. Pues bien debemos tener en un modulo esta otra macro para que se ejecute:
Sub insertar()
Sheets("Hoja2").Select
Range("A1").Select
ActiveCell.Value=9
End Sub
Con esto en un modulo ( ojo debe de comenzar por Sub y no por Private Sub) conseguimos que con pulsar un botón en la Hoja1 esta misma macro ejecute la otra si se cumple la condición del valor 8 en la celda A1 y nos pondría 9 en A1 de la Hoja2, después volvería a la macro del Commanbutton1 y si hubiese más código seguiría ejecutándose.
No sé si me he explicado para que así evites los errores que te está dando tu código.
Si después de esto no lo sacas adelante, ponme un correo para que te solicite el archivo y me explicas que quieres hacer en él para que te arme las macros yo.
>Un saludo
>Julio
Ok, te entiendo, lo que pasa es que la macro que me pasaste no me funciona en cualquier hoja así la inicie en "Sub" esta macro solo me está funcionando en el modulo de escritura de VB ThisWorkBook y estando aquí no me funciona el comando "Call" que tengo en el modulo de edición de la Hoja1. Eso es lo que pasa.
Bueno, la verdad ya me siento avergonzado por tanta pregunta, si deseas ayudarme más te lo agradeceré. Tomaré esta propuesta de mandarte el archivo si no me funciona un intento más, me dices tu correo por favor.
Tu calificación es muy buena.
Gracias por todo.
Bueno, la verdad ya me siento avergonzado por tanta pregunta, si deseas ayudarme más te lo agradeceré. Tomaré esta propuesta de mandarte el archivo si no me funciona un intento más, me dices tu correo por favor.
Tu calificación es muy buena.
Gracias por todo.
- Compartir respuesta
- Anónimo
ahora mismo