Saltar al contenido

Hacer una copia de un archivo excel con otro nombre con Macros.


Recommended Posts

publicado

Buenas..

Este es un pedido o requerimiento que no encontré en el foro.

Yo tengo un archivo excel llamado Base.xls donde es mi archivo en blanco o base, es decir como un formulario en blanco.En el cual contendrá varias hojas con títulos en columnas y macros ya que supone empezar a ser una base de datos de algo especifico.
Entonces, Yo desde otro archivo el cual llamare INICIO.xls pondré a funcionar un programa. En el mismo tendrá un botón de "+nuevo maquina" por ejemplo. El macro que necesitaría es uno que me copie mi archivo base cree una copia en un lugar especifico y me permita escribir el nombre de la "nueva maquina". Y así tantas veces me copie y renombre mi archivo base como maquinas quiera agregar.

Yo se pasar hojas a otros libros. o que me guarde una copia del mismo libro en el que estoy trabajando con otro nombre. El traspaso de macros de libro a libro no me sale tan bien. yo creo que quizás deba abrirse (oculto al usuario) el libro base para poder copiarlo. Pero quizás haya un método mas sencillo para hacerlo, o no..
El excel que estamos usando en el de 2003 y eso quizás sea también un problema.

Si alguien puede darme una ayuda con esto, muchísimas gracias.

 

publicado

ya encontré parte de mi solución lo único que no puedo es cambiar el nombre.

paso el codigo

Private Sub CommandButton1_Click()
'en hoja 2 crea nombre de maquina segun textbox1
Hoja2.Cells(Rows.Count, "a").End(xlUp).Offset(1) = TextBox1.Value


'copiar base de datos en carpeta de maquinas
 FileCopy "C:\Users\Olga\Desktop\Nueva carpeta\Base.xls", "C:\Users\Olga\Desktop\Nueva carpeta\maquinas\Base.xls"

'cambiar nombre del archivo base segun celda textbox1
 Name "C:\Users\Olga\Desktop\Nueva carpeta\maquinas\Base.xls" As TextBox1.Value
 

Exit Sub

End Sub
 

Cuando hago el paso a paso todo corre bien hasta que llega a esta linea:
Name "C:\Users\Olga\Desktop\Nueva carpeta\maquinas\Base.xls" As TextBox1.Value
donde me borra el archivo base que cree y seguro es porque algo hice mal o no dimensione el valor del textbox.
pero ya estoy muy cansado de pensar..

como deberia ser el codigo para cambiar el nombre?

lo debo hacer segun el textbox o sobre el ultimo nombre ingresado en mi hoja2?

 

Gracias por la ayuda!

 

publicado

dependiendo de cual sea el contenido (EXACTO) del TextBox1 (???)

para mover/copiar archivos de una ubicación a otra, puedes usar al menos dos formas:
en los ejemplos, "Origen" y "Destino" son (una cadena de texto que representa)
-> ruta + directorio/s + nombre_archivo + EXT(ension)

1) una instrucción =>Name "Origen" As "Destino"<=

     a) para renombrar un archivo (mismo directorio) los requisitos son...
         (1) que "Origen" EXISTA (y este cerrado) y...
         (2) que "Destino" NO EXISTA
         (p.e.) Name "C:\Misma ruta\Archivo1.abc" As "C:\Misma ruta\Archivo2.xyz"

     b ) si "Origen" y "Destino" son diferentes, la instrucción (prácticamente) hará lo mismo que...

2) una instrucción =>FileCopy "Origen", "Destino"<=
    en este caso, "Destino" sera INVARIABLEMENTE reemplazado <= OJO

si cualquier duda (o información adicional)... comentas ?
saludos,
hector.

publicado

Gracias por responder. Esta forma de copiar archivos y de renombrarlos ya la conocía.
pero solo veo que me sirve si el archivo1 lo quiero como archivo2 que es lo que pondría en el cogido.
pero si yo quiero que el nombre sea variable. obteniendo el dato de un textbox o una celda (la cual no va a ser siempre la misma) no encuentro forma de hacerlo.
Paso el archivo base con códigos ya cargados para ejemplificar mejor.
1)en la hoja 1 están el botón de inicio al programa
2)en la hoja 2 se van cargando una abajo de otra las maquinas (que son con las que yo nombraría cada archivo que cree)
3)en las capetas MAQUINA  se copiarían y renombrarian todos mis archivos BASE con el nombre de la maquina. 

de todas formas sigo buscando en otros foros o paginas porque se que la solución debe ser bastante siempre.
Gracias por leerme!

PROYECTO MANTENIMIENTO.rar

publicado

Ya encontré la solución a mi problema!
Era que definitivamente estaba haciendo algo mal ya que no entendía bien el concepto de la función Name.

paso el codigo!

Private Sub CommandButton1_Click()
'en hoja 2 crea nombre de maquina segun textbox1
Hoja2.Cells(Rows.Count, "a").End(xlUp).Offset(1) = TextBox1.Value
Hoja2.Cells(1, 3) = TextBox1.Value


'copiar base de datos en carpeta de maquinas
 FileCopy "Z:\Adrian\z-Cosas en Excel\Proyecto mantenimiento\Nueva carpeta\Base.xls", "Z:\Adrian\z-Cosas en Excel\Proyecto mantenimiento\Nueva carpeta\maquinas\Base.xls"

'cambiar nombre del archivo base segun celda hoja2
  Dim NombreNuevo As String
  NombreNuevo = "Z:\Adrian\z-Cosas en Excel\Proyecto mantenimiento\Nueva carpeta\maquinas\" & Hoja2.Cells(1, 3).Value & ".xls"

    Name "Z:\Adrian\z-Cosas en Excel\Proyecto mantenimiento\Nueva carpeta\maquinas\Base.xls" As NombreNuevo
 
Exit Sub

End Sub

 

El tema esta cerrado. Gracias.

  • Silvia bloqueó este tema

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
      187
    • Comentarios
      97
    • Revisiones
      28

    Más información sobre "Un juego del Rabino en Excel"
    Última descarga
    Por pegones1

    1    1

  • Crear macros Excel

  • Mensajes

    • Vale mil gracias, en vdd se agradece todo el apoyo y comentarios
    • Hola nuevamente. Por eso la importancia de lo que mencionas tú como "ruta relativa". Tal cual comentas, y aún sin llegar a algunos detalles importantes para ayudarte, en realidad tal cual te comenté le día miércoles, pues sí podías hacer como comentabas, era cosa de obtener los Id de Windows (como tú los llamas) y la ruta de OneDrive en casa usuario y eso sí se puede obtener con VBA y luego pasarlo a PQ, pero medio que te cerraste en que "PQ no puede trabajar con rutas relativas", cosa cierta pero siempre hay formas. Si SAP puede o no guardar en OneDrive o SharePoint, pues si está mapeado en la PC ¡claro que se puede! Pero bueno, creo que si te es útil tu propia propuesta ¡avanza con eso!
    • Perdona @Abraham Valencia pero he estado liado estos días. En realidad todo el problema se reduce a estos dos problemas: Problema 1: El script que "fabrica" SAP y que luego "pego" en la macro, no es capaz de  guardar archivos en SharePoint. He estado buscando, y en realidad muchas personas tienen ese problema (no poder guardar un Excel en SAP a través de VBA). Eso muy probablemente sean problemas de permisos, que no puedo cambiar (no soy administrador de nada). Como no puedo solucionarlo así, paso al plan B, que es guardar en Excel que me genera SAP en el ordenador de cada usuario que ejecute la plantilla (y que sí está guardada en SharePoint), para después con PowerQuery llamar a ese Excel (el export). Para ello, pretendo guardar el export, en la ruta relativa "C:\..\..\..\OneDrive - NombreEmpresa\Documentos\SAP\SAP GUI" donde los \..\..\..\ saltan las rutas personales de cada usuario (tipo C:\users\IDusuario\). Eso lo hace bien, y el archivo se guarda en la ruta de cada usuario que lo usa, pero surge el problema 2 Problema 2: PowerQuery no trabaja con rutas relativas del tipo  "C:\..\..\..\OneDrive - NombreEmpresa\Documentos\SAP\SAP GUI" necesita que sea del tipo fija "C:\users\IDusuario\OneDrive - NombreEmpresa\Documentos\SAP\SAP GUI" pero claro, IDusuario es diferente para cada usuario.   Pero escribiendo todo esto, creo que he dado con una posible solución, no grabar el export en una ruta de usuario, sino en una en la raiz de C:, que siempre será igual para todos los usuarios, del tipo C:\Sap\export.xlsx que seria igual en todos los ordenadores. Asi sí podría decirle a PowerQuery que vaya siempre a la ruta C:\Sap\ que existirá en todos los ordenadores. Mañana intentaré hacer pruebas, aunque mi solución ideal seria que se pudiera guardar en el SharePoint. Saludos.
    • Hola La opción brindada por @torquemada es correcta, funciona, pero hay algunos inconvenientes que (desde mi punto de vista) no la convierten en mi primera elección. Los inconvenientes son: Tendrías que ir columna por columna haciendo los reemplazos, claro que no se harían a mano sino que utilizarías la opción reemplazar o la opción texto en columnas, aun asi demorará un poquito y será trabajoso. Cada vez que descargues otro listado, tendrás que volver a realizar los reemplazos. Me parece una mejor propuesta lo siguiente: Descarga los movimientos a un archivo de Excel Desde tu control de pagos (otro archivo) cargas los movimientos del archivo descargado mediante Power Query Power Query hará los reemplazos y reconocerá todo correctamente (sin que tengas que hacer nada especial) Cuando descargues los movimientos un día posterior, solamente tendrás que hacer clic en "Actualizar" y todo funcionará en automático
    • Hola a todos, Efectivamente, me temo que tal como trabajan las funciones =HOY() y/o =AHORA() (volátiles), sólo con macros puedes obtener soluciones. Un recurso pedestre podría ser, cada vez que quieras que se fije un dato, te sitúes en esa celda y pulses F2, F9 e INTRO.  Pero claro, puede ser un inconveniente si hay que hacerlo repetitivamente en muchas ocasiones,.............. en fin, lo comento sólo como posibilidad. Saludos,
  • 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.