この特別なフォルダを実際にユーザー ドキュメントの保存に使用してはならない理由はいくつかあります。マイクロソフトやサード パーティでさえ、まったく異なる目的で使用し始めています。インストールされているアプリケーションによっては、ここに DLL が含まれている場合もあります。
ユーザーにこのフォルダをいじるように誤解させると、他のプログラムの動作にとって重要なファイルが削除される可能性があります。
ただし、これを行うことを主張する場合は、ユーザーの言語設定に基づいてさまざまなエイリアスで表示される可能性があるため、リテラル文字列値でフォルダーを参照するのは安全ではないことに注意してください。管理アクションによって別の場所に移動することさえあります。
また、少なくとも Shell32.dll のバージョン 5.0 までさかのぼると、COM 以外の ShellExecute エントリポイントを使用する必要はありませんでした。
これは、少なくとも 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