Microsoft 製品に組み込まれている Visual Basic の実装。
CreateObject("WScript.Shell").SpecialFolders("MyDocuments")について
“「My Documents」へ出力するとき”となってたので、保存先をマイドキュメントにされたいのかなと思っていました
マイドキュメントのパスは、
XPだと、C:\Documents and Settings\ユーザ名\My Documents
Vista/Win7なら、C:\Users\ユーザ名\Documents
という感じに、OS毎もしくはOSのログインユーザ毎にフォルダパスが違うことになる。
なので、Windows Script Hostを使ってマイドキュメントの実際のパスを取得しています。
CreateObject("WScript.Shell").SpecialFolders("MyDocuments")でその時ログインしているユーザのマイドキュメントのパスが取得できます。
マイドキュメントではなく保存先はどのユーザでも常に固定ということであればこの仕組みは必要ない。
特殊フォルダを取得する VBA のキーワードでGoogle先生とかBingにいさんに聞いてみるといろいろ教えてくれるでしょう。
で、例にとって書いてみます。
Function OutputToRTF()
DoCmd.OutputTo acOutputQuery, "2010年入社社員", acFormatRTF, "C:\MyDocuments\社員\2010年入社.rtf"
End Function
これは、C:\MyDocuments\社員というフォルダに2010年入社.rtfが出力される。
Function OutputToRTF()
DoCmd.OutputTo acOutputQuery, "2010年入社社員", acFormatRTF, CreateObject("WScript.Shell").SpecialFolders("MyDocuments") & "\2010年入社.rtf"
End Function
これは、XPだと、C:\Documents and Settings\ユーザ名\My Documentsに2010年入社.rtfが出力される。
OutputToRTFというのは、私が勝手につけた関数名です。なのでご自由にどうぞ。ただし、すでに存在する関数名にしないようにします。
標準モジュールを押下しVBE上に新規標準モジュールを作成
コードを入力し、Moduleを保存する。
マクロエディタ:プロシージャの実行マクロアクションを選択し、...ボタンで式ビルダを起動したところ。直接タイプしても構わない。
コマンドボタンクリック時に実行させるなら