Guardar libro .xls con vb

Hola!
Necesito una macro (que guardaré en el proyecto personal.xls) que me guarde un libro nuevo de excel en una carpeta ya existente en el escritorio llamada "CLIENTES".
Se trata de que yo manualmente en la Celda A1 pondré el nombre del cliente y en la celda A2 el nombre de una obra.
Con la macro quiero que se guarde ese archivo (que previamente no está guardado en ningún sitio) dentro de la carpeta "CLIENTES" del escritorio y que cree una carpeta nueva con el nombre del cliente (si no existe) y dentro de la misma, que cree una subcarpeta con el nombre de la obra (si no existe) y finalmente lo guarde dentro de esta SUBCARPETA...
Por ejemplo: en mi libro excel: celda A1=ELDA, celda A2=VINCI... El resultado debe ser que se guarde el archivo con el nombre: ELDA-VINCI (que haga una concatenación) y que se guarde en: C:\Documents and Settings\Miguel\Escritorio\CLIENTES\ELDA\VINCI\ELDA-VINCI.xls

1 Respuesta

Respuesta
1
Sub Guardar()
Dim MiRuta, MiNombre
Dim MiCarpeta As Object
Dim Encontrado As Boolean
Encontrado = False
MiRuta = "C:\Documents and Settings\Miguel\Escritorio\CLIENTES\"    ' Establece la ruta.
MiNombre = Dir(MiRuta, vbDirectory)    ' Recupera la primera entrada.
Do While MiNombre <> ""    ' Inicia el bucle.
    ' Ignora el directorio actual y el que lo abarca.
    If MiNombre <> "." And MiNombre <> ".." Then
        If (GetAttr(MiRuta & MiNombre) And vbDirectory) = vbDirectory Then
            If MiNombre = Range("a1") & Range("A2") Then
                Encontrado = True
                Exit Do
            End If
        End If    ' solamente si representa un directorio.
    End If
    MiNombre = Dir    ' Obtiene siguiente entrada.
Loop
MiRuta = MiRuta & Range("a1") & Range("A2") & "\"
If Encontrado = False Then
MsgBox "no la he encontrado, la voy a crear"
Set MiCarpeta = CreateObject("Scripting.FileSystemObject")
MiCarpeta.CreateFolder (MiRuta)
End If
    ActiveWorkbook.SaveAs Filename:= _
        MiRuta & Range("a1") & "-" & Range("a2") & ".xls", _
        FileFormat:=xlNormal, Password:="", WriteResPassword:="", _
        ReadOnlyRecommended:=False, CreateBackup:=False
End Sub
Prueba esto y me cuentas
Gracias a tus ideas y mi investigación he conseguido lo que pretendía. Tu macro no lo conseguía realmente. Pero por si a alguien le sirve he hecho lo siguiente:
Sub Crear_carpeta_subcarpeta_archivo()
If Range("D8").Value = "NO" Then
MsgBox "¡Datos incompletos! Falta algún nombre: carpeta, subcarpeta o archivo"
Else
    Application.ScreenUpdating = False
    Dim NombreCarpeta As String
    Dim NombreSubcarpeta As String
    Dim NombreArchivo As String
    NombreCarpeta = Range("B2")
    NombreSubcarpeta = Range("B3")
    NombreArchivo = Range("B4") & ".xls"
    Set fso = CreateObject("Scripting.FileSystemObject") 'Distintas rutas:
    ruta1 = ("C:\Documents and Settings\Miguel\Escritorio\PROGRAMA CREACIÓN DE CARPETAS\" & NombreCarpeta)
    ruta2 = ("C:\Documents and Settings\Miguel\Escritorio\PROGRAMA CREACIÓN DE CARPETAS\" & NombreCarpeta & "\" & NombreSubcarpeta)
    Ruta3 = ("C:\Documents and Settings\Miguel\Escritorio\PROGRAMA CREACIÓN DE CARPETAS\" & NombreCarpeta & "\" & NombreSubcarpeta & "\" & NombreArchivo)
    If Not fso.FolderExists(ruta1) Then 'Si la carpeta no existe:
        fso.CreateFolder (ruta1)
        fso.CreateFolder (ruta2)
        Workbooks.Add
        ActiveWorkbook.SaveAs (Ruta3)
        MsgBox "Carpeta, Subcarpeta y Archivo creados"
    Else 'Si existe la carpeta ver si existe la subcarpeta:
        If Not fso.FolderExists(ruta2) Then 'Si la subcarpeta no existe:
            fso.CreateFolder (ruta2)
            Workbooks.Add
            ActiveWorkbook.SaveAs (Ruta3)
            MsgBox "Subcarpeta y Archivo creados"
        Else 'Si existe la subcarpeta ver si existe el archivo:
'-------- APARTADO ESPECIAL PARA SABER SI EL ARCHIVO YA ESTÁ CREADO O NO ----------
                    On Error GoTo Crear
                        Workbooks.Open (Ruta3)
                        ActiveWorkbook.Close False
                            MsgBox "¡Todo existe!"
                    Exit Sub
Crear:
Workbooks.Add 'Crea un nuevo libro. Puede que nos interese guardar al libro activo
ActiveWorkbook.SaveAs (Ruta3)
                            MsgBox "Archivo creado"
'----------------------------------------------------------------------------------
        End If 'Cierre de la condición ruta3
    End If 'Cierre de la condición ruta3
End If 'Cierre de la condición de datos incompletos
Set fso = Nothing
End Sub
HAY QUE SABER QUE: EN B2 ESTÁ EL NOMBRE DE LA CARPETA, EN B3 ESTÁ EL NOMBRE DE LA SUBCARPETA, EN B4 ESTÁ LA FÓRMULA DE: =CONCATENAR(B2;" - ";B3), Y QUE EN LA CELDA D8 ESTÁ LA FÓRMULA DE: =SI(O(B2="";B3="";B4="");"NO";"SI"). 
La dirección o ruta está definida manualmente en vb.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas