VBA/VB6 - Carpeta Mis documentos + Variables de entorno

Julio 2017


En el explorador de archivos, la carpeta Mis documentos parece estar en el root, pero no es así. Esta carpeta se encuentra en una sub carpeta de C:\Documents and Settings. El asunto es que la primera sub carpeta toma el nombre del usuario y por lo tanto cambia no solo de un PC a otro, sino que también en un PC multiusuario.
El siguiente código permite tener la carpeta Mis documentos cualquiera sea el usuario conectado. Pega este código en un modulo 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 llamado: En una hoja, pega un botón y en el código del botón, pega
Private Sub CommandButton1_Click() 
    Cells(5, 2) = Car_Documentos() 
End Sub



Mas simple en VB6


En VB6, solo hay que utilizar la variable de entorno UserProfile:
Esto no funciona en Macintosh.

También funciona en VBA.

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

Funciones de entorno


La función Environ$ es utilizada para recibir el valor de una variable de entorno.
Por ejemplo, si tuvieras WINDIR (bajo Windows), obtendrías la carpeta en la que está instalado Windows (por defecto C:\Windows\).
Estas son variable que puedes utilizar tanto en Batch como en la ventana de dialogo "Ejecutar". Igualmente en un entorno de programación como VB y VBA.
Bajo Windows, presiona la tecla de Windows + R (o menú Inicio > Ejecutar) y escribe %UserProfile%, 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.

Variables de Windows


Variables de usuario por defecto
  • TEMP carpeta temporal
  • TMP Carpetas temporales.

Variables de sistema

  • *ComSpec ruta de acceso para el interprete de comandos.
  • FP_NO_HOST_CHECK ?
  • NUMBER_OF_PROCESSORS ?
  • OS Devuelve el Sistema Operativo que se está utilizando.
  • Path ?
  • PATHEXT ?
  • PROCESSOR_ARCHITECTURE Devuelve la arquitectura del procesador (x86 etc ...)
  • PROCESSOR_IDENTIFIER Devuelve la descripción del procesador.
  • PROCESSOR_LEVEL ?
  • PROCESSOR_REVISION Devuelve el N° de revisión del procesador.
  • TEMP Carpeta temporal.
  • TMP Lo mismo.
  • windir Carpeta donde está instalado Windows.
  • SystemRoot Lo mismo.

Anexo


Si eres administrador, también puedes cambiar los valores o agregar variables de entorno desde el Panel de control (vista clásica) > Sistema > Configuración avanzada del sistema > Opciones avanzadas > Variables de entorno
Y por lo general veras lo que he escrito.

(hecho con Windows XP Pro)

Consulta también

Publicado por Carlos-vialfa. Última actualización: 9 de marzo de 2010 a las 22:26 por Carlos-vialfa.
El documento «VBA/VB6 - Carpeta Mis documentos + Variables de entorno» se encuentra disponible bajo una licencia Creative Commons. Puedes copiarlo o modificarlo libremente. No olvides citar a CCM (es.ccm.net) como tu fuente de información.