[三流君] −−>
[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系の→[掲示板]←を覗く、質問を書き込む
評価・感想
ページフッター(リンクや広告など)
[三流君(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)から検索する
書籍の購入
Webだけじゃさすがに勉強しきれないので、プログラミング関係の書籍も読んでみては??
コンピュータ書籍の発送がハヤイ専門店
コンピュータの本・専門店
|
※種類が豊富で探し易いです。※在庫ありが48時間以内発送が急ぎで資料や書籍がほしい時、とても助かります。
お奨め本の目次を見るだけでも勉強になったり
|
amazon.co.jpでキーワード別チェック
下記、私が設定したキーワードですが、こんな感じで資料や書籍を探ってみては?
[VBA全体を把握する] -- やはり全体をさらっと見たいですよね。
[SQL関連でDB力UP] -- システムはデータベース設計が重要
[ADO接続を探る] -- VBAなのでADO接続を押さえておく
[Windows APIを探る] -- さらにAPIになて知ってれば強力だ!
[.NETを探る] -- と言っても時代は.NETに流れてるし
プログラミング以外でも知りたいことは多くって、
[人間関係] -- で、客先・上司、まわりに気を使い。
[プログラマーの自己啓発] -- プログラムだけじゃなくいろいろと向上したいよ
[コーチング・育成] -- 先輩になったら後輩(部下)の面倒をみてね。
そんなこんなでプログラマーっていろいろと大変なんだってば・・・