Grabar libro con el nombre de una celda

Hola, Tengo una plantilla que funciona como formato para generar cotizaciones. Requiero que mediante un botón la macro seleccione la celda en donde esta una fórmula que genera el nombre del archivo, lo convierta a texto y luego guarde el libro en un destino que cambia cada vez que guardo una diferente cotización.
Estoy utilizando esta rutina, que me funciona pero me guarda el archivo siempre en la misma ubicación. ¿Qué comando puedo utilizar para que me pregunte la ruta para guardar el libro?
Range("B5").Select
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
Dim NombreArch As String
NombreArch = Range("B5")
ActiveWorkbook.SaveAs ("" & NombreArch) 
Muchas gracias,

1 respuesta

Respuesta
1
Antes de empezar tu rutina pones un InputBox y lo pasas a una variable que utilizaras para ponerla en la ruta donde guardar el archivo:
carpeta = InputBox("Escriba el nombre de la carpeta", "CARPETA")
ActiveWorkbook.SaveAs Filename:="C:\" & carpeta & "\" & NombreArch & " .xls", FileFormat:=     xlNormal, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False     , CreateBackup:=False
Quitas tu ultima linea y pones estas carpeta será la carpeta donde quieres guardar el archivo y NombreArch el nombre. Tienes que tener creada la carpeta por supuesto si no te dará error porque no la encuentra.
>Un saludo
>Julio
Hola, Muchas gracias por tu interés. He ingresado el siguiente código. Creo que seguí tus instrucciones pero no me funciona el código, pero estoy casi segura que tengo errores de sintaxis, pues la función InputBox no la manejo muy bien. Te agradezco si puedes darme una mano..
Private Sub CommandButton1_Click()
Dim InputBox(Eltek \ COTIZACIONES, [guardar], [Eltek\COTIZACIONES]) As String
carpeta = InputBox(Eltek \ COTIZACIONES, [guardar], [Eltek\COTIZACIONES])
Range("B5").Select
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
Dim NombreArch As String
NombreArch = Range("B5") & ".Xls"
ActiveWorkbook.SaveAs Filename:="z:\" & Eltek \ COTIZACIONES & "\" & NombreArch & " .xls", FileFormat:=xlNormal, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, CreateBackup:=False
End Sub
Pues si que la manejas "no muy bien", jejejeje, no importa para eso estamos, un Inputbox es una ventana como un TextBox flotante para que el usuario introduzca un valor que luego de pasarlo a una variable en este caso carpeta podamos utilizar el valor introducido para hacer algo con él. En este caso el nputbox te pedirá que pongas un valor a la carpeta, vamos un nombre para que vaya a ella a guardar el archivo. Esto te permite cambiar de carpeta según quieras en cada momento sin tener que modificar la macro, tu pusiste en tu consulta:
"en un destino que cambia cada vez que guardo una diferente cotización."
Vamos más claro no lo podías poner, si eso ocurre que cada vez guardas en sitio diferente no se puede poner en la macro un sitio fijo, por eso el valor lo pasamos a una variable para que tú elijas la carpeta de destino.
Tu ejecuta la macro como te la puse, crea diferentes carpetas en tu ruta y cada vez que pulses en el botón te mostrará el inputbox para que tú escribas SOLO la carpeta si se llama COTIZACIONES pues eso pones, entonces la macro se irá a esa carpeta y dentro guardará tu archivo con el nombre que tomo de la celda B5.
>Un saludo
>Julio
Hola,
Finalmente pude arreglar el código con tus instrucciones y funcionó perfecto!, muchas gracias.
¿Solo una pregunta más (prometo que es la última) Es posible hacer que en el cuadro Input Box se pueda seccionar la carpeta en donde quiero guardar en lugar de escribir la ruta?. La razón es que tengo mi archivo clasificado por clientes y cada cliente tiene su propia carpeta y dentro de cada carpeta del cliente esta diviida por años y cada año tiene una carpeta por cada caso de de cotización, entonces cuando quiero guardar la cotización debo escribir correctamente (incluyendo mayúsculas y minúsculas) el nombre de la rura y con tantos clientes y casos es un poco difícil recordar correctamente como esta escrito cada uno . Creo seria más práctico si es viable seleccionar la carpeta en donde quiero guardar.
Muchas gracias por tu tiempo.
Lo que tu quieres es imposible y además no se puede hacer, jajajajaja, es verdad pero desde la forma que tu quieres, te explico, todos los archivos Windows los guarda en una ruta(directorio) para llegar a él tienes que pasar por todas las carpetas que tengas una dentro de otra si no es imposible. Si tienes tantos apartados para cada cliente y quieres guardar el libro en la última carpeta del directorio, a Windows le tienes que decir que es en esa carpeta donde quieres guardarlo, no puedes pensar que con darle la carpeta Windows "Imagine" que es la que tu quieres.
Ejemplo tonto: Si tienes un anillo en un joyero que esta en un cajón dentro de un armario, para coger el anillo tendrás que ir abriendo todo hasta llegar a él, no es posible coger el anillo sin abrir todas las puertas y cajones que hay antes del anillo.
Solución: Ya no nos vale el Inputbox porque tendrías que escribir correctamente todos los datos de la ruta para guardar en la carpeta deseada. Pero podemos emplear otra forma de llegar a ella que a lo mejor te resulta mucho más fácil, y de paso no tengas que escribir nada porque la macro tomará el nombre de la celda.
Espero que navegar por las carpetas sepas hacerlo y te resulte más fácil, si no estamos perdidos, en fí la macro quedaría así:
Private Sub CommandButton1_Click()
Dim NombreArch As String
Range("B5").Select
NombreArch = ActiveCell.Value & ".xls"
Application.Dialogs(xlDialogSaveAs).Show (NombreArch)
End Sub
Esto te permitirá navegar por las carpetas y hacer click en guardar cuando llegues al lugar deseado.
>Un saludo
>Julio
PD: Si te ha servido ya puedes puntuar la consulta y finalizarla. Gracias ¡Vaya rollo te he metido! Disculpa.
Muchas gracias, querido experto. Logre el resultado que quería :) y ademas aprendí muchísimo.
Que herramienta tan útil esta página. Recomendada 100%

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas