Macro para guardar libro en excel

Tengo una hoja excel con un botón (al cuál he asignado una macro) para guardar el libro con el nombre de una celda en concreto. La macro es esta:
    Sub GUARDAR()
    '
    ' GUARDAR Macro
    '
           ruta = ThisWorkbook.Path & "\"
           nombre = Sheets(1).Range("A80").Value
        ActiveWorkbook.SaveAs ruta & nombre & ".xls"

    End Sub
Mi pregunta es, si al pulsar botón, se podría mostrar un cuadro de diálogo para que cada vez que se pulse el botón "GUARDAR", pida la ubicación donde se desea guardar el libro. De manera que cada vez que pulse el botón pueda elegir una ubicación u otra, ya sea en un ordenador en particular (en C:, D:, etc) o en un servidor común a varios ordenadores.
Dado que soy principiante en el tema de las macros, agradecería que me indicaras dónde he de colocar el cógigo (si en ThisWorkbook, etc), ya que no se muy bien dónde lo he de poner.
Respuesta
1
Como primera opción, podrías usar un inputbox, de la siguiente forma:
Ruta = InputBox("Escribe la ruta donde deseas guardar, por ejemplo " & Chr$(13) & "C\Documents and Settings\Administrador\Mis Documentos\archivo1.xls", "Guardar archivo")
ActiveWorkbook. SaveAs Ruta
Primero que nada, tendrías que escribir toda la ruta a mano, o abrir el explorador de windows, copiar la ruta, y darle un nombre y una extensión al archivo.
Ademas debes checar que si se da Cancelar o clic en la cruz, no haga nada.
Después, checar que la carpeta exista, y si no, que cancele el proceso de guardado.
Y entonces si, si existe, guarde el archivo.
Es un poco de rollo para algo tan simple, pero tampoco es complicado.
------
Otra opción es:
En visual basic, hay 2 controles que pueden trabajar juntos, que son DriveListBox y DirListBox.
Estos te permiten, de forma gráfica, seleccionar la unidad, de la lista de unidades que tienes, alguna carpeta de la unidad seleccionada, y ya darle un nombre al archivo.
El detalle es que tendrías que buscar como agregar a excel, esos controles de visual basic, entrando por ejemplo, desde editor de macros de excel, al menu Herramientas -> Referencias -> y agregar tales controles.
Yo desconozco cuales son, ademas de que se me haría más fácil, agregar a visual basic, la referencia a excel, que a excel agregarle los controles de VB.
-------
Si tienes alguna duda, me dices...
Muchas gracias por la respuesta. Es muy útil, pero ¿me podrías decir cómo hago para checar si se pulsa "cancelar" o la cruz? Es que no entiendo mucho del lengueje de macros y estoy un poco perdida...
Gracias de nuevo.
Sólo una última cosa, he optado por la primera opción que me has dado, pero he llamado al archivo con otro nombre en lugar de archivo1, archivo2 (con la misma ruta), y se me ha guardado con el nombre de archivo1. ¿Eso por qué sucede? ¿Qué puedo hacer pa solucionarlo?
Siento las molestias.
Muchas gracias por todo.
Un saludo.
Que hay
Desgraciadamente para la utilidad que tiene el InputBox, se tiene muy poco control sobre el.
Da el mismo resultado si das clic en la cruz, si das cancelar, o presionas la tecla Esc.
Es como si obtuvieras unicamente los valores: True al dar Aceptar, y False, al dar cancelar, la cruz, o Esc.
------
Para lo segundo que preguntas, ¿a qué te estas refiriendo con la misma ruta? ¿Qué ruta estas indicando?
Perdona, pero no sé cómo indicar con lenguaje de visual basic, que si pulso cancelar o la cruz o Esc no haga nada. ¿Me podrías ayudar escribiéndome el código? Es que como ya te he comentado anteriormente estoy muy perdida en este lenguaje... y no sé qué instrucciones escribir ni en qué orden...
***************
Para lo segundo que te pregunté, quiero decir que si yo escribo en la ventana que me aparece para guardar el archivo esta ruta: "C:\Documents and Settings\Usuario\Escritorio y añado un nombre distinto de archivo1, me lo guarda como archivo1 igualmente.
***************
Muchas gracias por tu ayuda :)
Un saludo.
No puedes indicar que un inputbox no haga nada al presionar Esc, en la cruz, o cancelar, pues ya es un control (ventana) prediseñado, que obtiene y regresa valores predefinidos.
Nuevamente tienes 2 opciones:
(Hay más, pero no vienen ni al caso)
1.- Do While x <> "1"
x = InputBox("Escribe el numero 1 para salir del bucle", "Numero 1")
Loop
MsgBox x
Lo que crearías aquí sería un bucle que se repetiría, hasta que ingresaras el numero 1, así que si presionas cualquiera de las teclas que comentas, al no obtenerse 1, se ejecutaría nuevamente el inputbox. Tiene el detalle de que si escribes 2 y das Aceptar, también se ejecutaría nuevamente el inputbox.
Una solucion a esto, es usando la instruccion Exit Do, donde, si escribes 3 por ejemplo:
Do While x <> "1"
x = InputBox("Escribe el numero 1 para salir del bucle", "Numero 1")
    If x = "3" Then
    Exit Do
    End If
Loop
MsgBox x
Aunque la instrucción dice que se repita el inputbox hasta que no se ingrese 1, al indicar que al tener el inputbox el valor 3, saldrá del bucle Do... Loop
La 2da opción sería crear tu un formulario con el tamaño de una ventana, con la posibilidad de agregarle los botones, darles el texto Aceptar y Cancelar, y deshabilitar la cruz, y como la tecla Esc esta relacionada al botón Cancelar y/o a la cruz, al ser un botón tuyo, con el código que le indiques, pues no habría relación con la tecla Esc.
-----------------
Para lo segundo, no te ofendas, debe ser un error de programación tuyo.
Prueba lo siguiente:
ruta = "C:\Documents and Settings\Usuario\Escritorio\"
archivo = InputBox("Nombre del archivo", "Archivo")
ActiveWorkbook.SaveAs ruta & archivo & ".xls"
--------------
Espero haberte aclarado por el momento, alguna de tus dudas.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas