Saltar al contenido

copiar y guardar hoja como valor de celda


lfgf37

Recommended Posts

Hola, hasta ahora me habeis ayudado gracias a las solicitudes de otros.

Ahora tengo un problema.

Tengo un libro con datos entrelazados y necesito una macro que me copie solo los datos de dos de las hojas y me cree un libro nuevo con el nombre de una de las celdas.

Solo necesito que copie los datos, no las formulas, ni macros, solo los valores que contiene.

Esto es lo que he probado para una de las hojas pero me da error.

Sub Copiar_Y_Guardar()

Sheets("FACTURAS").Copy
ActiveWorkbook.SaveAs "C:\Users\Desktop\cliente\" & Range("J2") & ".xls"
ActiveWorkbook.Close False

End Sub[/CODE]

Esto lo tengo que hacer con dos hojas del libro a la vez y guardarlas en el mismo libro nuevo.

Enlace a comentario
Compartir con otras webs

Perdon. por no haber subido el ejemplo

Pretendo que la hoja "FACTURAS" recoja el valor de la celda"J2" que es la concatenacion del nº factura-nombre cliente y fecha de emision de la misma.

Asi mismo la hoja de "FIRME" asi como la de "COMISION" y me cree y me cree un libro nuevo cuyo nombre sea el valor de la celda "J2" con los valores de estas tres hojas.

Solo los valores, sin formulas ni macros.

Muchas gracias por el interes que te has tomado

COMISIONES1.rar

Enlace a comentario
Compartir con otras webs

Disculpa Macro Antonio el no haberte contestado antes, pero acabo de llegar de trabajar.

Bien, eso que me preguntas e lo que quiero.

Me cree un libro nuevo cuyo nombre sea el valoe de Factura!J2 + xls y que las hojas que contenga sean FACTURAS, FIRME Y COMISION, pero sin formulas solo los valores que contiene el origen (valores, formato e imagenes)

Garcias nuevamente por tu interes y preocupacion

Enlace a comentario
Compartir con otras webs

Hola:

Te adjunto macro CopiarFactura que hace lo que pides.

Coloca el siguiente código en un módulo:

Dim Nuevo As Workbook

Sub CopiarFactura()
Application.EnableEvents = False


'Añadimos libro
Workbooks.Add
Set Nuevo = ActiveWorkbook


'Copiamos formato hoja COMISION
Sheets.Add.Name = "COMISION"
ThisWorkbook.Worksheets("COMISION").Cells.Copy
Range("A1").Select
Selection.PasteSpecial Paste:=xlPasteFormats


'Copiamos formato hoja FACTURAS
Sheets.Add.Name = "FACTURAS"
ThisWorkbook.Worksheets("FACTURAS").Cells.Copy
Range("A1").Select
Selection.PasteSpecial Paste:=xlPasteFormats


'Copiamos formato hoja FIRME
Sheets.Add.Name = "FIRME"
ThisWorkbook.Worksheets("FIRME").Cells.Copy
Range("A1").Select
Selection.PasteSpecial Paste:=xlPasteFormats


'Copiamos los valores
CopiarValores "COMISION"
CopiarValores "FACTURAS"
CopiarValores "FIRME"


Application.EnableEvents = False


'Guardamos el libro y cerramos
Nuevo.SaveAs ThisWorkbook.Path & _
"\" & ActiveWorkbook.Worksheets("FACTURAS").Range("J2") & ".xls"
Nuevo.Close
End Sub


Private Sub CopiarValores(Hoja As Variant)
Application.ScreenUpdating = False


ThisWorkbook.Activate
ThisWorkbook.Sheets(Hoja).Select
For Each celda In ActiveSheet.UsedRange
Nuevo.Sheets(Hoja).Range(celda.Address).Value = celda.Value
Next


End Sub


[/CODE]

Saludos

Enlace a comentario
Compartir con otras webs

Macro Antonio........ERES UN GENIO

Acabo de llegar de trabajar, he mirado, he visto tu respuesta, la he probado, he cambiado

ThisWorkbook.Activate

ThisWorkbook.Sheets("FACTURAS").Select

For Each celda In ActiveSheet.UsedRange

Nuevo.Sheets("FACTURAS").Range(celda.Address).Value = celda.Value

Next

Y HA FUNCIONADO A LA PRIMERA....

Solo una cosa, me deja seleccionadas las hojas del libro nuevo. por lo demas de fabula

GRACIAS

GRACIAS

GRACIAS

SOLUCIONADO

Enlace a comentario
Compartir con otras webs

Hola:

Modifica el procedimiento añadiendo las líneas remarcadas en negrita:

Private Sub CopiarValores(Hoja As Variant)

Application.ScreenUpdating = False


ThisWorkbook.Activate
ThisWorkbook.Sheets(Hoja).Select
For Each celda In ActiveSheet.UsedRange
Nuevo.Sheets(Hoja).Range(celda.Address).Value = celda.Value
Next


[B]Nuevo.Activate
Nuevo.Sheets(Hoja).Select
Nuevo.Range("A1").Select [/B]


End Sub[/CODE]

Saludos

PD: Debes ser muy cuidadoso con el nombre de los clientes, no deben contener caracteres incompatibles con el nombre de un archivo (",/%*¿?....)

Enlace a comentario
Compartir con otras webs

Macro Antonio, GRACIAS nuevamente por tu dedicacion. Probare el procedimiento, pero en principio no me importa que se queden las hojas seleccionadas, puesto que es solo para en caso de necesidad comprobar algun dato.

de todas formas la factura la emito en pdf para que no la puedan modificar.

No me cansare de darte las gracias

Atte. L. Fernando Garcia

PD. como puedo hacer para que me copie tambien el anagrama de la empresa que es una imagen pegada en la hoja de facturas.

Si lo crees necesario abro otro tema, por mi ya doy este tema por cerrado y que le sirva a alguien mas.

Enlace a comentario
Compartir con otras webs

Archivado

Este tema está ahora archivado y está cerrado a más respuestas.

  • 95 ¿Te parecen útiles los tips de las funciones? (ver tema completo)

    1. 1. ¿Te parecen útiles los tips de las funciones?


      • No
      • Ni me he fijado en ellos

  • Ayúdanos a mejorar la comunidad

    • Donaciones recibidas este mes: 0.00 EUR
      Objetivo: 130.00 EUR
  • Archivos

  • Estadísticas de descargas

    • Archivos
      177
    • Comentarios
      90
    • Revisiones
      27

  • Crear macros Excel

  • Mensajes

    • Abre el adjunto y pulsa el botón  GENERAR HOJAS y luego pulsa sobre cualquier fecha del calendario para ir a la hoja deseada. Observa que he añadido 2 botones en la hoja CALENDARIO, uno para generar las hojas y otro para eliminarlas. También he añadido una flechita azul en las hojas generadas para volver a la hoja CALENDARIO. Estas son las macros: En la hoja CALENDARIO: Private Sub Worksheet_SelectionChange(ByVal Target As Range) Dim d As Integer, m As Integer, a As Integer On Error Resume Next If IsNumeric(Target) Then If Not Target = "" Then x = Int((Target.Row - 6) / 9) y = Int((Target.Column - 5) / 8) + 1 m = x * 6 + y d = Target a = Right([E3], 4) Sheets(Format(d, "00") & "-" & Format(m, "00") & "-" & a).Activate End If End If End Sub En el Módulo1: Sub GenerarHojas() Application.ScreenUpdating = False Application.CopyObjectsWithCells = True Dim a As Integer a = Right([E3], 4) With Sheets("ORIGI") For fecha = CDate("01/01/" & a) To CDate("31/12/" & a) '<-- Periodo a generar .Copy After:=Sheets(Sheets.Count) ActiveSheet.Name = Format(fecha, "dd-mm-yyyy") [B4] = [B4] & " " & fecha Next End With Volver End Sub '-- Sub EliminarHojas(): On Error Resume Next Application.ScreenUpdating = False Application.DisplayAlerts = False Dim a As Integer a = Right([E3], 4) For fecha = CDate("01/01/" & a) To CDate("31/12/" & a) '<-- Periodo a eliminar Sheets(Format(fecha, "dd-mm-yyyy")).Delete Next End Sub '-- Sub Volver() Sheets("CALENDARIO").Activate End Sub   Libro1 (15).xlsm
    • Hola un cordial saludo a todos.  Tengo una hoja con un formato de calendario y tengo 365 hojas cada una con nombre de un dia mes y año  en especifico agradecería me ayuden a como puedo realizar la vinculacion de cada dia del calendario con cada hoja respectivamente sin hacerlo de forma manual , ya que es muy laborioso dado que lo tengo que hacer de una por una.   adjunto coloco un ejemplo de lo que tengo gracias. Libro1.xlsm
    • Muchas gracias @Israel Cassales. La hoja es un ejemplo de como seria la hoja definitiva. ( Por desgracia no puedo poner la información real). Los datos los saco de un registro automático por donde pasan unidades con un numero de referencia único para cada producto. Estas unidades pasan por unos puntos de control y en el registro automático se graban duplicando el numero de producto e indicando el registro del nuevo punto de control. Se que parece un poco lío explicado por aqui. Probaré la solución de @Victor7 y comentaré por aquí los progresos. Muchas gracias   
    • Pregunta para @jose_alk ¿El diseño en la hoja DATAGlobal es tuyo? Si la respuesta es sí, entonces toma mayor relevancia la propuesta del maestro @Victor7 porque si mira con atención cada que avanza un paso, vuelve a escribir el paso anterior, así hasta completar los tres pasos. Por esta causa la fórmula del maestro vincula solo la última parte de ese rango ya que de continuar con esa tendencia y repetir los ciclos, al final siempre le quedarán los únicos que busca. En ese caso podría omitir la otra hoja Data Valores Unicos, porque desde la primer hoja DATAGlobal si filtra en el tercer paso y quita las vacías le quedarán solo los ciclos completos. Por otro lado, si los registros no estarán siempre tan bien ordenados el escenario cambia, por lo tanto le reitero la pregunta inicial, porque si es suyo el diseño tal vez le conviene reconsiderar su formato y que los pasos estén entre lineas. Eso le dará un mayor control de los datos, los filtros y las funciones. Saludos totales.    
    • Saludos totales. Hi @Pedro Alonso Así como está la consulta deja múltiples cosas a la deducción y manejar resultados de tiempo requiere de cierta "estrategia" en las operaciones que se deben realizar. Mencionas que el resultado es grande 4mil+ pero no estás considerando que los meses en realidad no todos tienen los mismos días, además si la cifra fuera aún mayor ¿qué pasa con los años bisiestos? ¿Se puede hacer algo con la poca información que das? Tal vez. Primero debes convertir esas horas en días, luego en meses y por último en años, dejando de residuo las horas que "sobren". Entonces cada año lo promedias a 365.25 y cada mes a 30.44, entonces tendrás una fórmula que se aproxime al resultado que NO ES EXACTO, tomarlo en cuenta. Así que considerando la poca información que dejas, con lo único que puedo aportar (al menos yo) será con un ejemplo si los 4mil y pico fueran horas: =ENTERO(A1/24/365.25)&" años, "&ENTERO(RESIDUO(A1/24,365.25)/30.44)&" meses, "&REDONDEAR(RESIDUO(RESIDUO(A1/24,365.25),30.44),0)&" días, "&RESIDUO(A1,24)&" horas" Te recomiendo mejorar y estructurar las preguntas y los ejemplos.
  • Visualizado recientemente

    • No hay usuarios registrado para ver esta página.
×
×
  • Crear nuevo...

Información importante

Echa un vistazo a nuestra política de cookies para ayudarte a tener una mejor experiencia de navegación. Puedes ajustar aquí la configuración. Pulsa el botón Aceptar, si estás de acuerdo.