Saltar al contenido

Añadir una hoja copiando otra


Antoni

Recommended Posts

Hola:

He descubierto por error algo que desconocía.

Worksheets("Hoja1").Copy Worksheets("Hoja1")[/CODE]

Este código añade al libro una hoja con los datos de Hoja1 con el nombre "Hoja1 (2)"

Si le añadimos:

[CODE]ActiveSheet.Name = "Copia de Hoja1"[/CODE]

Tenemos una forma fácil de copiar una hoja con el nombre que queramos, es decir:

[CODE]Worksheets("Hoja1").Copy Worksheets("Hoja1")
ActiveSheet.Name = "Copia de Hoja1"[/CODE]

Seguramente muchos ya lo conociais, pero a mi me ha sorprendido que con el método Copy podamos añadir una hoja.

Saludos. Antoni.

Enlace a comentario
Compartir con otras webs

Hola. Si deseas tambien puedes decirle en donde dejar esa nueva copia:

Al incio (izquierda):

Sheets("Hoja1").Copy Before:=Sheets(1)

Al final (derecha):

Sheets("Hoja1").Copy After:=Sheets(Sheets.Count)

ActiveSheet.Name = "Nuevo_Nombre"

Despues de la segunda hoja (o la que desees):

Sheets("Hoja1").Copy After:=Sheets(2)

ActiveSheet.Name = "Nuevo_Nombre"

Saludos

Abraham

Enlace a comentario
Compartir con otras webs

Hola:

Antoni, algo que igual conoces, y que yo he aprendido del Máster Mjrofra sobre el método Copy, que es crear un libro nuevo de una hoja.

Ahí queda el código

Sub nuevolibro()
Dim ruta
ruta = ThisWorkbook.Path
Sheets("Hoja1").Copy
ActiveWorkbook.SaveAs Filename:=ruta & "\" & "Milibro.xlsm", FileFormat:=xlOpenXMLWorkbookMacroEnabled
ActiveWorkbook.Close
End Sub[/CODE]

Saludos, Luis.

Enlace a comentario
Compartir con otras webs

Hola Antoni

Pues me ha sorprendido que tu no conocias este metodo:), es decir tu que trabajas mucho con VBA [con esto se comprueba que cada dia aprendemos algo], y pues en realidad creo que no es añadir [añadir es insertar una hoja nueva limpia] sino que "copiar", la hoja activa, que por cierto para ubicar donde queramos la copia, podemos usar el miembro "Move" {expresión.Move(Before, After)} o algo asi Sheets("nombrehoja").Move After:=Sheets(1) o Sheets("nombrehoja").Move Before:=Sheets(1)

Saludos a todos!, desde Honduras:)

Enlace a comentario
Compartir con otras webs

Hola Antoni, muy buena la idea,

Aqui van una variante de tu metodo tambien de un par de lineas para el monton:

Crea una copia de la hoja actual

    ActiveSheet.Copy Sheets(1)
ActiveSheet.Name = "1"[/CODE]

Y esta no tiene tiene nada que ver con el tema, pero he intentado usarla sin exito para hacer lo de arriba en una sola linea.

Crea una hoja nueva con un nombre especifico

[CODE] Sheets.Add.Name = "Pruebas"[/CODE]

Y ya para terminar, lo que habia intentado con un fracaso absoluto, es esto:

[CODE]ActiveSheet.Copy Sheets(Sheets.Add.Name = "Pruebas")[/CODE]

Un saludo a todos

Enlace a comentario
Compartir con otras webs

Hola avalencia

Gracias por la aclaracion, no obstante esta linea que mezcla metodo y propiedad si que funciona:

    Sheets.Add.Name = "Pruebas"[/CODE]

La que me referia que no funcionaba es la siguiente:

[CODE]ActiveSheet.Copy Sheets(Sheets.Add.Name = "Pruebas")[/CODE]

A veces me encabezono haciendo mezclas hasta que una de esas combinaciones funciona, y si en este caso funciona la primera, entonces pudiera ser que la segunda no fuera del todo una locura jeje.

Un saludo

Enlace a comentario
Compartir con otras webs

Hola nuevamente Verzulsan. Pues tienes razon, en ese caso mezclando metodo y propiedad si que funciona, y me disculpo por la correccion, mas aun sabiendo yo mismo que hay excepciones (pocas en realidad) a la regla (en el caso que muestras no lo sabia). Me hace recordar cuando en el MSDN, alla por el año 2003 o 2004, decia que no se podia autoaplicar Kill a un libro abierto de Excel, y un amigo con algunos agregados, pues, lo logro (Pavel - Mexico)

Sobre lo del Copy, pues siendo un parametro pues no puede permite un metodo en él (en este si no hay excepcion a la regla). Lo que podria hacerse es usar Move como ya sugirio nuestro amigo Gerson

Abraham

Enlace a comentario
Compartir con otras webs

Hola solo para contribuir un poco

Sheets.Add.Name = "Pruebas"

El metodo sheets.add devuelve un objeto (en este caso una hoja) es por eso que se le puede modificar la propiedad Name o cualquiera que se desee.

Tomando de la ayuda de Excel

Valor devuelto

Valor de tipo Object que representa la hoja de cálculo, gráfico u hoja de macro

el metodo copy no devuelve nada ....

Comentarios

Si no se especifica Before o After, Microsoft Excel crea un nuevo libro que contiene la hoja copiada

.

Es decir los metodos no sin mas que funciones unos devuleven un resultado y otros no, en este caso sheets.add devuelve un objeto y por consiguiente podemos modificar sus propiedades o inclusive aplicarle otro metodo, mientras el metodo copy no devuelve nada.

saludos cordiales

Enlace a comentario
Compartir con otras webs

Gracias Abraham, Luis, Gerson, Never y Santi por vuestro interés y vuestros comentarios.

Ahora ya se un poco mas sobre el tema.

De hecho, yo para añadir una hoja copiando de otra, siempre había usado:


Sheets("Antigua").Cells.Copy Sheets("Nueva").Cells[/CODE]

Y al olvidarme .Cells en ambos lados, me di cuenta del tema.

Saludos y besos para todos. Besos, de hermano, por supuesto,,,,jajaja

Antoni.

Enlace a comentario
Compartir con otras webs

Es decir los metodos no sin mas que funciones unos devuleven un resultado y otros no, en este caso sheets.add devuelve un objeto y por consiguiente podemos modificar sus propiedades o inclusive aplicarle otro metodo, mientras el metodo copy no devuelve nada.

Como siempre muy claro master never... por lo que te damos las gracias

Saludos y abrazos para todos (los besos ya los mando Antoni jeje)

Enlace a comentario
Compartir con otras webs

Crear una cuenta o conéctate para comentar

Necesitas ser usuario para poder dejar un comentario

Crear una cuenta

Registrarse para una nueva cuenta en nuestra comunidad. ¡Es fácil!

Registrar una nueva cuenta

Conectarse

¿Ya tienes una cuenta? Conéctate aquí.

Conéctate ahora
  • 97 ¿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

    • Hola, Ya he podido, reoslverlo. Por favor dar por terminado, este tema. Muchas gracias Mariano
    • Buenas a todos, trato de transponer o pivotar el archivo que adjunto. El archivo tiene 3 columnas ( en este caso, como pueden ser más 😞 Cód.artículo, Cód.características y Valor. El objetivo es dejar como primera columna el Cód.artículo y como fila de encabezado Cód.características, y luego cruzando datos con Valor. No sé si me he explicado bien Gracias de antemano. Libro1.xlsx
    • Hola que tal amigos programadores por favor me podrían ayudar con una macro que me genere un archivo CSV delimitado por comas, la estructura del archivo CSV no deberá llevar encabezado, los datos del archivo CSV serán obtenidos de la hoja “Datos”. En la columna A: deberá tener la clave clues que se toma de la columna B de la hoja Datos En la Columna B: el Código (son 230 codigos que van del rango G1:IB1 de la hoja datos) En la Columna C: el valor almacenado a su correspondiente al código y clues En la Columna D: el número del mes que se obtendrá de la de la columna E de la hoja Datos En la Columna E: el año que se tomará de la columna F de la hoja de Datos   Son 230 códigos por lo que la macro generará 230 filas por cada clave clues que tenga la hoja Datos En el archivo anexo una hoja llamada CSV para que vean la estructura que tendrá, el archivo CSV estará delimitado por comas   Les agradecería mucho que me ayuden por favor, Dios los bendiga Exportar datos a csv.xlsx
    • Hola buenas tardes.   Debido al trabajo debo estar comparando en un periodo unos archivos dentro de una carpeta o subcarpeta. en base a la fecha de creacion o modificacion.  pero tengo que estar viendo carpeta por carpeta y aveces son varios. Con una macro intente  listar los archivos de cualquier carpeta y subcarpeta, esto activandolo segun la celdaactiva. El problema es que tiene algunos errores. 1. si la carpeta cuenta con subcarpetas me los manda a muchas filas abajo. Mi idea es hoja(Así debe quedar) Que con una macro pueda seleccionar la carpeta desde el buscador y me de la lista de archivos a partir de la fila 6. siendo columna A= fecha de modificación, columna B =Fecha de creación y columna C=Nombre del archivo con hiperlink. Con otro o con la misma macro poder seleccionar otra carpeta y sus subcarpetas, según sea el caso. y me liste a partir de la columna F de la fila 6 Siendo La columna F=Nombre del archivo, columna H=fecha de creación, columna I=ultima modificación   Para así poder acceder y comparar mis archivos, directamente desde excel.   Muchas gracias Mariano       Listar archivos de 2 carpetas para comparar.xlsm
    • Hola buenas, Os presento mis dudas. Tengo un libro  (llamémosle LibroDestino) con dos módulos, uno de definición de variables "ModDef" y otro de inicializacion de esas mismas variables "ModCfg". Necesito que al copiarme una hoja de otro libro(llamémosle LibroOrigen), mediante un procedimiento, sobrescribir el modulo de inicialización de variables del LibroDestino con el  contenido del módulo que hay en el LibroOrigen. Destacar que los dos módulos de cada libro tienen el mismo nombre "ModCfg". Y tienen una única variable llamada "Mensaje". En el LibroDestino tiene el valor "Hola" y en el LibroOrigen el valor "Adiós" Este procedimiento lo realiza perfectamente,  es decir se sobrescribe, pero si en el mismo procedimiento quiero utilizar el nuevo valor de esa variable, me conserva el valor de la variable anterior. Para hacer las comprobaciones he ejecutado un MsgBox al empezar y al acabar el procedimiento, pero en los dos casos me devuelve el valor original del LibroDestino el valor "Hola", cuando mi idea es que al sobrescribir el modulo con el nuevo valor de la variable, el último MsgBox me devuelva el valor "Adios". Mi objetivo es poder tener la inicialización de esas variables en un libro que no sea el de trabajo (LibroDestino), ya que según la hoja que importe puedo requerir que las variables tengan un valor u otro. ¿Por que no me coge en el procedimiento el nuevo valor de la variable? ¿Cómo podría conseguirlo? He tenido que activar en VBA  la referencia Microsoft visual basic for applications extensibility 5.3 desde  Herramientas -> Referencias. Creo que es la única manera de poder trabajar con los módulos desde VBA, aunque si se pudiera de otra manera creo que sería mas óptimo. Mil gracias de antemano, un saludo!         Libro1_Prueba.xlsm Libro2_Prueba.xlsm
  • 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.