Saltar al contenido

una macro puede grabar “datos” en ella misma?


celta04

Recommended Posts

publicado

Hola:

Pregunte en otro sitio y me dijeron que era imposible, pero ayer buceando en el foro vi una pregunta antigua del estilo.

La pregunta era si “Es posible alterar el código VBA mediante el propio código VBA”, y era posible, y mi pregunta es: si una macro puede grabar “datos” en sí misma?.

La razón:

Tengo un archivo Excel “F:\Mi archivo excel.xlsm” con una macro que coge los datos de otro archivo que casi siempre está en la misma ruta, por lo que esa ruta es la que tiene la macro, “D:\Pruebas de Excel\Prueba_1_excel.xls”. Pero si mañana se cambia el directorio del archivo de datos a “D:\Cambio\Prueba_1_excel.xls”, o incluso el nombre “D:\Cambio\Prueba_2_excel.xls”, le tengo puesto Application.FileDialog(msoFileDialogOpen) para buscar la nueva ubicación yo, y luego modifico la macro con la nueva ruta/nombre.

Hay alguna forma de que la macro coja esa nueva ubicación y se lo guarde ella sola en lugar del antiguo? O eso es imposible y hay que hacerlo a mano y guardar de nuevo la macro como lo estoy haciendo hasta ahora?.

La referencia es absoluta al archivo por que casi siempre está en la misma carpeta, y si alguna vez cambia, es al cambiar el año (que se cambia el nombre por el del nuevo año) o por cambio de pc (cada tres años). Como veis no es un fallo habitual y fácilmente arreglable, es mas cosa de rizar el rizo, que para mis nulos conocimientos llegar hasta donde he llegado me parece demasiado. Al principio de año solo sabía de macros con la “grabadora de macros”, y ahora a base de buscar por la web me he atrevido, eso sí, solo con módulos normales, con módulos de clase y userform aun me pierdo…mas bien no me encuentro jajaja

No adjunto archivo porque entiendo que es mas falta de conocimientos míos y no he sabido googlear bien, pero si consideráis que es necesario lo subo.

Muchas gracias y un saludo.

publicado

Saludos.

No te entiendo muy bien pero si lo que quieres es saber la ruta del nuevo archivo se puede hacer media vez no cambie el nombre de la carpeta contenedora, una opción seria por ejemplo listar los libros de la carpeta en un rango de celdas o un formulario y asi saber cual es el que te interesa lo seleccionarias y tomarias la ruta del archivo y lo abririas te pongo dos macros una para listar y otra para abrir.

Sub ListarLibros()
Dim MiArchivo As String
Carpeta = "D:\Pruebas"
MiArchivo = Dir(Carpeta & "\*.xls*", 0)
i = 2
Do While MiArchivo <> ""
i = i + 1
Cells(i, 1) = Carpeta & "\" & MiArchivo
MiArchivo = Dir
Loop
End Sub[/PHP]

[PHP]Sub AbrirLibro()
Application.ScreenUpdating = False
Workbooks.Open Filename:=ActiveCell
ThisWorkbook.Activate
Application.ScreenUpdating = True
End Sub
[/PHP]

Atte.

joshua

publicado

Ante todo muchas gracias por responder:

Lamento mucho no haberme explicado bien.

Atraves de un miniexplorador de Windows encuentro el archivo nuevo donde esta, y le asigno una variable para que lo abra y coja los datos, incluso le he puesto un texbox que me indica su ruta, luego voy a la macro y cambio la ruta fija por la nueva para que la próxima vez haga todo el proceso él solo en menos de un segundo.

La pregunta es si hay alguna forma, algún código, que coja esa variable, que incluso sale en el texbox, y la ponga en lugar de la variable anterior…vamos, lo que hago yo posteriormente que lo haga él solito.

Mejor adjunto los dos archivos, el mío y el de donde coge los datos, ya sé que es un caos de código y poco optimizado, pero ya he dicho que no tengo ni idea de macros, VBA, programacion...voy viendo cosas por la web que me interesan y las adapto a mis necesidades, muchos códigos no tengo ni idea que hacen….peeeero….funciona.

Muchas gracias por todo

Pruebas Excel.rar

publicado

El nombre del archivo se coge de la celda D1.

El icono "folder" te permite cambiar el nombre del archivo. Por seguridad, debes desproteger la hoja previamente para realizar esta acción.

He reorganizado un poco la macro, prueba y comentas.

01 Mi Archivo año 2012.xls

publicado

No sé cómo poner para demostrar mi sorpresa, admiración…me parece impresionante y muy elegante la forma que has dispuesto, de verdad que no sé cómo darte las gracias.

El único inconveniente era a la hora de pegar los datos copiados, daba error al hacer el pegado especial necesario para cambiar los datos de horizontal a vertical. Después de muchas pruebas descubrí que era por cerrarse el archivo de origen antes de hacer el pegado. Lo he solucionado cerrando el archivo de origen después de haber pegado los datos.

He visto varios aportes tuyos y no dejan nunca de sorprenderme, tu imaginación no tiene limite!!! De verdad que muchísimas gracias por todo y un saludo.

Se pude dar por solucionado.

Archivado

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

×
×
  • 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.