功能忽略参数?

时间:2015-01-26 19:35:46

标签: vba ms-access access-vba

我在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")

2 个答案:

答案 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返回结果。

我的最终结果: enter image description here