Vba 在任何用户';s桌面目录(如果不存在)

Vba 在任何用户';s桌面目录(如果不存在),vba,excel,excel-2007,create-directory,Vba,Excel,Excel 2007,Create Directory,我有一个文件,当按下按钮时,它会打开一个特定的文件夹。我将向其他用户分发此文件,以便代码必须知道如何查看正确的目录: 查看文件夹是否已存在,如果存在,请打开文件夹 如果文件夹不存在,请创建该文件夹,并在创建后将其打开 到目前为止,以下是我的代码的相关部分: If Dir("C:\Users\myUsername\Desktop\sampleFolder", vbDirectory) = "" Then MkDir "C:\Users\myUsername\Desktop\sa

我有一个文件,当按下按钮时,它会打开一个特定的文件夹。我将向其他用户分发此文件,以便代码必须知道如何查看正确的目录:

  • 查看文件夹是否已存在,如果存在,请打开文件夹
  • 如果文件夹不存在,请创建该文件夹,并在创建后将其打开
  • 到目前为止,以下是我的代码的相关部分:

    If Dir("C:\Users\myUsername\Desktop\sampleFolder", vbDirectory) = "" Then
              MkDir "C:\Users\myUsername\Desktop\sampleFolder"
              retVal = Shell("explorer.exe C:\Users\myUsername\Desktop\sampleFolder", vbNormalFocus)
         Else
              retVal = Shell("explorer.exe C:\Users\myUsername\Desktop\sampleFolder", vbNormalFocus)
    End If
    
    我的主要问题是,我不知道如何获取文件路径“C:\Users\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu\Desktop”中显示的用户的实际用户名

    这是正确的方法吗?如果我在代码中插入自己的用户名,代码就可以工作,但我无法找到自动获取用户名的方法,因此代码对最终用户来说很容易

    我的主要问题是,我不知道如何获取文件路径“C:\Users\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu\Desktop”中显示的用户的实际用户名

    通常,
    Environ
    函数应该可以工作(尽管可能有例外),您也可以稍微压缩代码:

    Dim username$
    Dim myFolder$
    username = ENVIRON("username")
    myFolder = "C:\Users\" & username & "\Desktop\sampleFolder"
    
    If Dir(myFolder, vbDirectory) = "" Then
         MkDir myFolder
    End If
    
    retVal = Shell("explorer.exe " & myFolder, vbNormalFocus)
    
    试一试


    为什么在声明过程中变量末尾会出现
    $
    ?我以前从未见过这种情况。@kyle是
    As String
    :)++nice的缩写,@kyle see
    Environ
    返回一个
    变量
    ,它在分配字符串变量时会产生隐式转换,因此应该首选返回
    Environ$
    函数的字符串。另外,硬编码
    C:\Users`不是一个好主意(如果操作系统安装在D:drive上怎么办?)。参见[Om3r的答案](http://stackoverflow.com/a/39089389/1188513)它使用
    USERPROFILE`变量,返回当前用户profile.Ugh的正确驱动器和位置。很抱歉,我完全弄乱了背景标记的格式。。。而且注意得太晚了:(
    Public Sub EnsureDesktopFolderExists(ByVal folderName As String)
        Dim path As String
        path = Environ$("USERPROFILE") & "\Desktop\" & folderName
        If Len(Dir(path, vbDirectory)) = 0 Then MkDir path
    End Sub