Averiguar ruta del escritorio

He creado una hoja de cálculo en la que necesito que mediante un formulario me abra varios archivos (algunos de Word) que se encuentran en una ruta fija, seguidamente me haga ciertas modificaciones y posteriormente me lo guarde en una carpeta que previamente he creado mediante un Inputbox como a continuación muestro. En mi ordenador funciona, el problema se presenta cuando ejecuto el archivo en un Pc con varios usuarios y que cada uno tiene configurado un escritorio, por lo que me harías un gran favor si pudieras ayudarme (si es posible) a averiguar la forma de que dicho código funcione en todos los escritorios, es decir, que se pueda grabar en una variable la ruta del escritorio activo sea cual sea el sistema operativo de Windows que se esté usando y el usuario que lo haga. Y si no es mucho pedir si me pudieras indicar la forma de poder abrir el mismo documento una vez creado y cerrado, ya que con código no puedo saber con que nombre lo va a guardar el usuario.-
Dim nomInicial As String
nomCarpeta = InputBox("Escribe un nombre para la carpeta donde se guardarán los documentos creados")
Documents.Open FileName:="C:\MIS ARCHIVOS\AT\INICIALES.doc" 'abre el documento de la ruta expecificada.
carpetaDocum = "C:\Documents and Settings\trex\Escritorio\" & nomCarpeta
'yo tengo en mi ordenador el usuario trex pero otro cualquiera no tendrá este nombre.
MkDir (carpetaDocum) 'crea el directorio
ActiveDocument.SaveAs FileName:=carpetaDocum & "\" _
& "iniciales por " & ComboDel & ".doc" 'Guarda el documento en el directorio con el nombre
' y aquí coloco las líneas de código que deseo ejecutar hasta acabar la macro.

1 Respuesta

Respuesta
1
La respuesta trivial sería que también uses un Inputbox para pedirle al usuario el nombre de su directorio y luego utilices ese resultado para conformar el nombre de la carpeta a crear...
Pero, pensé que te mereces una respuesta mejor - de allí la demora- y luego de varios intentos (créeme) llegué a esta macro:
Sub CreaCarp()
Dim nomInicial As String
FileID = "Escritorio"
88: Raiz = Application.GetOpenFilename(, , "Seleccione un archivo de la carpeta " & FileID)
If InStr(1, UCase(Raiz), UCase(FileID)) = 0 Then
QueHago = MsgBox("Parece que no seleccionaste un " & Chr(10) & "archivo del directorio " & FileID & Chr(10) & "Presiona Aceptar para reintentarlo" & Chr(10) & "o Cancelar para salir de la macro", vbExclamation + vbOKCancel, "SELECCIONA UN ARCHIVO de " & FileID)
If QueHago = vbOK Then
GoTo 88
Else
Exit Sub
End If
Else
Raiz = Left(Raiz, InStr(1, UCase(Raiz), UCase(FileID)) - 1)
End If
nomCarpeta = InputBox("Escribe un nombre para la carpeta donde se guardarán los documentos creados")
carpetaDocum = Raiz & "Escritorio\" & nomCarpeta
'Aquí crea el nombre de la nueva carpeta
Documents.Open FileName:="C:\MIS ARCHIVOS\AT\INICIALES.doc" 'abre el documento de la ruta expecificada.
MkDir (carpetaDocum) 'crea el directorio
DocName = carpetaDocum & "\" & "iniciales por " & ComboDel & ".doc"
ActiveDocument.SaveAs FileName:=DocName 'Guarda el documento en el directorio con el nombre
Sheets("Hoja1").Range("Z4").Value = DocName 'guarda en una celda el nombre conque se grabó el archivo para que luego lo uses...
' y aquí coloco las líneas de código que deseo ejecutar hasta acabar la macro.
End Sub
Bien, esta macro usa la misma ventana de selección de archivos que muestra el menu "Archivo" | "abrir" pero con un mensaje personalizado.
La idea es que el usuario, navegue hasta donde tiene su "Escritorio" y seleccione cualquier archivo de allí, aun cuando el archivo pudiera estar en sub carpetas de ese "Escritorio".
Con ese dato, la macro se encarga de armar la raz del camino hasta la carpeta que necesitas...
Le agregué un control por si el usuario seleccionara por error otra carpeta fuera de Escritorio.
He probado soluciones de búsquedas propias de Windows, para encontrar el directorio ?:\...???...\Escritorio...
Fracasando exitosamente en todos mis intentos.
De allí, las alternativas que te propongo. Elige la que te parezca más adecuada.
Espero que esto ayude a resolver tu problema.
Un abrazo!
Fernando
Ante todo pedirte perdón por mi demora al finalizar la pregunta, en principio creí que no había sido posible crear esa macro, pero veo que no se te resiste nada, me has solucionado un problema, ahora puedo seguir avanzando, muchísimas gracias por tu esfuerzo y ayuda. Posiblemente te haga alguna otra consulta más adelante.. Un Saludo.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas