Saltar al contenido

Macro copia hoja en libro


Recommended Posts

publicado

Hola a todos!

Tengo un problema ya que no se como generar esta parte de la macro, por ejemplo si tengo un libro llamado Capital Federal y su unica hoja tambien se llama Capital Federal, y tengo una macro que genera hojas con el nombre las ciudades de la Argentina, necesito saber como hacer que de esa nueva hoja llamada Capital Federal busque el libro Capital Federal y agregue la hoja nueva SIN REEMPLAZAR LA HOJA YA EXISTENTE, se puede lograr esto? Aprecio mucho su aporte, ayuda u orientacion. Desde ya muchas gracias.

SAludos cordiales.

Gerardo A.

publicado

Hola, puedes subir un ejemplo para poder entenderte mucho mejor.

Una pregunta, esto esta dentro del mismo libro o son dos libros diferentes?

Sí es dentro del mismo libro puedes probar esto:

Sub Duplica_Hoja()

' Duplica la hoja al lado izquierdo de tu hoja "Capital Federal"

Sheets("Capital Federal").Select

Sheets("Capital Federal").Copy Before:=Sheets(1)

End Sub

Sub Duplica_Hoja()

' Duplica la hoja al lado derecho de la hoja "Capital Federal"

Sheets("Capital Federal").Select

Sheets("Capital Federal").Copy After:=Sheets(1)

End Sub

Sí es en otro libro:

Sub Copiar_Hoja_Libro()

' Copiar Hoja en otro libro

'Aqui seleccionamos tu libro "Capital deferal" y la hoja "Capital Federal"

Windows("Capital Federal.xls").Activate

Sheets("Capital Federal").Select

'Aquí Seleccionamos la hoja "Capital Federal", la copiamos y pegamos en el "Libro1"

Sheets("Capital Federal").Copy After:=Workbooks("Libro1.xlsm").Sheets(1)

'Regresamos a el libro "Capital Fedeeral" y nos colocamos en la celda "A1"

Windows("Capital Federal.xls").Activate

Range("A1").Select

End Sub

Ojo, sí lo que quieres es copiar la hoja de un libro a otro, debes tener abiertos ambos libros para poder ejecutar la macro.

una forma que podrías hacer es abrir ambos libros cuando abres uno de ellos o abrir el segundo libro con un botón desde la hoja "Capital Federal".

Espero haberte podido ayudar, suerte! :triumphant:

publicado

Ebalams che! muchas gracias, esta groso esto, te explico, son libros diferentes, lo que trato de hacer es si mi libro se llama Capital Federal hoja Capital Federal, agregar la hoja nueva Capital Federal a ese libro, es decir tengo 100 libros con nombres diferentes con una sola hoja, el libro se llama igual que la hoja... anexo archivo... Por ejemplo tengo mi libro MACRO donde tengo 100 hojas no siempre son el mismo numero de hojas... estas 100 hojas tienen nombres diferentes, en una carpeta tengo 100 libros con diferente nombre (la hoja y el libro se llama igual) entonces yo quiero que la macro busque la hoja1(TUCUMAN) del libro MACRO en la carpeta donde esta todos los libros y si encuentra el libro entonces abra el libro copie ese hoja nueva TUCUMAN y asi se vaya por todas.

EJEMPLO.zip

publicado

Hola de nuevo.

Creo que ese ya sería otro tema porque aunque va relacionado requiere de otras cosas, ya que esta pidiendo otro tipo de condiciones... de entrada para copiar la hoja de tu libro "Capital Federal" a otro libro, necesitas tener abierto primero ese libro y como en tu caso son como 100 libros me parece que esta bastante complicado.

Lo que se me ocurre es crear un catálogo con las "claves, nombres (Libro y hoja) y rutas" de cada libro, para que en una celda de tu hoja "Capital Federal" hagas referencia en una lista desplegable a que libro y hoja deseas ir, pero... me parece que en esto no te puedo ayudar, porque no me se el código que haga referencia a una ruta dentro de una celda (Esto me hace falta nadamás).

Otra forma que se me ocurre, es que abras con una macro el explorador de archivos y a través de este escojas el libro que necesitas y acoples la macro que te pase más arriba.

Deja sigo probando y si encuentro la solución te la envío.

publicado

Gracias por seguir ayudandome, si che yo se que es re dificil lo que necesito, aunque me gusta tu idea pero espero se pueda optimizar ya que seria un quilombo estar abriendo y cerrando libros.

Si alguien mas me puede ayudar re agradecido.

Saludos.

publicado

Realmente no se me hace que sea tan difícil, lo que pasa es que no me se el código que pueda hacer lo que te explico... de hecho no se sí exista!

Estamos en contacto.

publicado

Interesante tema, tengo 2 consultas

1.- A que se debe que en excel se debe copiar la informacion con el documento abierto?

2.- Quizas el modo para copiar una cantidad tan grande 100 archivos:

A.- Abrir el documento destino

B.- Copiar la info en el documento destino

C.- Verificar que copio toda la info y cerrar el documento destino

D.- Abrir un nuevo documento destino

Quizas puede ser engoroso, pero es una posible solucion.

Saludos

publicado

Hola Volandri.

Te voy a responder de acuerdo a lo que yo se y tengo entendido.

Pregunta 1. Porque lo que se desea hacer, es sólo copiar una hoja y para poder ejecutar ese proceso es necesario tener abierto el archivo de origen y para poder ejecutar el proceso de pegar la hoja es necesario tener abierto el archivo destino, es decir, sí sólo hicieras una copia o un remplazo del libro completo esto no sería posible, porque finalmente ambos libros son iguales, pero en este tema lo único que se desea es copiar y agregar una hoja al libro destino sin alterar las demás hojas en lo absoluto. Si esto fuera así, solo se haría una macro para abrir el explorador de archivos, buscar la ruta del libro de destino y remplazar el archivo.

Pregunta 2. Eso precisamente es lo que hace la segunda macro que puse (Copia hoja de origen y pega a destino sin alterar las demás hojas y de forma opcional puede cerrar destino, pero este solo es de un archivo especifico a otro archivo especifico), pero lo que quiere Gerardo Arevalo, es que desde el archivo origen dentro de la misma hoja de excel, con una referencia en una celda, busque un archivo dentro de una carpeta donde hay 100 archivos diferentes y encuentre el archivo de la referencia de la celda y agregue la hoja del archivo origen al de destino sin alterar lo que ya tiene... espero haberme explicado bien.

La verdad se me hace bastante complicado, yo no se que haya eso en Excel, pero si lo hay espero poder verlo!!!

Suerte!

publicado
Sí es en otro libro:

Sub Copiar_Hoja_Libro()

' Copiar Hoja en otro libro

'Aqui seleccionamos tu libro "Capital deferal" y la hoja "Capital Federal"

Windows("Capital Federal.xls").Activate

Sheets("Capital Federal").Select

'Aquí Seleccionamos la hoja "Capital Federal", la copiamos y pegamos en el "Libro1"

Sheets("Capital Federal").Copy After:=Workbooks("Libro1.xlsm").Sheets(1)

'Regresamos a el libro "Capital Fedeeral" y nos colocamos en la celda "A1"

Windows("Capital Federal.xls").Activate

Range("A1").Select

End Sub

Ojo, sí lo que quieres es copiar la hoja de un libro a otro, debes tener abiertos ambos libros para poder ejecutar la macro.

una forma que podrías hacer es abrir ambos libros cuando abres uno de ellos o abrir el segundo libro con un botón desde la hoja "Capital Federal".

Espero haberte podido ayudar, suerte! :triumphant:

Estimado, probe tu formula, lo hice para 15 archivos distintos en excel y me copia en 15 archivos distintas, voy a colocar un extracto con 2 planillas, total es un copy/paste de tu formula:

Private Sub CommandButton2_Click()

Workbooks.Open "prueba.xls"

ActiveWorkbook.RunAutoMacros xlAutoOpen

Windows("vendor200.xls").Activate

Sheets("sheet2").Select

Sheets("sheet2").Copy After:=Workbooks("prueba.xls").Sheets(1)

Workbooks("prueba.xls").Close SaveChanges:=True

Workbooks.Open "prueba1.xls"

ActiveWorkbook.RunAutoMacros xlAutoOpen

Windows("vendor200.xls").Activate

Sheets("sheet3").Select

Sheets("sheet3").Copy After:=Workbooks("prueba1.xls").Sheets(1)

Workbooks("prueba1.xls").Close SaveChanges:=True

End Sub

Mi pregunta es ahora:

Ahora en prueba.xls(planilla destino) tengo una planilla llamada "ag" la cual tengo datos predeterminados, como puedo hacer que la informacion de sheet2 de vendor200, se vaya a esa planilla (Sobrescribiendo la informacion que existe en ag)?

Saludos

publicado

Hola, tengo un ejemplo que seguramente te va a resolver tu duda, en este ejemplo hago una copia de una hoja a otra dentro del mismo libro y también de un libro a otro. En ambos casos con opción a seleccionar celdas o rangos específicos.

Cualquier duda, ya sabes estamos en contacto.

Suerte!!!

Origen.zip

publicado

Hola Gerardo, me parece que ya tengo la respuesta a tu problema.

Algo similar me pidió otro amigo y por suerte dí con la solución a tu problema.

He encontrado un código que hace falta y hace precisamente lo que necesitas: "buscar y abrir un libro, desde una celda para después copiar la hoja del archivo "Origen" (Capitales federales) a el libro "Destino" (Capitales).

Ejemplo:

La macro es la siguiente:

'Si los archivos que buscamos se encuentran dentro de una misma carpeta y en una ruta constante_ Celda de busqueda C6

Sub Ir_Archivo()

'Seleccionamos la ruta, la carpeta y la celda, donde vamos a poner el nombre del archivo que vamos a abrir

Workbooks.Open "C:\Users\Desktop\Tu carpeta de busqueda\" & Worksheets("hoja1").Range("C6")

End Sub

En el archivo sólo debes cambiar la ruta que va a la carpeta de tus 100 archivos y cambiar los conceptos de la columna de referencia de búsqueda (Los nombres de tus archivos de destino).

Adaptas el código que te envié anteriormente y listo.

Si tienes problemas estamos en contacto, suerte!!!

abrir libro desde una celda.rar

Archivado

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

  • 109 ¿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
      188
    • Comentarios
      98
    • Revisiones
      29

    Más información sobre "Cambios en el Control Horario"
    Última descarga
    Por pegones1

    4    1

  • Crear macros Excel

  • Mensajes

    • Hola, veo que tienes 365, así que esta forma funcionará   Almacen.xlsx
    • Buenos días  @LeandroA espero estes bien Tengo un caso idéntico al planteado en la siguiente pregunta: Sin embargo, a diferencia de quien planteo originalmente la pregunta al correr el código no obtengo ningún resultado podrían ayudarme a resolver este inconveniente y que al hacer click en el Botón Guardar (CommandButton3) del Formulario RCS (frmrcs) el archivo pdf quede configurado con orientación vertical, márgenes superior, inferior, derecho e izquierdo = 1 y en página tamaño carta. Si acaso influye uso Microsoft Excel LTSC MSO (versión 2209 Compilación16.0.1.15629.20200) de 64 bits Mucho le sabre agradecer la ayuda que me pueda dar  RCS PRUEBA - copia.xlsm
    • @JSDJSDCon gusto mi estimado Para la opción 1: Sub Surtirhastadondealcanse() Dim ws As Worksheet Set ws = ThisWorkbook.Sheets(1) Dim filaInicio As Integer: filaInicio = 4 Dim filaFin As Integer: filaFin = 7 Dim colInventario As Integer: colInventario = 2 Dim colSolicitudesInicio As Integer: colSolicitudesInicio = 4 ' Columna C Dim colResultadoInicio As Integer: colResultadoInicio = 9 ' Columna I Dim colTotalSurtido As Integer: colTotalSurtido = 12 ' Columna L Dim colFinalInventario As Integer: colFinalInventario = 13 ' Columna M Dim numClientes As Integer: numClientes = 3 Dim fila As Integer, i As Integer For fila = filaInicio To filaFin Dim inventario As Double inventario = Val(ws.Cells(fila, colInventario).Value) Dim solicitudes(1 To 3) As Double Dim surtido(1 To 3) As Variant Dim totalSurtido As Double: totalSurtido = 0 ' Leer solicitudes For i = 1 To numClientes If IsNumeric(ws.Cells(fila, colSolicitudesInicio + i - 1).Value) Then solicitudes(i) = CDbl(ws.Cells(fila, colSolicitudesInicio + i - 1).Value) Else solicitudes(i) = 0 End If surtido(i) = "POR FALTA STOCK" Next i ' Surtir de acuerdo al inventario disponible For i = 1 To numClientes If solicitudes(i) > 0 Then If inventario >= solicitudes(i) Then surtido(i) = solicitudes(i) inventario = inventario - solicitudes(i) totalSurtido = totalSurtido + solicitudes(i) ElseIf inventario > 0 Then surtido(i) = inventario totalSurtido = totalSurtido + inventario inventario = 0 Else surtido(i) = "POR FALTA STOCK" End If End If Next i ' Escribir resultados en las columnas correspondientes para cada cliente For i = 1 To numClientes With ws.Cells(fila, colResultadoInicio + i - 1) If surtido(i) = "POR FALTA STOCK" Then .Value = surtido(i) .Font.Color = vbRed Else .Value = surtido(i) .Font.Color = vbBlack End If End With Next i ' Escribir total surtido y existencia final ws.Cells(fila, colTotalSurtido).Value = totalSurtido ws.Cells(fila, colFinalInventario).Value = inventario Next fila MsgBox "Resultado surtido cargado con éxito...", vbInformation End Sub Para la opción 2:   Sub surtirenpartesiguales() Dim ws As Worksheet Set ws = ThisWorkbook.Sheets(1) Dim filaInicio As Integer: filaInicio = 13 Dim filaFin As Integer: filaFin = 16 Dim colInventario As Integer: colInventario = 2 Dim colSolicitudesInicio As Integer: colSolicitudesInicio = 4 ' Columna C Dim colResultadoInicio As Integer: colResultadoInicio = 9 ' Columna I Dim colTotalSurtido As Integer: colTotalSurtido = 12 ' Columna L Dim colFinalInventario As Integer: colFinalInventario = 13 ' Columna M Dim numClientes As Integer: numClientes = 3 Dim fila As Integer, i As Integer For fila = filaInicio To filaFin Dim inventario As Double inventario = Val(ws.Cells(fila, colInventario).Value) Dim solicitudes(1 To 3) As Double Dim surtido(1 To 3) As Variant Dim totalSurtido As Double: totalSurtido = 0 Dim totalPedido As Double: totalPedido = 0 ' Leer solicitudes For i = 1 To numClientes If IsNumeric(ws.Cells(fila, colSolicitudesInicio + i - 1).Value) Then solicitudes(i) = CDbl(ws.Cells(fila, colSolicitudesInicio + i - 1).Value) totalPedido = totalPedido + solicitudes(i) Else solicitudes(i) = 0 End If surtido(i) = 0 Next i ' Si hay suficiente inventario, surtir lo que el cliente pide If inventario >= totalPedido Then For i = 1 To numClientes If solicitudes(i) > 0 And inventario >= solicitudes(i) Then surtido(i) = solicitudes(i) inventario = inventario - solicitudes(i) totalSurtido = totalSurtido + solicitudes(i) End If Next i Else ' Reparto base igualitario Dim baseSurtido As Long baseSurtido = Int(inventario / numClientes) For i = 1 To numClientes If solicitudes(i) > 0 Then If solicitudes(i) <= baseSurtido Then surtido(i) = solicitudes(i) inventario = inventario - solicitudes(i) totalSurtido = totalSurtido + solicitudes(i) Else surtido(i) = baseSurtido inventario = inventario - baseSurtido totalSurtido = totalSurtido + baseSurtido End If End If Next i ' Repartir sobrante restante uno por uno, respetando lo pedido Do While inventario > 0 For i = 1 To numClientes If surtido(i) < solicitudes(i) Then surtido(i) = surtido(i) + 1 totalSurtido = totalSurtido + 1 inventario = inventario - 1 If inventario = 0 Then Exit For End If Next i Loop End If ' Escribir resultados en las columnas correspondientes para cada cliente For i = 1 To numClientes With ws.Cells(fila, colResultadoInicio + i - 1) If surtido(i) = 0 Then .Value = "POR FALTA STOCK" .Font.Color = vbRed Else .Value = surtido(i) .Font.Color = vbBlack End If End With Next i ' Escribir total surtido y existencia final ws.Cells(fila, colTotalSurtido).Value = totalSurtido ws.Cells(fila, colFinalInventario).Value = inventario Next fila MsgBox "Resultado surtido cargado con éxito...", vbInformation End Sub Saludos, Diego
    • Buenos dias.  Estoy trabajando en una hoja para poder llevar un control de un pequeño almacén.  Tengo un pedido con varias líneas y "lotes" y necesito sacar las ubicaciones que coincidan con la referencia y lote que pone en el pedido. El problema viene cuando tengo la misma referencia y mismo lote en ubicaciones diferentes y necesito sacar la información en columnas diferentes. No se si  me he explicado bien, pero creo que con el ejemplo adjunto se entiende mejor. Agradecería mucho si me pudieran ayudar  Libro1.xlsx
    • Exelente solución mil gracias 
  • 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.