border
VB 6
 
 
/
  1 links from elsewhere to this Post. Click to view. #1 (permalink)  
Antiguo 14-11-2007, 15:54:45
Nuevo Amigo
 
Registrado: oct 2007
Posts: 14
Créditos: 1.902
yasz77 Valoración +2
Predeterminado MACRO copiar hoja de calculo de un libro a otro

tengo un libro de excel que crea facturas y necesito que con un boton se copie un rango de celdas de una hoja de calculo de ese libro a otro libro, pero no solo que se copie la informacion, sino que tambien se copien los anchos de filas y columnas, ademas, mucha de esas celdas tienen formulas, pero no quiero que se copien las formulas sino solo los datos, obvio, es con una macro, pero, como realizarlo?, lo quiero para poder guardar una copia de la factura generada del libro principal a otro libro donde se guardara la copia, como ven?
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Responder Con Cita
  #2 (permalink)  
Antiguo 14-11-2007, 23:32:46
Gran Participación en el Foro
 
Registrado: ene 2007
Posts: 140
Créditos: 20
IvanArt Valoración +2
Predeterminado Re: MACRO copiar hoja de calculo de un libro a otro

hola,

Cita:
Empezado por yasz77
necesito que con un boton se copie un rango de celdas de una hoja de calculo de ese libro a otro libro, pero ... que tambien se copien los anchos de filas y columnas, .... pero no quiero que se copien las formulas sino solo los datos,.... obvio, es con una macro,
empezando por el final, desde mi punto de vista no es tan 'obvio': hay una forma muy sencilla y rapida de hacerlo sin macros (OJO: no se si es valido en todas las versiones, pero seguro que desde el xp/2002 si lo es):

mas o menos asi=>

1º) click secundario en la pestaña de la hoja => 'Mover o copiar' => en el cuadro 'Al libro' eliges el libro de destino (debe estar abierto) => en el siguiente cuadro eliges la posicion en que se copiara la hoja => activa la casilla 'Crear unna copia'' => acepta

2º) en la nueva hoja activa (la copia recien creada) selecciona toda la hoja (dandole al cuadrado que esta justo en el vertice de los nros/nombres de filas/columnas) => pulsa 'Ctrl+C ' (para copiar) => y seguidamente 'Ctrl+V' (para pegar)=> en la etiqueta inteligente que te aparecera (sino te suele aparecer prueba boton secundario, pegado especial) que es un cuadradillo (que en este caso suele aparecer arriba a la derecha) donde elegir la forma de pegado elige => 'Formatos de origen y valores.

se habra creado una copia exacta pero sin formulas ( ademas te habra pegado tambien la configuracion de hoja, es decir, margenes, encabezados, orientacion, etc,..., lo cual seguramente no te vendra mal)

y esta es un macro que hace exactamente lo mismo:

pegala en un modulo NORMAL (no de Hoja ni en thisworkbook). Por si lo desconoces, estando en excel pulsa Ctrl+F11, para abrir el editor de VBA, ve al menu insertar => Modulo (a secas, NO de clase) y pega en la ventana en blaco que se te habra abierto el siguiente codigo:



Código:
'--------------------copia desde aqui-----------------
Sub CopiaFormatosYValores()
  Application.ScreenUpdating = False
  ThisWorkbook.Worksheets("Hoja1").Copy _
    before:=Workbooks("Libro3").Worksheets(1)
  With ActiveSheet
    .UsedRange.EntireColumn.Copy
    .[a1].PasteSpecial Paste:=xlPasteValues, SkipBlanks:=False
  End With
  Application.CutCopyMode = False
End Sub
'--------------------copia hasta aqui---------------------

y dependiendo del boton que vayas a utilizar asignale/llama a la macro CopiaFormatosYValores (o prueba con el cuadro Macros => Ejecutar)

Editado obviamente debes cambiar el nombre de la hoja de origen ("Hoja1" en el ej.) y el del libro de destino ("Libro3" en el ej) por losl que correspondan (tambien entre comillas). Y si prefieres que sea la ultima cambia before por after y el 1 de Worksheets(1) por +/- esto => Worbooks("Libro3").Worksheets.count)

la instruccion completa quedaria asi =>

ThisWorkbook.Worksheets("Hoja1").Copy _
after:=Workbooks("Libro3").Worksheets (Worbooks("Libro3").Worksheets.count)



espero te ayude y si quieres comentas

un saludo
Ivan

PD: disculpa si me excedo en explicaciones que ya conozcas, pero por si acaso .....
__________________
Nadie ve el mismo horizonte desde el mismo sitio.
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Responder Con Cita
  #3 (permalink)  
Antiguo 14-11-2007, 23:56:49
Nuevo Amigo
 
Registrado: oct 2007
Posts: 14
Créditos: 1.902
yasz77 Valoración +2
Predeterminado

gracias IVAN, mira, soy principiante y aunque he hecho algunas macros con VBA no soy para nada experta ni conozco muchos terminos, asi que, no importa si me lo dices "con peras y manzanas", lo prefiero asi, y gracias a este foro, yo he logrado cosas enormes sin saber del todo programacion ni en VB ni en VBA, pero la logica de las cosas y la simplicidad me han llevado a comprender como funciona y de verdad que para mi han sido logros gigantescos el poder copiar informacion de una hoja a otra, el ordenar, insertar, etc con macros, quizas pequeñeces, pero para mi logros!, por eso la confianza y asiduidad a este foro, me encanta leer las respuestas que dan y ver los poblemas de los demas para poderlos integrar a mis propios problemas y mejorar e trabajo que realizo en Excel, gracias nuevamente, dejame checo tu propuestas, gracias!
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Responder Con Cita
  #4 (permalink)  
Antiguo 18-11-2007, 21:34:04
Nuevo Amigo
 
Registrado: oct 2007
Posts: 14
Créditos: 1.902
yasz77 Valoración +2
Predeterminado

ME MARCA ERROR DE COMPILACION IVAN... "SE HA PRODUCIDO EL ERROR 9 EN TIEMPO DE EJECUCION, SUBINDICE FUERA DEL INTERVALO" EN LAS 2 LINEAS QUE TE SEÑALO...

Sub COPIAFORMATOSYVALORES()
Application.ScreenUpdating = False
ThisWorkbook.Worksheets("MODELO FACTURA").Copy _
AFTER:=Workbooks("FACTURAS DISTRIBUIDOR MEDICO GAVIR").Worksheets(Workbooks("FACTURAS DISTRIBUIDOR MEDICO GAVIR").Worksheets.Count)

With ActiveSheet
.UsedRange.EntireColumn.Copy
.[a1].PasteSpecial Paste:=xlPasteValues, SkipBlanks:=False
End With
Application.CutCopyMode = False
End Sub

CUAL CREES QUE SEA EL PROBLEMA...
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Responder Con Cita
  #5 (permalink)  
Antiguo 18-11-2007, 23:07:34
Gran Participación en el Foro
 
Registrado: ene 2007
Posts: 140
Créditos: 20
IvanArt Valoración +2
Predeterminado

hola,

Cita:
Empezado por yasz77
ME MARCA ERROR DE COMPILACION IVAN... "SE HA PRODUCIDO EL ERROR 9 EN TIEMPO DE EJECUCION, SUBINDICE FUERA DEL INTERVALO" EN LAS 2 LINEAS QUE TE SEÑALO...

ThisWorkbook.Worksheets("MODELO FACTURA").Copy _
AFTER:=Workbooks("FACTURAS DISTRIBUIDOR MEDICO GAVIR").Worksheets(Workbooks("FACTURAS DISTRIBUIDOR MEDICO GAVIR").Worksheets.Count)
el error 9 suele querer decir que se esta intentando hacer referencia a un elemento de una coleccion que no existe.

Es decir, en este caso lo obvio seria pensar que alguno de los nombres que expones no se corresponde 'totalmente' con el correcto. Revisa que tanto el nombre del libro (Prueba tambien a acabarlo con ".xls" o "xlt" si fuese una plantilla, o la terminacon que corresponda) como el de la hoja estan escritos de forma identica a los correspondientes.

otra posibilidad que se me ocurre, aunque no me hagas mucho caso, pues es solo intuicion por asociacion de algun incidente pasado, es que el nombre del libro excede el limite de caracteres (este limite existe al menos para algunas cuestiones y creo recordar que el max. es 31 caracteres <ten en cuenta que el espacio tambien se considera/cuenta como caracter>). Si ves que lo anterior no te lo soluciona, prueba a guardar el libro con un nombre mas corto y mira a ver que tal

NOTA: lo que no estoy seguro es si los de la extension (.xls, .xlt, etc..) tambien cuentan como caracteres <supongo que no pero...>

y como ultima posibilidad (mas bien primera): ¿esta abierto el libro "FACTURAS DISTRIBUIDOR MEDICO GAVIR"? si no es asi abrelo, o si prefieres abrirlo por codigo y volverlo a cerrar incluye al inicio del proc. algo tipo=>

Workbooks.Open "FACTURAS DISTRIBUIDOR MEDICO GAVIR.xls"

y antes de salir del procedimiento algo asi=>

Workbooks("FACTURAS DISTRIBUIDOR MEDICO GAVIR").Close True

bueno a ver si hay suerte. El error que expones y en las lineas que expones, no veo que pueda tener otra causa (aunque nunca se sabe)

si quieres comentas como te ha ido

un saludo
Ivan

editado: si todo lo anterior no te funciona o si quieres previamente revisa que tanto el nomre del libro como el de la hoja no tienen algun espacio delante o detras que se te haya colado (por lo que te comentaba)

otra cosa, si pruebas a abrir el libro por codigo convendria que antepusieras al nombre la ruta completa tipo=>

"C:\Mis documentos\Mis codigos\nombre del libro.xls" (no olvides las barras inversas)
__________________
Nadie ve el mismo horizonte desde el mismo sitio.
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Responder Con Cita
  #6 (permalink)  
Antiguo 19-11-2007, 01:52:39
Nuevo Amigo
 
Registrado: oct 2007
Posts: 14
Créditos: 1.902
yasz77 Valoración +2
Predeterminado

ESTA FUE LA MACRO FINAL:

Sub COPIAFORMATOSYVALORES()
Workbooks.Open Filename:="F:\FACTURAS DISTRIBUIDOR MEDICO GAVIR.xlsM"
Application.ScreenUpdating = False
ThisWorkbook.Worksheets("MODELO FACTURA").Copy _
AFTER:=Workbooks("FACTURAS DISTRIBUIDOR MEDICO GAVIR").Worksheets(Workbooks("FACTURAS DISTRIBUIDOR MEDICO GAVIR").Worksheets.Count)
With ActiveSheet
.UsedRange.EntireColumn.Copy
.[a1].PasteSpecial Paste:=xlPasteValues, SkipBlanks:=False
End With
Application.CutCopyMode = False
Workbooks("FACTURAS DISTRIBUIDOR MEDICO GAVIR").Close True
End Sub


AHORA, SI YO QUISIERA CONTROLAR EL NOMBRE DE LA HOJA DE CALCULO, COMO LO PODRIA HACER?, POR EJEMPLO QUE TOMARA YO EL RFC DEL CLIENTE (QUE SE ENCUENTRA EN UNA CELDA DE LA HOJA QUE SE COPIA) Y LA FECHA EN QUE SE GENERA LA FACTURA, SE PODRIA REALIZAR, PORQUE, CADA VEZ QUE GENERO LA FACTURA Y LA ENVIO AL ARCHIVO, PUES SI LA COPIA CON EL MISMO NOMBRE "MODELO FACTURA" Y A LA SIGUIENTE "MODELO FACTURA2" Y ASI SUCESIVAMENTE, TU CREES QUE SE PUDIERA CONTROLAR EL NOMBRE DE LA HOJA CUANDO ES COPIADA Y ENVIADA AL ARCHIVO?

TENGO UN PROBLEMIN MAS, CUANDO COPIA LA FACTURA, NO COPIA UN TEXTO QUE ESTA AL FINAL DE LA FACTURA, ES LA ULTIMA FILA, LO RARO ES QUE, DE ESA FILA SI COPIA UNAS CANTIDADES QUE OBTENGO CON FUNCIONES, PERO EL TEXTO QUE GENERO CON UNA FUNCION, ESA NO, SE LA PASA POR ALTO, LO DEMAS, SI APARECE COMPLETO, PERO ESO NO.

LO MALO TAMBIEN ES QUE ME COPIA UNOS BOTONES DE COMANDO QUE TENGO EN ESA HOJA Y QUISIERA QUE NO LO HICIERA, PODRIA YO, ESPECIFICARLE QUE, EN VEZ DE COPIAR TODA LA HOJA, COPIARA UN RANGO EN ESPECIFICO?, MI FACTURA SIEMPRE TENDRA LAS MISMAS DIMENSIONES DIGAMOS DE A1 A H72, SE PODRIA?

BUENO, GRACIAS POR TODO LO QUE ME HAS AYUDADO IVAN, DE VERDAD ERES UN TIPAZO.
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Responder Con Cita
  #7 (permalink)  
Antiguo 19-11-2007, 20:43:28
Gran Participación en el Foro
 
Registrado: ene 2007
Posts: 140
Créditos: 20
IvanArt Valoración +2
Predeterminado

hola,

lo 1º permiteme un comentario sobre algo que supongo desconoces:

en el mundo de los foros escribir en mayusculas se considera gritar, y no suele estar muy bien visto (aparte de dificultar notablemente la lectura). Suelen usarse solo para dar enfasis/recalcar determinadas partes del texto

en cuanto a tus consultas nuevas, dame una gota de tiempo para estudiarlas (incluso valorar si corresponderian a un nuevo hilo)

en cuanto lo vea te comento

un saludo
Ivan
__________________
Nadie ve el mismo horizonte desde el mismo sitio.
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Responder Con Cita
  #8 (permalink)  
Antiguo 20-11-2007, 17:18:17
Nuevo Amigo
 
Registrado: oct 2007
Posts: 14
Créditos: 1.902
yasz77 Valoración +2
Predeterminado

chispas!!!, a veces uno, por las prisas, no se da cuenta como escribe ni que utilizas cierto tipo de letra y que con ello, violas normas e incluso incomodas a los demas, y tienes muchas razón, ya habia escuchado de ello, y se me fue!!!, perdona, y perdon a todos por no prestar atencion a ese detalle, muy amable y gracias por toda la ayuda que me prestas, y sigo al pendiente, muchas gracias.
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Responder Con Cita
  #9 (permalink)  
Antiguo 21-11-2007, 00:37:28
Gran Participación en el Foro
 
Registrado: ene 2007
Posts: 140
Créditos: 20
IvanArt Valoración +2
Predeterminado

hola,

Cita:
Empezado por yasz77
chispas!!!, a veces uno.... no se da cuenta ...que con ello, violas normas e incluso incomodas a los demas, ..., perdona, y perdon a todos por no prestar atencion a ese detalle....
no te preocupes, por mi parte no hay nada que perdonar. Aparte creo que hay normas [como esta] que no pasa absolutamente nada por violarlas (aun mas si es por despiste y/o desconocimiento),

aunque como bien dices, ante la mas minima posibilidad de molestar a alguien, mucho menos aun pasa por no violarlas

lo dicho, no problem, solo lo comente para que lo supieras (y ya de paso porque leer tanta mayuscula realmente resulta mareante)

bueno, vamos al tema:


1º) respecto a poner el nombre con el contenido de una celda + la fecha no hay ningun problema. Simplemente recurririamos a la propiedad name de la hoja y le asignariamos el valor de la celda concatenado con pej. date, o para mi gusto, y para evitar posibles errores por nombre de hoja duplicado, usar now formateado con hora minutos y segundos incluidos (resulta largo, pero es lo unico que (creo) garantiza (casi) la no duplicacion (imaginate que disparas la macro dos veces el mismo dia con la celda con el mismo contenido. Te daria un error, evitable añadiendo los segundos o al menos los minutos (tendrias que disparar la macro en el mismo minuto del mismo dia para duplicarlo)

aunque te lo incluyo en la macro (vuelta aa retocar para aligerarla un poco), que te pongo despues , este seria un ej.

Código:
ActveSheet.Name = range("a1").value & format(now,"dmmmyy_hhmmss")
y esta es la macro aligerada un poco (cuando abres un libro este automaticamente se convierte en el activo. igualmente al crear o pegar una hoja esta se convierte en la activa. Aqui usamos un bloque with para evitar tener que repetir el nombre del archivo (un poco largo por ende) cuando queremos referirnos a sus propiedades Y/o metodos y/o objetos 'hijo'. Todo lo que va dentro de un bloque with y va precedido de un punto hace referencia al objeto que abre el bloque with (OJO: pueden ir anidados).

OJO en la instrucion que asigna el nuevo nombre no se te olvide poner la verdadera celda que contiene la ref para el nombre (en el ej. he puesto A1)

editado para modificar un poco (no influye en el resultado (casi))

Código:
Sub COPIAFORMATOSYVALORES()
  Application.ScreenUpdating = False
  Workbooks.Open Filename:="F:\FACTURAS DISTRIBUIDOR MEDICO GAVIR.xlsM"  
  With ActiveWorkbook
    ThisWorkbook.Worksheets("MODELO FACTURA").Copy _
        AFTER:=.Worksheets(.Worksheets.Count)
'    BorrarShapes activesheet
    With ActiveSheet
      .Name = .Range("a1") & "_" & Format(Now, "d mmm yy_hh mm ss")
      .UsedRange.EntireColumn.Copy
      .[a1].PasteSpecial Paste:=xlPasteValues, SkipBlanks:=False
    End With
    Application.CutCopyMode = False
    .Close True
  End With
End Sub
2º) en cuanto al probblema de la 'celda que no se copia ¿no seran celdas combinadas? ¿qur longitud tiene el texto?

3º) en cuanto a los botones, aunque no he hecho pruebas, pensaba que al pegar solo valores no se pegarian, pero a falta de mirarlo, una solucion seria hacer un bucle por los shapes de la hoja y eliminarlos (con prevencion de errores por si no los hubiera)

podria ser algo asi
editado para cambiar este procedimiento (el anterior lo hice un poco a ciegas y tenia algunos fallos)
Incluyo una llamada a el en el otro procedimiento pero como comentario. Si quieres que funcione quitale la comilla simple que lleva delante dDe todas formas en mis pruebas, que reconozco han sido escasa, me elimina los botones ¿de donde son los botones que has insertado?¿de que barra de herramientas? solo por probar con tus mismas caracteristicas fin edicion

Código:
Sub BorrarShapes(hjN As Worksheet)
  Dim Sh As Shape
  With hjN
    If .Shapes.Count = 0 Then Exit Sub
    For Each Sh In .Shapes
      Sh.Delete
    Next
  End With
End Sub

y llamandolo pej. dentro dl otro procedimiento tras nombrar la hoja (o antes) +/- asi=>

Código:
BorrarShapes(activesheet)


4º) en cuanto a copiar el rango, tampoco hay problema. Puedes cambiar aqui=>

Código:
 .UsedRange.EntireColumn.Copy
el '.UsedRange.EntireColumn' por tu rango

Código:
 Range("Tu_Rango").Copy
bueno, no se si me habras entendido algo, pero miara a ver si hay suerte

un saludo
Ivan
__________________
Nadie ve el mismo horizonte desde el mismo sitio.
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Responder Con Cita
  #10 (permalink)  
Antiguo 25-11-2007, 22:38:13
Nuevo Amigo
 
Registrado: oct 2007
Posts: 14
Créditos: 1.902
yasz77 Valoración +2
Predeterminado

Hola IVAN, fijate que todo va saliendo perfecto, hasta que llego a los botones, a querer borrarlos, ya cambie de muchisimos lugares la llamada a el modulo, pero siempre me marca el mismo error, que se esperaba una variable o un procedimiento, no un modulo, asi que, pus me quedo en blanco, como ves?, mi rollazo quedo asi:

Sub COPIAFORMATOSYVALORES()
Application.ScreenUpdating = False
Workbooks.Open Filename:="F:\FACTURAS DISTRIBUIDOR MEDICO GAVIR.xlsM"
With ActiveWorkbook
ThisWorkbook.Worksheets("MODELO FACTURA").Copy _
AFTER:=.Worksheets(.Worksheets.Count)
BorrarShapes (ActiveSheet)
With ActiveSheet
.Name = .Range("e16") & Format(Now, " dmmyy hh.mm")
.Range("a1:h72").Copy
.[a1].PasteSpecial Paste:=xlPasteValues, SkipBlanks:=False
End With
Application.CutCopyMode = False
.Close True
End With
End Sub


al final deje la llamada donde tu la pusiste originalmente, pero ya intente cambiarla en varias posiciones del modulo, asi que, cual crees que es el problema?, estoy haciendo mal el llamado del otro modulo o es que tengo que convertirlo en un procedimiento o que onda?

bueno, muchas gracias IVAN, ya solo me queda elaborar un boton para mandar imprimir la hoja de la factura, pero me imagino ese es mas facil la macro no?, bueno, espero me respondas y tengas algo de tiempo para realizarlo, cuidate mucho, te veo despues.
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Responder Con Cita
Respuesta


Herramientas

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Trackbacks are habilitado
Pingbacks are habilitado
Refbacks are habilitado

LinkBacks (?)
LinkBack to this Thread: http://www.foro.vb-mundo.com/f39/macro-copiar-hoja-de-calculo-de-libro-a-12300/
Escrito Por For Type Fecha
VBA (Excel, Word, Outlook, Access) [Archivo] - Pgina 2 - VB-MUNDO - Programacion Visual This thread Refback 22-03-2012 21:05:54

Temas Similares
Tema Autor Foro Respuestas Último Mensaje
Problema para copiar un texto de una hoja excel a otra hoja Julio Luna VBA (Excel, Word, Outlook, Access) 2 15-11-2007 21:31:39
Macro pasar registros de una hoja a otra en un libro EXCEL? yasz77 VBA (Excel, Word, Outlook, Access) 6 15-10-2007 23:42:01
Obtener Informacion de una hoja de calculo de excel lopezbaires Visual Basic .NET 0 17-09-2007 16:22:59
copiar celdas a otro libro de excel por medio de vb.net guadalupe30 Visual Basic .NET 3 16-05-2006 17:11:49
Copiar una hoja de excel a otro documento excel a otra hoja Kaisser VBA (Excel, Word, Outlook, Access) 3 24-02-2006 07:45:00


La franja horaria es GMT. Ahora son las 02:19:26.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO 3.1.0
vBCredits v1.4 Copyright ©2007 - 2008, PixelFX Studios


right
Inactive Reminders By Icora Web Design