这个特殊文件夹实际上不应该用于存储用户文档的原因有很多。微软甚至第 3 方已经开始将其用于完全不同的目的。根据安装的应用程序,您甚至可以在这里找到 DLL。
如果您误导用户使用此文件夹,他们可能会删除对某些其他程序的操作至关重要的文件。
但是,如果您坚持这样做,请注意,通过文字字符串值引用文件夹是不安全的,因为它可能会根据用户的语言设置出现在不同的别名下。它甚至可能通过行政行动转移到其他地方。
也没有必要屈从于使用非 COM ShellExecute 入口点,至少可以追溯到 Shell32.dll 的 5.0 版。
这应该至少从 WinXP 向前工作:
Option Explicit
Private Const ssfCOMMONDOCUMENTS As Long = &H2E
Private Enum SHOW_WINDOW
SW_HIDE = 0
SW_SHOWNORMAL = 1
SW_SHOWMINIMIZED = 2
SW_SHOWMAXIMIZED = 3
SW_SHOWNOACTIVATE = 4
SW_SHOW = 5
SW_SHOWMINNOACTIVE = 7
SW_SHOWDEFAULT = 10
End Enum
Private Shell As Object
Private Path As String
Private Sub File1_Click()
On Error Resume Next
'Works on XP through Vista, fails on Win7:
'Shell.ShellExecute File1.FileName, , Path, "open", SW_SHOWNORMAL
'Works on XP through Win7:
Shell.ShellExecute Path & "\" & File1.FileName, , , "open", SW_SHOWNORMAL
If Err Then
MsgBox "Error " & CStr(Err.Number) & " " & Err.Description
End If
End Sub
Private Sub Form_Load()
Set Shell = CreateObject("Shell.Application")
With Shell.NameSpace(ssfCOMMONDOCUMENTS).Self
Path = .Path
End With
With File1
.Pattern = "*.doc"
.Path = Path
End With
End Sub