[三流君] −−> [VBAで楽しく] −−> [バックナンバー一覧]
−−> No.114 VBA で WScript.ShellのSpecialFoldersプロパティを使ってみた

VBA で WScript.ShellのSpecialFoldersプロパティを使ってみた

メルマガ発行内容

<VBA で WScript.ShellのSpecialFoldersプロパティを使ってみた>

どうも、三流プログラマーのKen3です。 今回は、 CreateObject("WScript.Shell") と、スクリプトのシェルを作成して、 SpecialFoldersプロパティを使って、 デスクトップの位置を取得してみたいと思います

/* * 1.今回のキッカケ */

フォルダーの選択処理を前に作成しました。 詳細は、フォルダーを選択してファイルリストを作成する http://www.ken3.org/vba/vba-folder.html を見てください。 'フォルダー選択ダイアログを表示して、リターン値で選択場所を返す 'キャンセルの時は文字列キャンセル、 'デスクトップの時は文字列を返す
Function getFOLDER() As String

    Dim objShell  As Object 'Shell
    Dim objFolder As Object 'Shell32.Folder
    Const strTitle = "フォルダを選択してください。"

    'シェルのオブジェクトを作成する
    Set objShell = CreateObject("Shell.Application")

    'フォルダー参照に設定
    Const lngRef = &H1
    'ルートフォルダーをデスクトップに設定
    '5でMy Documents、6でFavoritesなど
    Const fldRoot = &H0
    
    Set objFolder = _
            objShell.BrowseForFolder(0, _
                strTitle, lngRef, fldRoot)
    
    'フォルダー名を取出し、リターン値をセット
    If objFolder Is Nothing Then 'キャンセルチェック
        getFOLDER = "キャンセル"  'リターン値にキャンセルをセット
    Else
        If objFolder.ParentFolder Is Nothing Then
            getFOLDER = "デスクトップ"
        Else
            getFOLDER = objFolder.Items.Item.Path 'パスをセットする
        End If
    End If

    Set objFolder = Nothing
    Set objShell = Nothing

End Function
と、一番上のデスクトップを選択されたら、 文字をそのまま返してました。 今回は、ログインしているユーザー、 デスクトップの場所を探す方法を探ってみます。

/* * 2.いつもの調査方法・・じゃなくって、たまたま見つけました */

いつもなら、ここで、XXXを条件に検索しました。 で、英語読みながら見つけましたと武勇伝を語るんだけど、 >今回は、ログインしているユーザー、 >デスクトップの場所を探す方法を探ってみます。 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ スミマセン、ウソついてました(笑) 探ったんじゃなくて、 たまたま、隣のASP系のメルマガで、 VBScriptの関数の調査してたら目に止まりました(オイオイ、偶然かよ・・) ここ、 http://www.microsoft.com/japan/msdn/library/ja/script56/html/wsprospecialfolders.asp Windows Script Host の説明ページなのですが(日本語なので安心) SpecialFolders プロパティなんて説明があります。 ^^^^^^^^^^^^^^ 説明を見ると、 object.SpecialFolders(objWshSpecialFolders) 引数 object WshShell オブジェクトです。 objWshSpecialFolders 取得する特定フォルダの名前です。 解説 WshSpecialFolders オブジェクトはコレクションです。このオブジェクトには、 デスクトップのフォルダ、[スタート] メニューのフォルダ、個人用ドキュメント のフォルダなど、Windows の特定フォルダ セット全体が格納されます。目的の特定 フォルダを取得するには、フォルダ名をコレクション内のインデックスとして使用 します。要求したフォルダ (strFolderName) を使用できない場合は、NULL が返さ れます。たとえば、Windows 95 では、AllUsersDesktop フォルダがないため、 strFolderName が AllUsersDesktop と等しい場合に NULL が返されます。 使用できる特定フォルダは次のとおりです。 AllUsersDesktop AllUsersStartMenu AllUsersPrograms AllUsersStartup Desktop Favorites Fonts MyDocuments NetHood PrintHood Programs Recent SendTo StartMenu Startup Templates なんて、説明を、偶然発見しました。 いろいろな特殊フォルダーの位置を知ることができそうです。 -- 余談 -- 自分で調べごとを行うと? 頭のスミにデスクトップの場所の求め方知りたい・・とあったのか、 本来の調べごとをほったらかして、テストしてみました。 人に聞くばかりじゃなく、自分で調べると、 ~~~~~~~~~~~~~~~~~~~~~~ 調査の過程で違う知識が吸収できたりします。 (たまたまの出来事を偉そうに書いてますが、  そんな時・偶然やラッキーもあるんだぁ程度に思ってください) 本来の目的から脱線して、いろいろと違う場所を見るのも、ありですよキット。 えっ、脱線して、ネットでH系ページを会社から見るのも?ありかって? う〜ん・・・どうなんでしょう。 脱線するなら、 http://www.ken3.org/etc/okozukai.html の、ネットで小金稼ぎ、ヨロシクデス。 せっかく途中までエエ話だったのに、広告で閉めカヨ。。。 まぁ、三流君らしいけど。

/* * 3.簡単なテストプログラム */

話を戻して、簡単なテストプログラムを作成してみます。
Sub test()

    Dim objWShell As Object 'WScript.Shell
    Dim strDesktopPath  As String 'デスクトップの場所

    'Windows Script Hostのオブジェクトを作成する
    Set objWShell = CreateObject("WScript.Shell")

    'スペシャルフォルダ(特殊フォルダ)の場所を返す
    strDesktopPath = objWShell.SpecialFolders("Desktop")

    '確認メッセージの表示
    MsgBox "DesktopのPathは[" & strDesktopPath & "]です"

End Sub
ポイントは、 ~~~~~~~~~~~~ Set objWShell = CreateObject("WScript.Shell") で、 Windows Script Hostのオブジェクトを作成してます。 これは、.SpecialFoldersプロパティのオブジェクトだからです。 あとは、普通に"Desktop"とデスクトップを指定して、 'スペシャルフォルダ(特殊フォルダ)の場所を返す strDesktopPath = objWShell.SpecialFolders("Desktop") と、 .SpecialFoldersプロパティの値をもらってます。 わかってしまえば、簡単でした。 ※APIとか使うのかと思って、デスクトップの取得方法、  棚上げにしてたけど、こんなに簡単なら探せばよかった・・・

/* * 4.おまけ */

関数に組み込んでみます。 'フォルダー選択ダイアログを表示して、リターン値で選択場所を返す 'キャンセルの時は文字列""(空文字列)を返す
Function getFOLDER() As String

    Dim objShell  As Object 'Shell
    Dim objFolder As Object 'Shell32.Folder
    Const strTitle = "フォルダを選択してください。"

    'シェルのオブジェクトを作成する
    Set objShell = CreateObject("Shell.Application")

    'フォルダー参照に設定
    Const lngRef = &H1
    'ルートフォルダーをデスクトップに設定
    '5でMy Documents、6でFavoritesなど
    Const fldRoot = &H0

    Set objFolder = _
            objShell.BrowseForFolder(0, _
                strTitle, lngRef, fldRoot)
    
    'フォルダー名を取出し、リターン値をセット
    If objFolder Is Nothing Then 'キャンセルチェック
        getFOLDER = ""  'リターン値に""空文字列をセット
    Else
        If objFolder.ParentFolder Is Nothing Then  '下位を未選択デスクトップ?
            Dim objWShell As Object 'WScript.Shell
            'シェルのオブジェクトを作成する
            Set objWShell = CreateObject("WScript.Shell")
            'デスクトップの場所を返す
            getFOLDER = objWShell.SpecialFolders("Desktop")
            'オブジェクトの開放
            Set objWShell = Nothing
        Else
            getFOLDER = objFolder.Items.Item.Path 'パスをセットする
        End If
    End If

    Set objFolder = Nothing
    Set objShell = Nothing

End Function
Sub 選択テスト()

    Dim strWORK As String
    
    strWORK = getFOLDER()  'フォルダーの選択関数を呼ぶ
    
    If strWORK = "" Then   '空文字””でキャンセルのチェック
        MsgBox "キャンセル押されたよ"
    Else
        MsgBox "選択されたのは" & strWORK & "です"
    End If

End Sub
そんなに変わってないけど、 フォルダーの選択関数としては、少しは形になったかなぁ。

/* * 5.終わりの挨拶 */

今回は、たまたま、 別の調べごとでデスクトップの位置を返す方法を見かけたので WShell.SpecialFolders("Desktop") を使用してみました。 みなさんも、たまには、脱線した調べごとをしてみては? 新雪を行くか、それとも、人の跡をなぞるか ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 使用したこと無い、ツール、言語、、、 社内でダレもやったこと無い作業をやる時、 ワクワクしますよね? えっ、やりたくない、、、? スキーで新雪を行くか、それとも、人の跡をなぞるか みたいなものですね。。。 *スキー・スノボやらない運動音痴に言われたくないって?  あっ、ソリならやったことアルよ、、、 道に迷って、道を覚えるみたいで、 失敗しながら自分の道を見つけていくのが、 いいのでしょう でも、仕事でやるとなると、なんか、、、臆病になって・・・・ 回り道でも、目的地につけば、よしと思って、、、 何かの参考となれば幸いです。 Excel/Access大好き、三流プログラマーKen3でした。

フィードバック

VBA系の→[掲示板]←を覗く、質問を書き込む

評価・感想

No.114を読んだ満足度(評価)は?
5満足(参考になった)
4まぁまぁ(一部参考になった)
3普通(どちらとも言えない)
2なんかなぁ(期待と違った)
1不満(読んで損した気分)
作者に感想・質問を送る場合は下記に気軽に書いてください
あなたのお名前(ニックネーム) さん

作者からの返信は、 不用 E-mail で受信したい
*質問・感想はメルマガで紹介する場合があります

ページフッター(リンクや広告など)


[三流君(TOP ken3.org へ戻る)]
-- [VBA系TOPへ]
---- [VBA系バックナンバー目次へ移動]
------ [VBAでIEを操作 CreateObject("InternetExplorer.application")]・・・実は当店一番人気、VBAでIEを操作するサンプルです
------ [VBAでOutlookの操作 CreateObject("Outlook.Application")]・・・Outlookを使い、メール関係の処理です
------ [Access から Excel 連携 CreateObject("Excel.Application")]・・・人気のAccessからExcelへデータ書き出しなどです
------ [AccessのUserForm/サブフォームを操作]・・・アクセスでフォームを使ったサンプルです
------ [Accessのレポートを操作]・・・レポートを操作してみました
------ [Access クエリー関係やその他関数]・・・あまりまとまってませんが、スポット的な単体関数の解説です
------ [Excel UserForm(ユーザーフォーム)を操作する]・・・エクセルでユーザーフォームを作成して入力などを行ってます
------ [ExcelからAccessを操作する]・・・ExcelからAccessのマクロを起動してみました、
------ [Excel関係 関数、その他]・・・その他Excel関係です
------ [VBAでテキストファイル(*.txt,*.html,*.csv)の操作]・・・テキストファイルを使ったサンプルです
------ [VBA 標準関数関係とその他解説]・・・その他、グダグタ解説してます


広告
-- [通販系の売れ筋広告へ] ←主に楽天やAmazonのランキングです
blog
-- [三流君の作業日記] ← 日々の作業を少々
-- [通販あしあと] ← 通販ページの足跡を一覧で羅列

情報を探す

情報を探すならGoogleかな?

↓Web全体、サポート情報(support.microsoft.com)や三流君VBA(ken3.org)から検索する
Google
Web www.ken3.org
www.microsoft.com support.microsoft.com

あとは、項目別にMSでお勉強かな?
◆ マイクロソフト サイトの歩き方
◇ How-To インデックス
◇ FAQ インデックス
◇ スキルレベル別おすすめコンテンツ
◇ テクノロジ マップ
◇ テーマ別技術資料一覧

書籍の購入

Webだけじゃさすがに勉強しきれないので、プログラミング関係の書籍も読んでみては??

コンピュータ書籍の発送がハヤイ専門店

コンピュータの本・専門店
種類が豊富で探し易いです。※在庫ありが48時間以内発送が急ぎで資料や書籍がほしい時、とても助かります。
お奨め本の目次を見るだけでも勉強になったり

amazon.co.jpでキーワード別チェック

下記、私が設定したキーワードですが、こんな感じで資料や書籍を探ってみては?
[VBA全体を把握する] -- やはり全体をさらっと見たいですよね。
[SQL関連でDB力UP] -- システムはデータベース設計が重要
[ADO接続を探る] -- VBAなのでADO接続を押さえておく
[Windows APIを探る] -- さらにAPIになて知ってれば強力だ!
[.NETを探る] -- と言っても時代は.NETに流れてるし
プログラミング以外でも知りたいことは多くって、
[人間関係] -- で、客先・上司、まわりに気を使い。
[プログラマーの自己啓発] -- プログラムだけじゃなくいろいろと向上したいよ
[コーチング・育成] -- 先輩になったら後輩(部下)の面倒をみてね。
そんなこんなでプログラマーっていろいろと大変なんだってば・・・