Cómo obtener la ruta de "Mis documentos" en VBA y VB6

Cómo obtener la ruta de "Mis documentos" en VBA y VB6

En el explorador de archivos, la carpeta Mis documentos parece estar en el root pero no es así. Esta carpeta se encuentra en la subcarpeta de C:\Documents and Settings. La cuestión es que la primera subcarpeta toma el nombre del usuario y por lo tanto no solo cambia de un PC a otro, sino que también ocurre en un PC multiusuario.

¿Cómo visualizar la carpeta "Mis documentos" en VBA?

El siguiente código permite visualizar la carpeta "Mis documentos" independientemente del usuario que esté conectado. Has de ponerlo en un módulo general:

Option Explicit 
Private Type SHITEMID 
    cb As Long 
    abID As Byte 
End Type 
Private Type ITEMIDLIST 
    mkid As SHITEMID 
End Type 
Private Const CSIDL_PERSONAL As Long = &H5 
Private Declare Function SHGetSpecialFolderLocation Lib "shell32.dll" _ 
                        (ByVal hwndOwner As Long, ByVal nFolder As Long, _ 
                         pidl As ITEMIDLIST) As Long 
Private Declare Function SHGetPathFromIDList Lib "shell32.dll" Alias "SHGetPathFromIDListA" _ 
                        (ByVal pidl As Long, ByVal pszPath As String) As Long 
Public Function Rep_Documents() As String 
    Dim lRet As Long, IDL As ITEMIDLIST, sPath As String 
    lRet = SHGetSpecialFolderLocation(100&, CSIDL_PERSONAL, IDL) 
    If lRet = 0 Then 
        sPath = String$(512, Chr$(0)) 
        lRet = SHGetPathFromIDList(ByVal IDL.mkid.cb, ByVal sPath) 
        Car_Documentos = Left$(sPath, InStr(sPath, Chr$(0)) - 1) 
    Else 
        car_Documentos = vbNullString 
    End If 
End Function
  • Ejemplo de llamada:
Private Sub CommandButton1_Click() 
    Cells(5, 2) = Car_Documentos() 
End Sub

¿Cómo visualizar la carpeta "Mis documentos" en VB6?

Aquí el proceso es mucho más sencillo. En VB6, solo hay que utilizar la variable de entorno UserProfile:

Dim sPathUser as String
sPathUser = Environ$("USERPROFILE") & "\mis documentos\"
MsgBox sPathUser

¿Para qué son útiles las variables de entorno?

La función Environ$ se utiliza para recibir el valor de una variable de entorno. Por ejemplo, si tuvieras WINDIR (Windows), obtendrás la carpeta en la que está instalado Windows (por defecto, C:\Windows\). Estas son variables que puedes utilizar tanto en Batch como en la ventana de diálogo "Ejecutar". Igualmente en un entorno de programación como VB y VBA.

En Windows, presiona la tecla de Windows + R (o menú Inicio > Ejecutar), escribe %UserProfile% y accederás a la carpeta del usuario actual. Escribe "%UserProfile%\Mis documentos" para acceder a tus documentos, o escribe %WinDir% para la carpeta de Windows...o %tmp% para las carpetas temporales, etc. Si eres administrador también puedes cambiar los valores o agregar variables de entorno desde Sistema > Acerca de > Configuración avanzada del sistema > Opciones avanzadas > Variables de entorno.

  • Variables de Windows

- Variables de usuario por defecto:

  1. TEMP carpeta temporal
  2. TMP Carpetas temporales.
  • Variables del sistema
  1. ComSpec ruta de acceso para el intérprete de comandos.
  2. FP_NO_HOST_CHECK.
  3. NUMBER_OF_PROCESSORS.
  4. OS devuelve el Sistema Operativo que se está utilizando.
  5. Path.
  6. PATHEXT.
  7. PROCESSOR_ARCHITECTURE devuelve la arquitectura del procesador (x86 etc ...).
  8. PROCESSOR_IDENTIFIER devuelve la descripción del procesador.
  9. PROCESSOR_LEVEL.
  10. PROCESSOR_REVISION devuelve el N° de revisión del procesador.
  11. TEMP es una carpeta temporal.
  12. TMP ídem.
  13. windir es la carpeta donde está instalado Windows.
  14. SystemRoot ídem.

Lenguajes