2015-01-26 155 views
0

我在Access中有VBA函數,它應該根據我傳遞給它的字符串變量返回特殊文件夾(MyDocuments,Desktop等)的路徑。不過,我總是得到公衆的桌面上。「C:\用戶\公用\桌面」,而不是什麼我通過在這裏是功能代碼:忽略參數的函數?

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

經由'Debug.Print()'被印刷的正確路徑? – 2015-01-26 19:47:01

+1

我正在測試您的代碼。與你一樣獲得同樣的回報。 – 2015-01-26 19:47:46

+0

@LynnCrumbling - 不,Debig.Print()顯示相同的錯誤值。 – MAW74656 2015-01-26 19:48:49

回答

1

改變這一行:

SpecialFolderPath = objWSHShell.SpecialFolders(whichFolder) 

到:

SpecialFolderPath = objWSHShell.SpecialFolders("" & whichFolder & "") 

我已經調整了一下你的代碼。添加WhichFolder = "Templates",使其成爲一個子,並通過msgbox返回結果。

我的最終結果是: enter image description here

+0

奧克,所以工作....但爲什麼? – MAW74656 2015-01-26 19:59:11

+1

你正在給該函數提供變量的名稱而不是文字。 – 2015-01-26 20:06:04

+0

你的改變不會影響我的任何事情。 'objWSHShell.SpecialFolders(whichFolder)'''whichFolder =「MyDocuments」'與'objWSHShell.SpecialFolders(「MyDocuments」)的結果相同' – Brad 2015-01-26 21:06:49

2

這是一個集合。查看每個循環中使用a的內容。

Set wshshell = CreateObject("WScript.Shell") 

For each thing in wshshell.SpecialFolders 
    wscript.echo thing 
Next 

這些是它接受的名稱。

  • AllUsersDesktop

    AllUsersStartMenu

    AllUsersPrograms

    AllUsersStartup

    桌面

    收藏

    字體

    我的文檔

    NETHOOD

    PRINTHOOD

    程序

    最近

    的SendTo

    的StartMenu

    啓動

    模板