Comprobar si hay una carpeta con VBA

Soy un poco novato y necesito tu ayuda con el siguiente problema:
Estoy creando varias macros en las que necesito abrir unos documentos que se encuentran en una carpeta del disco duro y tras realizar varios cambios en los mismos necesito guardarlos en otro directorio situado en el escritorio, todo, el problema se me presenta cuando ya hay una carpeta con el mismo nombre en el escritorio, lo he intentado de varias formas pero me da error, la última forma que estoy haciéndolo es así:
Sub Crear_Hoja()
Documents.Open FileName:="C:\MIS ARCHIVOS\AT\PERSONAS.doc" ' abro el archivo
Windows("PERSONAS").Activate ' activo el documento
Set fs = CreateObject("Scripting.FileSystemObject")
If fs.FolderExists("C:\Documents and Settings\trex\Escritorio\EJEMPLOS DE ESCRITOS") Then
ActiveDocument.SaveAs FileName:="C:\Documents and Settings\trex\Escritorio\EJEMPLOS DE ESCRITOS\" & "HOJA PERSONAS DE" _
& TextApe1Det & ".doc" '' Si existe la carpeta EJEMPLOS DE ESCRITOS en el escritorio me lo guarda en esa carpeta y con el nombre que le especifico de los datos que saco de un formulario
Else
MkDir ("C:\Documents and Settings\trex\Escritorio\EJEMPLOS DE ESCRITOS") ' si no existe la carpeta pues la crea
ActiveDocument.SaveAs FileName:="C:\Documents and Settings\trex\Escritorio\EJEMPLOS DE ESCRITOS\" & "HOJA PERSONAS DE" _
& TextApe1Det & ".doc"
End If
End Sub
El problema es que me da error cuando hay una carpeta con el mismo nombre en el escritorio, pero lo que verdaderamente necesitaría es que si hay una carpeta igual la guarde en un directorio temporal del disco duro y me cree una nueva carpeta llamada EJEMPLOS DE ESCRITO y en ella se guarde el documento "Hoja de Personas de" & TextApe1Det & ".doc"

1 respuesta

Respuesta
2
Estuve probando tu macro y quitándole la línea: Windows(..).Activate (al abrir pasa a ser el activo) funciona bien, digamos, hace lo que dice ahí que tiene que hacer:
Si encuentra la carpeta, que guarde el archivo en ella.
Si no encuentra la carpeta, la crea y guarda el archivo en ella.
Ahora, entiendo que no querés que la guarde en la carpeta existente sino que debe crear una nueva. Bien, para eso la macro debiera quedarte así:
Sub Crear_Hoja()
Documents.Open FileName:="C:\MIS ARCHIVOS\AT\PERSONAS.doc"
Set fs = CreateObject("Scripting.FileSystemObject")
If fs.FolderExists("C:\Documents and Settings\trex\Escritorio\EJEMPLOS DE ESCRITOS") Then
MkDir(?C:\MIS ARCHIVOS\...\EJEMPLOS PROVISORIOS?)
ActiveDocument.SaveAs FileName:="C:\MIS ARCHIVOS\.....\EJEMPLOS PROVISORIOS\" & "HOJA PERSONAS DE" _ & TextApe1Det & ".doc"
Else
MkDir ("C:\Documents and Settings\trex\Escritorio\EJEMPLOS DE ESCRITOS") ActiveDocument.SaveAs FileName:="C:\Documents and Settings\trex\Escritorio\EJEMPLOS DE ESCRITOS\" & "HOJA PERSONAS DE" _
& TextApe1Det & ".doc"
End If
End Sub
(Los puntos suspensivos son para que le asignes una ruta de acuerdo a tus directorios.)
Ahora, cuando encuentra una carpeta con nombre Ejemplos de Escritos, crea otra Ejemplos Provisorios y guarda el documento ahí.
Si no la encuentra a Ejemplos de Escritos, la crea y guarda el doc ahí.
Disculpame, pero olvidé copiarte la rutina de error, ya que no sé con cuanta frecuencia crearás la carpeta provisoria, puede darse el caso de que mandes a copiar y como la carpeta de EJEMPLOS existe creará la de PROVISORIO, pero si también existe tenemos que mandar un mensaje de aviso.
Entonces debajo del sub falta esta línea:
On Error GoTo YaExiste
Y luego del END IF las 3 líneas que siguen:
Exit Sub
YaExiste:
MsgBox ("Ya existe ese archivo?..")
Y aquí ya vendría el End Sub. Podés agregar otras instrucciones dentro de la rutina YaExiste.
Esperando que esto sea lo que necesitas, te saludo atentamente
Elsa
PD)

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas