我在Access中有VBA功能,它应该根据我传递的字符串变量返回特殊文件夹(MyDocuments,Desktop等)的路径。但是,我总是得到公共桌面" C:\ Users \ Public \ Desktop"而不是我传入的内容。这是功能代码:
Function SpecialFolderPath(whichFolder As String) As String
Debug.Print whichFolder
Dim objWSHShell As Object
Dim strSpecialFolderPath
Set objWSHShell = CreateObject("WScript.Shell")
SpecialFolderPath = objWSHShell.SpecialFolders(whichFolder)
Debug.Print SpecialFolderPath
Set objWSHShell = Nothing
Exit Function
ErrorHandler:
MsgBox "Error finding " & strSpecialFolder, vbCritical + vbOKOnly, "Error"
End Function
所以,无论我传递给whichFolder
的是什么,我总是得到C:\Users\Public\Desktop
。我怎么能纠正这个?
编辑:
我通过以下方式调用此功能:
- DoCmd.OutputTo acOutputQuery, "BoxForecasting_Jobs", "ExcelWorkbook(*.xlsx)", SpecialFolderPath("MyDocuments") & "\BoxForecastByJobs.xlsx", False, "", , acExportQualityPrint
- Set oWB = oXL.Workbooks.Open(SpecialFolderPath("MyDocuments") & "\BoxForecastByJobs.xlsx")
答案 0 :(得分:2)
这是一个集合。使用for循环查看其中的内容。
Set wshshell = CreateObject("WScript.Shell")
For each thing in wshshell.SpecialFolders
wscript.echo thing
Next
这些是它接受的名称。
AllUsersDesktop
AllUsersStartMenu
AllUsersPrograms
AllUsersStartup
桌面
收藏夹
字体
我的文档
NETHOOD
PRINTHOOD
程序
最近
的SendTo
的StartMenu
启动
模板
答案 1 :(得分:1)
更改此行:
SpecialFolderPath = objWSHShell.SpecialFolders(whichFolder)
为:
SpecialFolderPath = objWSHShell.SpecialFolders("" & whichFolder & "")
我稍微调整了你的代码。添加了WhichFolder = "Templates"
,将其设为sub并通过msgbox返回结果。
我的最终结果: