Introducir datos desde libro abierto ha cerrado...

Quiro saber el código que necesitaría para poder mediante un botón por ejemplo, pasar los datos de ciertas celdas a ciertas celdas de otro libro excel que estará cerrado. Y cada vez que pulse en el botón para copiar un nuevo dato que me lo copie en el libro cerrado, pero en la fila superior, o sea a continuación, sin sobreescribir el dato anterior.
Ejemplo:
En el libro1 tengo la celda A1 en la cual introduzco "50", le doy al botón y me va a la celda B3 del libro2 que esta cerrado y se guarda.
Después en el libro1, en la celda A1 pongo "40" y al darle al botón me va a la celda B4 del libro2 y se guarda...
... Y así sucesivamente.
¿Alguien se atreve?

1 respuesta

Respuesta
2
A ver:
Te propongo la siguiente macro en la que copia un dato introducido en una celda (por ejemplo de la Hoja1)y la pega en otra celda de otra hoja (por ejemplo Hoja2) en forma de base de datos.
Sub Graba()
Dim intFila As Integer
Range("A2").Select
Selection.Copy
Sheets("Hoja2").Select
Range("A2").Select
intFila = 2
While Range("a" & CStr(intFila)).Value <> 0
intFila = intFila + 1
Wend
Range("a" & CStr(intFila)).Select
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
End Sub
Con esto consigues que te pegue el dato en la siguiente celda de la base de datos. Incluso, si detecta un vacío entre dos celdas de la base de datos, te pega el valor en ese vacío, para después continuar pegando en las celdas vacías.
Y eso lo puedo aplicar en vez de a "sheet" a "workbook". Es decir, esto copia en otra celda de otra hoja en el mismo libro. Se puede hacer lo mismo, ¿pero en la hoja de otro libro que está cerrado?
Eso me vendría perfecto, pero creo que con esto también me podría venir bien.
En teoría te tendría que funcionar igual. Yo lo he probado para un mismo libro.
Si quieres que te lo pegue en un libro distinto utiliza:
Windows("Libro2"). Activate
Si bueno, pero donde tendría que poner dentro de la función lo de Windows("Libro2"). ¿Activate?
Ok. Te vuelvo a poner toda la macro pero ahora en el caso que quisieras pegar el contenido en otro "Libro2" (el cual deberías tener abierto):
Sub Graba()
Dim intFila As Integer
Range("A2").Select
Selection.Copy
Windows("Libro2").Activate
Sheets("Hoja1").Select
Range("A2").Select
intFila = 2
While Range("a" & CStr(intFila)).Value <> 0
intFila = intFila + 1
Wend
Range("a" & CStr(intFila)).Select
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
End Sub
jaja, es que lo que te quería decir precisamente es que el libro tiene que estar cerrado y que se puedan meter los datos igualmente! ¿Es posible?
Jupeee... me vas a tener que invitar a algún kubatilla después de esto... je je.
Bueno, pues te pongo la macro en la que al ejecutarse, copias la celda, se abre el nuevo libro, pega el contenido en la base de datos de este libro, guarda, y lo cierra.
Sub Graba()
Dim intFila As Integer
Range("A2").Select
Selection.Copy
Workbooks.Open Filename:= _
"C:Libro2.xls"
Sheets("Hoja1").Select
Range("A2").Select
intFila = 2
While Range("a" & CStr(intFila)).Value <> 0
intFila = intFila + 1
Wend
Range("a" & CStr(intFila)).Select
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
ActiveWorkbook. Sabe
ActiveWindow. Close
End Sub
Es importante que pongas bien la dirección donde tienes guardado el libro que te hace de base de datos. En el ejemplo te he puesto una dirección sencilla C:Libro2.xls
A ver si así ya acabamos ;p
Dim intFila As Integer
Range("A2").Select
Selection.Copy
Workbooks.Open Filename:= _
"C:\Documents and Settings\PX\Mis documentos\Libro2.xls"
Sheets("Hoja1").Select
Range("A2").Select
intFila = 2
While Range("a" & CStr(intFila)).Value <> 0
intFila = intFila + 1
Wend
Range("a" & CStr(intFila)).Select
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
ActiveWorkbook. Sabe
ActiveWindow.Close
End Sub
Pongo la macro coo la ves, y me da el siguiente error:
Error 1004 en tiempo de ejecución
Error en el método PasteSpecial de la clase Range
Y también me da error en el método Select de la clase Range
Perdona por haber tardado en responderte.
En la macro que dices que no te funciona es posible que no hayas puesto el principio del texto "Sub Graba()".
Copia y pega todo el contenido de la macro. Te la vuelvo a poner con tu dirección:
Sub Graba()
Dim intFila As Integer
Range("A2").Select
Selection.Copy
Workbooks.Open Filename:= _
"C:\Documents and Settings\PX\Mis documentos\Libro2.xls"
Sheets("Hoja1").Select
Range("A2").Select
intFila = 2
While Range("a" & CStr(intFila)).Value <> 0
intFila = intFila + 1
Wend
Range("a" & CStr(intFila)).Select
ActiveWorkbook. Sabe
ActiveWindow. Close
End Sub
A mi sí me funciona.
A ver si ahora ya lo puedes hacer.
No es eso, ya que me sigue apareciendo el mismo error, que es el siguiente:
Error 1004 en tiempo de ejecución
Error en el método Select de la clase Range
Pues bueno... si lo dejas así... Gracias de todas maneras...
Bufff...
Pues la verdad que no sé que debe fallar.
Ya te digo que ami me funciona perfectamente.
Asegurate que la dirección del archivo a abrir esté correctamente puesta.
Si ya está bien, es possible que tu versión de excel no permita hacer ese tipo de macros.
Siento no haberte podido solucionar el problema.

Añade tu respuesta

Haz clic para o