Foros del Web » Soporte técnico » Ofimática »

Podría hacerce esto en excel? ayuda!!!!

Estas en el tema de Podría hacerce esto en excel? ayuda!!!! en el foro de Ofimática en Foros del Web. Hola a todos en foros del web Tengo un documento de excel con 2 hojas, en la hoja 1 tengo una pequeña boleta de prestamo ...
  #1 (permalink)  
Antiguo 16/11/2009, 09:21
 
Fecha de Ingreso: septiembre-2009
Ubicación: Managua
Mensajes: 128
Antigüedad: 14 años, 6 meses
Puntos: 5
De acuerdo Podría hacerce esto en excel? ayuda!!!!

Hola a todos en foros del web

Tengo un documento de excel con 2 hojas, en la hoja 1 tengo una pequeña boleta de prestamo de libro para rellenar y dos botones que he agregado (Guardar e imprimir). Lo que deseo que al dar click al boton guardar se copie dicha ficha a la hoja 2 y asi sucesivamente al ir rellenando una nueva ficha que se coloque debajo de la anterior por medio de un macro.

He logrado copiar una vez la ficha dentro de hoja 2, pero al insertar la segunda me dice que la operacion de pegado solo puede realizarse en las filas con 1, o sea A1, B1,C1.....etc

Será posible que alguien me pueda ayudar en esto . Adjunto el codigo que llevo por el momento.



Dim fs, ts, s as Object
Dim suma As Integer

'***********metodo para guardar la ficha *********

Private Sub cmdGuardar_Click()
leer_archivo ' llamo a este metodo para leer el numero (lo almaceno en un fichero) de fila donde empezará la nueva ficha que llegue
copiar_ficha
End Sub

Sub copiar_ficha()
Cells.Select
Selection.Copy
Sheets("Hoja2").Select
suma = s + 20 ' le sumo 20 porque la boleta tiene 21 filas, por ejemplo: la primera ficha va asi Range("A1:H21"), a las cantidades de A y H les sumo 20 y lo guardo en el archivo de texto para la siguiente ficha que agregué
ActiveSheet.Range("A" & s & ":H" & suma).Select
ActiveSheet.Paste
ActiveSheet.Range("A" & s & ":H" & suma).Select
modificar_fila_inicio (suma)
Sheets("Hoja1").Select
Range("A1:H21").Select
Application.CutCopyMode = False
End Sub

' Funcion que nos modifica el registro de la ultima fila que se inserto
' es decir de qué fila se partira a adjuntar la otra ficha generada
' creamos un fichero que nos llevará el control debido a que si colocaramos una variable
' para llevar dicho control se perderia la secuencia de la siguiente fila de inicio
' debido a que pierde su ciclo de vida, por lo tanto su valor al cerrar la hoja de Excel

Sub modificar_fila_inicio(sw As Integer)
Set fs = CreateObject("Scripting.FileSystemObject")
Set a = fs.CreateTextFile("c:\archivoprueba.txt", True)
a.WriteLine ("" & sw & "")
a.Close
End Sub


' Funcion que lee la fila de donde se empezará a adjuntar la nueva ficha
' abre el fichero, lee la fila y cierra el fichero

Sub leer_archivo()
Set fs = CreateObject("Scripting.FileSystemObject")
Set f = fs.GetFile("c:\archivoprueba.txt")
Set ts = f.OpenAsTextStream(ForReading, TristateUseDefault)
s = ts.ReadLine
ts.Close
End Sub


Gracias de antemano
  #2 (permalink)  
Antiguo 16/11/2009, 12:53
Avatar de ceSharp  
Fecha de Ingreso: octubre-2008
Ubicación: Madrid
Mensajes: 495
Antigüedad: 15 años, 5 meses
Puntos: 66
Respuesta: Podría hacerce esto en excel? ayuda!!!!

hola equality,

si quieres sustituye tus líneas de código por estas en tu botón
------------------------------------------------
'selecciono el rango
Range("A1:E1").Select

'copio el rango
Selection.Copy

'voy a hoja2
Sheets("Hoja2").Select

'busco la fila vacía
Dim i As Integer
i = 1
Dim rango As String
Dim salir As Boolean

Do
If Hoja2.Range("A" & i) = "" Then
rango = "A" & i
salir = True
Else
i = i + 1
End If
Loop Until salir

'selecciono el rango vacío y pego la seleccion
Hoja2.Range(rango & ":" & "E" & i).Select
ActiveSheet.Paste

'opcional: si no quieres volver a la hoja1 comenta esta línea
Sheets("Hoja1").Select
-------------------------------------------------
esta funcioncilla (Que seguro que se puede mejorar) copia de A1 a E1, va a la segunda hoja y busca en la columna A la primera que esta vacía, entonces pega lo copiado.

si es lo que quieres adáptala a tus necesidades (seleccionando las columnas que quieras, etc). si tienes dudas nos cuentas.

salu2
  #3 (permalink)  
Antiguo 16/11/2009, 17:06
 
Fecha de Ingreso: septiembre-2009
Ubicación: Managua
Mensajes: 128
Antigüedad: 14 años, 6 meses
Puntos: 5
Respuesta: Podría hacerce esto en excel? ayuda!!!!

Cita:
hola equality,

si quieres sustituye tus líneas de código por estas en tu botón
------------------------------------------------
'selecciono el rango
Range("A1:E1").Select

'copio el rango
Selection.Copy

'voy a hoja2
Sheets("Hoja2").Select

'busco la fila vacía
Dim i As Integer
i = 1
Dim rango As String
Dim salir As Boolean

Do
If Hoja2.Range("A" & i) = "" Then
rango = "A" & i
salir = True
Else
i = i + 1
End If
Loop Until salir

'selecciono el rango vacío y pego la seleccion
Hoja2.Range(rango & ":" & "E" & i).Select
ActiveSheet.Paste

'opcional: si no quieres volver a la hoja1 comenta esta línea
Sheets("Hoja1").Select
-------------------------------------------------
esta funcioncilla (Que seguro que se puede mejorar) copia de A1 a E1, va a la segunda hoja y busca en la columna A la primera que esta vacía, entonces pega lo copiado.

si es lo que quieres adáptala a tus necesidades (seleccionando las columnas que quieras, etc). si tienes dudas nos cuentas.

salu2
Hola ceSharp, gracias por el codigo que me has proporcionado, pero hace lo mismo que el codigo que tengo ahorita , lo que queria era que al dar el siguiente guardar, se coloque la copia de la hoja 1 a la hoja 2 debajo de las copias que ya existen

Gracias por el intento
  #4 (permalink)  
Antiguo 17/11/2009, 02:06
Avatar de ceSharp  
Fecha de Ingreso: octubre-2008
Ubicación: Madrid
Mensajes: 495
Antigüedad: 15 años, 5 meses
Puntos: 66
Respuesta: Podría hacerce esto en excel? ayuda!!!!

a ver, que ahora creo que me he enterado... jejejeje
Tu quieres rellenar en hoja1 un rango de varias filas y columnas, no?
y que dicho rango se copie en la hoja2 y cada nueva ficha se vaya copiando justo debajo de la última copiada, eso es?
si quieres cópiate este código para tu botón. yo he estado probando esta funcionalidad y funciona bien.
-----------------------------------------------
'declaro la variable que controla la cantidad de fichas almacenadas
Dim fichas As Integer
fichas = Hoja2.Range("F1")

'selecciono el rango de la hoja1 (en este caso desde A1 a E6)
Range("A1:E6").Select

'copio el rango
Selection.Copy

'voy a hoja2
Sheets("Hoja2").Select

'mediante la variable fichas sé en todo momento cuántas hay almacenadas,
'sin necesidad de abrir ningún archivo. si fichas es 0 es que es la primera de todas
If fichas = 0 Then
Hoja2.Range("A1").Select
ActiveSheet.Paste
'y actualizo la celda F1 de hoja2 para que ahora haya una
Hoja2.Range("F1") = 1
Else
'si fichas es mayor que cero multiplico la variable por el número de filas
'que copio de la hoja1. En este ejemplo el total de filas es 6 añado un más uno
'para que no pise la última fila de la anterior ficha
Hoja2.Range("A" & (fichas * 6) + 1).Select
ActiveSheet.Paste
'y actualizo la celda F1 con una ficha más
Hoja2.Range("F1") = Hoja2.Range("F1") + 1
End If

'opcional: si no quieres volver a la hoja1 comenta esta línea
Sheets("Hoja1").Select
Range("A1").Select
--------------------------------------------------
como puedes ver en este ejemplo ya no es necesario que llames a un archivo externo para saber en que fila tiene que empezar a pegar la ficha, la almacenas en la propia hoja. Yo te he puesto F1 de la hoja2, pero bueno, veo que controlas VBA y sabrás 'esconder' bien esta celda que marcará cuántas fichas tienes ya almacenadas.
bueno, si esto tampoco te vale ya desisto! jejejejejeje que debe ser que ando muy 'espeso' últimamente. ;)

salu2
  #5 (permalink)  
Antiguo 17/11/2009, 11:57
 
Fecha de Ingreso: septiembre-2009
Ubicación: Managua
Mensajes: 128
Antigüedad: 14 años, 6 meses
Puntos: 5
Respuesta: Podría hacerce esto en excel? ayuda!!!!

Cita:
Respuesta: Podría hacerce esto en excel? ayuda!!!!
a ver, que ahora creo que me he enterado... jejejeje
Tu quieres rellenar en hoja1 un rango de varias filas y columnas, no?
y que dicho rango se copie en la hoja2 y cada nueva ficha se vaya copiando justo debajo de la última copiada, eso es?
si quieres cópiate este código para tu botón. yo he estado probando esta funcionalidad y funciona bien.
-----------------------------------------------
'declaro la variable que controla la cantidad de fichas almacenadas
Dim fichas As Integer
fichas = Hoja2.Range("F1")

'selecciono el rango de la hoja1 (en este caso desde A1 a E6)
Range("A1:E6").Select

'copio el rango
Selection.Copy

'voy a hoja2
Sheets("Hoja2").Select

'mediante la variable fichas sé en todo momento cuántas hay almacenadas,
'sin necesidad de abrir ningún archivo. si fichas es 0 es que es la primera de todas
If fichas = 0 Then
Hoja2.Range("A1").Select
ActiveSheet.Paste
'y actualizo la celda F1 de hoja2 para que ahora haya una
Hoja2.Range("F1") = 1
Else
'si fichas es mayor que cero multiplico la variable por el número de filas
'que copio de la hoja1. En este ejemplo el total de filas es 6 añado un más uno
'para que no pise la última fila de la anterior ficha
Hoja2.Range("A" & (fichas * 6) + 1).Select
ActiveSheet.Paste
'y actualizo la celda F1 con una ficha más
Hoja2.Range("F1") = Hoja2.Range("F1") + 1
End If

'opcional: si no quieres volver a la hoja1 comenta esta línea
Sheets("Hoja1").Select
Range("A1").Select
--------------------------------------------------
como puedes ver en este ejemplo ya no es necesario que llames a un archivo externo para saber en que fila tiene que empezar a pegar la ficha, la almacenas en la propia hoja. Yo te he puesto F1 de la hoja2, pero bueno, veo que controlas VBA y sabrás 'esconder' bien esta celda que marcará cuántas fichas tienes ya almacenadas.
bueno, si esto tampoco te vale ya desisto! jejejejejeje que debe ser que ando muy 'espeso' últimamente. ;)

salu2
Hola ceSharp muchisimas gracias por tu interes en mi problema, al copiar la primera vez lo hace de maravilla pero al realizar la segunda copia se coloca encima de la primera

aca te voy a adjuntar el link donde tengo mi hoja de excel para ver si me podes ayudar directamente con mi problema

pastoral.uca.edu.ni/Boleta[/url] de prestamo.xlsm

Gracias por tu ayuda hermano
Disculpa la molestia pero necesito esto urgente
  #6 (permalink)  
Antiguo 17/11/2009, 11:59
 
Fecha de Ingreso: septiembre-2009
Ubicación: Managua
Mensajes: 128
Antigüedad: 14 años, 6 meses
Puntos: 5
Respuesta: Podría hacerce esto en excel? ayuda!!!!

Cita:
Respuesta: Podría hacerce esto en excel? ayuda!!!!
a ver, que ahora creo que me he enterado... jejejeje
Tu quieres rellenar en hoja1 un rango de varias filas y columnas, no?
y que dicho rango se copie en la hoja2 y cada nueva ficha se vaya copiando justo debajo de la última copiada, eso es?
si quieres cópiate este código para tu botón. yo he estado probando esta funcionalidad y funciona bien.
-----------------------------------------------
'declaro la variable que controla la cantidad de fichas almacenadas
Dim fichas As Integer
fichas = Hoja2.Range("F1")

'selecciono el rango de la hoja1 (en este caso desde A1 a E6)
Range("A1:E6").Select

'copio el rango
Selection.Copy

'voy a hoja2
Sheets("Hoja2").Select

'mediante la variable fichas sé en todo momento cuántas hay almacenadas,
'sin necesidad de abrir ningún archivo. si fichas es 0 es que es la primera de todas
If fichas = 0 Then
Hoja2.Range("A1").Select
ActiveSheet.Paste
'y actualizo la celda F1 de hoja2 para que ahora haya una
Hoja2.Range("F1") = 1
Else
'si fichas es mayor que cero multiplico la variable por el número de filas
'que copio de la hoja1. En este ejemplo el total de filas es 6 añado un más uno
'para que no pise la última fila de la anterior ficha
Hoja2.Range("A" & (fichas * 6) + 1).Select
ActiveSheet.Paste
'y actualizo la celda F1 con una ficha más
Hoja2.Range("F1") = Hoja2.Range("F1") + 1
End If

'opcional: si no quieres volver a la hoja1 comenta esta línea
Sheets("Hoja1").Select
Range("A1").Select
--------------------------------------------------
como puedes ver en este ejemplo ya no es necesario que llames a un archivo externo para saber en que fila tiene que empezar a pegar la ficha, la almacenas en la propia hoja. Yo te he puesto F1 de la hoja2, pero bueno, veo que controlas VBA y sabrás 'esconder' bien esta celda que marcará cuántas fichas tienes ya almacenadas.
bueno, si esto tampoco te vale ya desisto! jejejejejeje que debe ser que ando muy 'espeso' últimamente. ;)

salu2
Hola ceSharp muchisimas gracias por tu interes en mi problema, al copiar la primera vez lo hace de maravilla pero al realizar la segunda copia se coloca encima de la primera

aca te voy a adjuntar el link, solamente le antepones el http a la direccion que esta marcada con color donde tengo mi hoja de excel para ver si me podes ayudar directamente con mi problema

pastoral.uca.edu.ni/Boleta de prestamo.xlsm

Gracias por tu ayuda hermano
Disculpa la molestia pero necesito esto urgente
  #7 (permalink)  
Antiguo 17/11/2009, 13:33
Avatar de ceSharp  
Fecha de Ingreso: octubre-2008
Ubicación: Madrid
Mensajes: 495
Antigüedad: 15 años, 5 meses
Puntos: 66
Respuesta: Podría hacerce esto en excel? ayuda!!!!

Bueno, creo que ya he dado con ello...

el problema era que la celda F1 que te he puesto en el ejemplo debías de haberla cambiado por J1 (por ejemplo) ya que F1 en hoja2 está dentro de la primera ficha, y pisarías el contenido (no es grave pero la primera quedaría mal)
El otro problema estaba en que tenías que haber modificado la cantidad de lineas a 'saltarse' para la segunda ficha; en mi ejemplo te puse 6 y deben de ser 20, porque 20 son las filas que tiene cada una de tus fichas.
Este sería el código correcto para tu botón
----------------------------------------
'declaro la variable que controla la cantidad de fichas almacenadas
Dim fichas As Integer
fichas = Hoja2.Range("J1")

'selecciono el rango de la hoja1 (en este caso desde A1 a E6)
Range("A1:H20").Select

'copio el rango
Selection.Copy

'voy a hoja2
Sheets("Hoja2").Select

'mediante la variable fichas sé en todo momento cuántas hay almacenadas,
'sin necesidad de abrir ningún archivo. si fichas es 0 es que es la primera de todas
If fichas = 0 Then
Hoja2.Range("A1").Select
ActiveSheet.Paste
'y actualizo la celda J1 de hoja2 para que ahora haya una
Hoja2.Range("J1") = 1
Else
'si fichas es mayor que cero multiplico la variable por el número de filas
'que copio de la hoja1. Cada ficha tiene 20 filas. añado un más uno
'para que no pise la última fila de la anterior ficha
Hoja2.Range("A" & (fichas * 20) + 1).Select
ActiveSheet.Paste
'y actualizo la celda F1 con una ficha más
Hoja2.Range("J1") = Hoja2.Range("J1") + 1
End If

'opcional: si no quieres volver a la hoja1 comenta esta línea
Sheets("Hoja1").Select
Range("A1").Select

'leer_archivo
'Call copiar_ficha
------------------------------------------

Prueba ahora y verás que funciona (o eso al menos espero...)

salu2
  #8 (permalink)  
Antiguo 17/11/2009, 14:33
 
Fecha de Ingreso: septiembre-2009
Ubicación: Managua
Mensajes: 128
Antigüedad: 14 años, 6 meses
Puntos: 5
Respuesta: Podría hacerce esto en excel? ayuda!!!!

Hola ceSharp te cuento que tu codigo me funciono de maravilla, muchisimas gracias hermano, por eso acudi a este foro porque para mi aca estan los mejores....

Te pasaste hermano
Gracias infinitas
Bendiciones y gracias por seguir mi post desde inicio y por la solucion claro esta
  #9 (permalink)  
Antiguo 17/11/2009, 14:35
 
Fecha de Ingreso: septiembre-2009
Ubicación: Managua
Mensajes: 128
Antigüedad: 14 años, 6 meses
Puntos: 5
Respuesta: Podría hacerce esto en excel? ayuda!!!!

Una ultima preguntita ceSharp si no es molestia me podrias decir como mandar a imprimir la ficha que tengo en la hoja 1?

Gracias amigo
  #10 (permalink)  
Antiguo 18/11/2009, 01:24
Avatar de ceSharp  
Fecha de Ingreso: octubre-2008
Ubicación: Madrid
Mensajes: 495
Antigüedad: 15 años, 5 meses
Puntos: 66
Respuesta: Podría hacerce esto en excel? ayuda!!!!

Hola equality,

Me alegro muchísimo que te haya funcionado!
por otro lado, el tema de la impresión no creo que te vaya a acarrear tantos problemas como la tarea de copiar las fichas a la hoja2.
yo creo que en el caso de la impresión lo que debes hacer es asignar a un botón una macro en la cual simplemente ve a imprimir el documento de la hoja1.
las sentencias de código pueden ser estas
--------------------------------------------------
Application.ActivePrinter = "\\orion\Canon iR2200-3300 - Medinaceli en Ne04:"
ExecuteExcel4Macro _
"PRINT(1,,,1,,,,,,,,2,""\\orion\Canon iR2200-3300 - Medinaceli en Ne04:"",,TRUE,,FALSE)"
---------------------------------------------------
pero claro, este código es para mi impresora, deberías cambiar donde pone \\orion\Canon.... por la tuya.
Hay un truco que supongo que muchos sabrán pero bueno, no está de más contarlo para poder conocer el código VBA de excel:
El truco consiste en grabar una macro y, una vez finalizada, ir al código VBA a ver que sentencias ha grabado.
En este caso (que yo no tenía ni idea de qué sentencias dicta excel para efectuar una tarea de impresión) he creado un botón, iniciado una grabación de macro y simplemente he mandao a imprimir un documento. Una vez finalizada la macro he ido al VBA (pulsando Alt+F11) y he visto en el módulo creado (las macros de botones las crea en un módulo aparte de las hojas del libro) las sentencias de código generadas; así de simple.

De todos modos, si tienes dudas/problemas no dudes en preguntar en el foro.

salu2
  #11 (permalink)  
Antiguo 18/11/2009, 08:09
 
Fecha de Ingreso: septiembre-2009
Ubicación: Managua
Mensajes: 128
Antigüedad: 14 años, 6 meses
Puntos: 5
Respuesta: Podría hacerce esto en excel? ayuda!!!!

Cita:
Hola equality,

Me alegro muchísimo que te haya funcionado!
por otro lado, el tema de la impresión no creo que te vaya a acarrear tantos problemas como la tarea de copiar las fichas a la hoja2.
yo creo que en el caso de la impresión lo que debes hacer es asignar a un botón una macro en la cual simplemente ve a imprimir el documento de la hoja1.
las sentencias de código pueden ser estas
--------------------------------------------------
Application.ActivePrinter = "\\orion\Canon iR2200-3300 - Medinaceli en Ne04:"
ExecuteExcel4Macro _
"PRINT(1,,,1,,,,,,,,2,""\\orion\Canon iR2200-3300 - Medinaceli en Ne04:"",,TRUE,,FALSE)"
---------------------------------------------------
pero claro, este código es para mi impresora, deberías cambiar donde pone \\orion\Canon.... por la tuya.
Hay un truco que supongo que muchos sabrán pero bueno, no está de más contarlo para poder conocer el código VBA de excel:
El truco consiste en grabar una macro y, una vez finalizada, ir al código VBA a ver que sentencias ha grabado.
En este caso (que yo no tenía ni idea de qué sentencias dicta excel para efectuar una tarea de impresión) he creado un botón, iniciado una grabación de macro y simplemente he mandao a imprimir un documento. Una vez finalizada la macro he ido al VBA (pulsando Alt+F11) y he visto en el módulo creado (las macros de botones las crea en un módulo aparte de las hojas del libro) las sentencias de código generadas; así de simple.

De todos modos, si tienes dudas/problemas no dudes en preguntar en el foro.

salu2
Hola ceSharp muchisimas gracias por tu ayuda y por las respuestas casi instantaneas. Ya solucione lo de la impresión co este fragmento de codigo

If (MsgBox("¿Esta seguro que los datos de la boleta son correctos?", vbYesNo + vbQuestion, "Impresion Boleta") = vbYes) Then
Worksheets("comprobante de prestamo").Range("A1:H20").PrintOut
End If


Gracias de todos modos amigo
Suerte y espero poder cooperarte algún día
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 00:09.