Macro para cambiar directorio por defecto excel

gustavomeeuwes

New Member
Joined
Aug 13, 2010
Messages
46
Hola.
Estoy descubriendo las macros y tengo una duda.
Tengo una planilla "Planilla General" con 5 hojas dentro del libro. Quiero copiar 3 de las hojas "Datos Generales", "Seguimiento", "Contactos Emergencias" en un nuevo libro y guardarlo en un directorio específico C:\C.I.S.\Fichas distinto al predeterminado de Excel C:\Mis documentos y el nombre de este nuevo libro es el valor de la celda C6 de la hoja "Datos Generales". Despues cierro este nuevo libro y ejecuto una macro "Nueva_Ficha" que me borra el contenido de las celdas para dejar "limpia" la planilla original y cargar nuevos datos.
Ví en los foros una solución como la que sigue:

Code:
Sheets(Array("Datos Generales", "Seguimiento", "Contactos Emergencias")).Select
Sheets(Array("Datos Generales", "Seguimiento", "Contactos Emergencias")).Copy
ChDir "C:\C.I.S\Fichas"
ActiveWorkbook.SaveAs Filename:=Range("C6").Value
ActiveWorkbook.Close
Sheets("Datos Generales").Select
Application.Run "'Planilla General.xls'!Nueva_Ficha"

El tema es que grabamos la macro realizando manualmente las operaciones que queremos que la misma realice. Manualmente al ejecutar "Guardar como", el Excel guarda la última ubicación o carpeta donde guardamos, por lo que al finalizar la grabación de la macro y ejecutarla, la misma funciona bien. Pero si cierro el excel y lo abro de nuevo, el "Guardar como" vuelve a la ubicación por defecto C:\Mis documentos y al ejecutar la macro no me respeta la instrucción

ChDir "C:\C.I.S\Fichas"

y me guarda la planilla en la ubicación por defecto C:\Mis documentos.
¿Como puedo solucionarlo?
Perdón si mi pregunta es demasiado larga, pero quería ser bien claro. Veo en los foros que la gente pregunta de a poco con lo que se complica dar una respuesta rápida y que funcione, y que terminan seguramente desgastando a los expertos y moredarores.
Desde ya muchas gracias
NOTA: Uso Excel 2003.

Cordiales Saludos
Gustavo Meeuwes
 
Last edited by a moderator:

Excel Facts

Get help while writing formula
Click the italics "fx" icon to the left of the formula bar to open the Functions Arguments dialog. Help is displayed for each argument.
Hola Gustavo. Bienvenido a nuestro querido foro. :)

No estoy seguro si le funcionaria lo siguiente:

Code:
Private Sub Workbook_Open()
    ChDir "C:\C.I.S\Fichas"
End Sub
 
Upvote 0
Hola Gustavo y bienvenido a MrExcel.

Bueno, del punto de vista de programación, si uno va a ir cambiando el directorio por defecto, le toca al programador cambiarlo al valor inicial antes de salir del programa. Por lo general a usuarios no les gusta que un macro cambia la configuración de la computadora al menos que es la función en sí de tal macro.

Pero favor sepa que no es necesario. Se puede añadir el sendero al nombre y guardar el archivo así. Entonces, paso 1 será algo como:
Code:
    '// ¿ ... other code ... ?
 
    Sheets(Array("Datos Generales", "Seguimiento", "Contactos Emergencias")).Copy
    ActiveWorkbook.SaveAs Filename:="C:\C.I.S\Fichas\" & Range("C6").Value
    ActiveWorkbook.Close
    '// ¿ ... other code ... ?

Después, a mí me gusta usar una variable para accesar objetos en vez de depender que x cuaderno sea el activo. Puede ser que en el futuro hiciera alguna modificación que cambiará el cuaderno activo, entonces yo haría algo como:
Code:
    Dim wbNuevo As Excel.Workbook
    Sheets(Array("Datos Generales", "Seguimiento", "Contactos Emergencias")).Copy
    Set wbNuevo = ActiveWorkbook
    '// ¿ ... other code ... ?
    With wbNuevo
        .SaveAs Filename:="C:\C.I.S\Fichas\" & Range("C6").Value
        .Close
    End With
    '// ¿ ... other code ... ?

Ahora, es mal hábito tener "valores secretos" en su código. ¿Qué pasa si por a o por b decido cambiar el sendero donde va el archivo? Tendría que revisar quien sabe cuántas líneas de código para estar seguro que cambié todas las instancias (sí, "find and replace" ayuda mucho pero siempre es mala idea). Entonces defino el sendero como constante.
Code:
    Const c_strSendero As String = "C:\C.I.S\Fichas\"
    Dim wbNuevo As Excel.Workbook
 
    '// ¿ ... other code ... ?
 
 
    Sheets(Array("Datos Generales", "Seguimiento", "Contactos Emergencias")).Copy
 
    Set wbNuevo = ActiveWorkbook
 
    With wbNuevo
        .SaveAs Filename:=c_strSendero & Range("C6").Value
        .Close
    End With
    '// ¿ ... other code ... ?

Ahora me pregunto «¿Y qué va a pasar si decido insertar o suprimir una fila o columna encima de o a la izquierda de celda C6 o si deseo copiar otra hoja que está antes de la hoja datos generales?» Va a usar un nombre erróneo y/o levantar un error. Mejor dar un nombre como «NombreNuevo» a celda C6 y usar el nombre. Asi evito problemas.
Code:
    Const c_strSendero As String = "C:\C.I.S\Fichas\"
    Const c_strRngFileName As String = "NombreNuevo"
    Dim wbNuevo As Excel.Workbook
 
    '// ¿ ... other code ... ?
    Sheets(Array("Datos Generales", "Seguimiento", "Contactos Emergencias")).Copy
 
    Set wbNuevo = ActiveWorkbook
 
    With wbNuevo
        .SaveAs Filename:=c_strSendero & Range("NombreNuevo").Value
        .Close
    End With
    '// ¿ ... other code ... ?

¡HOLA, Jaafar! Me alegra verlo aquí.

Atentamente,
 
Last edited:
Upvote 0
Hola Greg!
Muchas gracias por la respuesta. La primera opción creo que es la mejor para mis necesidades.
La planilla es para hacer fichas con datos personales y un seguimiento de atenciones Psicológicas de estas personas. Mi Señora estudia Psicología y les quiero ayudar, ya que actualmente tienen todas estas fichas hechas a mano. Y las quiero guardar en un directorio en particular ya que los datos los van a cargar en una computadora de la universidad a la que tienen acceso muchas personas.
Aprovecho y te hago otra consulta.

Como le agrego una instruccion para que no se puedan borrar estos archivos creados, Si abrir y modificar y volver a guardar. Agregándole una contraseña o en modo solo lectura? hay un método mejor?
Cual sería la línea de comandos a agregar?

Gracias y Saludos
Gustavo
 
Upvote 0
De lo que me doy cuenta no hay manera de prevenir que alguien se los borre en el sentido de dentro de Excel. Eso de poder borrar o no es cuestion de derechos del usuario en el sistema operativo. Alguien con derechos de administrador tendría que ajustar los derechos de los usuarios para que solamente puede leer archivos y no suprimirlos en tal y tal carpeta.
 
Upvote 0
Hola Greg: En su contestación anterior, en la ultima opción,

"Ahora me pregunto «¿Y qué va a pasar si decido insertar o suprimir una "fila o columna encima de o a la izquierda de celda C6 o si deseo copiar "otra hoja que está antes de la hoja datos generales?» Va a usar un "nombre erróneo y/o levantar un error. Mejor dar un nombre como "«NombreNuevo» a celda C6 y usar el nombre. Asi evito problemas.

No veo que se le asigne el "NombreNuevo" a la celda C6.

Esta opción como bien Ud dice es la mas "segura" y voy a probarla.
Gracias.
Gustavo
 
Upvote 0
...No veo que se le asigne el "NombreNuevo" a la celda C6....

Esto se hace manualmente. Por medio del menú, (en inglés) es Insert | Name | Define... o se puede presionar Ctrl+F3 o se puede seleccionar C6 y teclar el nombre en la "cajita de nombre" que está ubicado al lado izquierdo de la barra de fórmulas.
 
Upvote 0

Forum statistics

Threads
1,223,240
Messages
6,170,951
Members
452,368
Latest member
jayp2104

We've detected that you are using an adblocker.

We have a great community of people providing Excel help here, but the hosting costs are enormous. You can help keep this site running by allowing ads on MrExcel.com.
Allow Ads at MrExcel

Which adblocker are you using?

Disable AdBlock

Follow these easy steps to disable AdBlock

1)Click on the icon in the browser’s toolbar.
2)Click on the icon in the browser’s toolbar.
2)Click on the "Pause on this site" option.
Go back

Disable AdBlock Plus

Follow these easy steps to disable AdBlock Plus

1)Click on the icon in the browser’s toolbar.
2)Click on the toggle to disable it for "mrexcel.com".
Go back

Disable uBlock Origin

Follow these easy steps to disable uBlock Origin

1)Click on the icon in the browser’s toolbar.
2)Click on the "Power" button.
3)Click on the "Refresh" button.
Go back

Disable uBlock

Follow these easy steps to disable uBlock

1)Click on the icon in the browser’s toolbar.
2)Click on the "Power" button.
3)Click on the "Refresh" button.
Go back
Back
Top