参照設定のお話 オブジェクトの作成 フォルダーの選択を解説

[VBA系メニューへ] [質問掲示板] [バックナンバー目次]





こんにちは、三流プログラマーKen3です。

今回は、
参照設定のお話を少し、
軽く書きたいと思います。

普通に使用しているとあまり関係無いので、
へぇ〜、そうなんだぁ程度に、気楽に読んでください。

昔、愚痴系で書いてた(はじめはVBAもここでやってた)
[Dim objExcel As New Excel.Application を後輩に教わる]
http://www.ken3.org/backno/backno_guchi06.html#26 ←解説(実力と年齢関係ない)
http://www.ken3.org/backno/hosoku/026/index.html  ←画像付き
と
参照設定のエラー、
<Access97 標準関数Midなどが使えない>
http://www.ken3.org/backno/hosoku/e032/index.html
もヨロシクです。

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

AccessからExcelのApplication.GetOpenFilenameを使用して、
ファイル名を取得する解説を
No.47 Excel Application.GetOpenFilenameでファイル名取得
http://www.ken3.org/backno/backno_vba10.html#47
でやりました。
サンプルファイルは、
http://www.ken3.org/vba/lzh/vba047.lzh
にtest047-book.xls, db047.mdbが保存されています。
(Excel97,Access97)

ポイントは、
CreateObject("Excel.Application")
で、頼もしいExcel君を参照して、
---
Private Sub btnExcelを開く_Click()

    Dim oApp As Object
    Set oApp = CreateObject("Excel.Application")
    oApp.Visible = True
    oApp.UserControl = True

    Dim strFNAME As String  'ファイル名
    strFNAME = oApp.Application.GetOpenFilename("画像 ,*.jpg; *.gif; *.bmp")
    MsgBox "選択されたファイル名は" & strFNAME

End Sub
---
Application.GetOpenFilename を使っただけでした。

読者より、下記のメールをいただく(しょうもさんどうもです)

In message "ファイル名を取りたくて",
しょうもさん wrote...
 >[VBAで楽しくプログラミング No.047]
 ><Excel Application.GetOpenFilenameでファイル名取得>について
 >
 >ご指摘の通りExcelのGetOpenFilename メソッドって便利ですよね。
 >私はWordを使っている時間の方が長いのですがWordの組み込みダイアログ
 >は正直使いにくいです。
 >
 >ChDrive "C"
 >ChDir "C:\My Documents"
 >Dialogs(wdDialogFileOpen).Display
 >
 >なんてしても、反映されません。
 >いちいち
 >
 >Options.DefaultFilePath(wdDocumentsPath) = "C:\My Documents"
 >
 >などと既定フォルダの変更をしないといけないのです。
 >
 >そこでちょっと前までWord2000使っていたときはExcelを呼び出して
 >GetOpenFilename メソッド使っていたのですけれど
 >Office XP にしてからは、FileDialog オブジェクトを使うようにしています。
 >
 >「FileDialog オブジェクトの使用」
 >http://www.microsoft.com/japan/msdn/officedev/officexp/odc_filedlgobjs.asp
 >
 >Accessで使えるのかどうかは未確認です。
 >当方のOutlookではエラーが発生します。
 >
 >あと、フォルダの選択だけでしたらShellバージョンにもよりますが
 >Dir 関数使ってファイルを総当りするときはShell32使うことが多いです。
 >
 >「Microsoft Shell Controls And Automation」参照設定で
 >
 >    Dim objShell As New Shell
 >    Dim objFolder As Shell32.Folder
 >    Const strTitle = "フォルダを選択してください。"
 >    'フォルダー参照に設定
 >    Const lngRef = &H1
 >    'ルートフォルダーをデスクトップに設定
 >    '5でMy Documents、6でFavoritesなど
 >    Const fldRoot = &H0
 >    
 >    Set objFolder = _
 >            objShell.BrowseForFolder(0, _
 >                strTitle, lngRef, fldRoot)
 >    Set objShell = Nothing
 >    If objFolder Is Nothing Then Exit Sub
 >    Debug.Print objFolder.Self.Path
---

ワードのVBAかぁ、アンケートの中にも少数意見でやってよとあったなぁ。
っと、今回は「FileDialog オブジェクトの使用」も気になるけど、
「Microsoft Shell Controls And Automation」
にチャレンジしてみたいと思います。

/*
 * 2.まず、参照設定を設定する (フォルダー選択のテスト)
*/

送ってもらった、ソースを元に作成するとして(おいおい、コピーだろ)
まず、参照設定をいじります。

「Microsoft Shell Controls And Automation」
を
設定したいので、

Excel を 開いて、Alt+F11でVBAのエディターを開いてと、
(私のメイン環境、Win98 Excel97で実行)
ツールの参照設定を選択、
  ←メニューから参照設定を選択

「Microsoft Shell Controls And Automation」
を探して、チェックを付けます。
  ←レのチェックをつける

作成したテストプログラム
( http://www.ken3.org/vba/lzh/folder-test.lzh に folder-test.xls 保存 )

Sub test()

    Dim objShell As New Shell
    Dim objFolder As Shell32.Folder
    Const strTitle = "フォルダを選択してください。"
    'フォルダー参照に設定
    Const lngRef = &H1
    'ルートフォルダーをデスクトップに設定
    '5でMy Documents、6でFavoritesなど
    Const fldRoot = &H0
    
    Set objFolder = _
            objShell.BrowseForFolder(0, _
                strTitle, lngRef, fldRoot)
    Set objShell = Nothing
    
    'フォルダー名を取出す
    Dim strMSG
    If objFolder Is Nothing Then 'キャンセルチェック
        strMSG = "キャンセル押しやがって、えっキャンセル押されたらのテスト?"
    Else
        If objFolder.ParentFolder Is Nothing Then
            strMSG = "選択されたのは[ルート(デスクトップ)]です"
        Else
            strMSG = "選択されたのは[" & objFolder.Items.Item.Path & "]です"
        End If
    End If
    MsgBox strMSG

End Sub

テストで、実行してと、OKできました。やりぃ。(と喜ぶKen3)
  ←実行時画面
  ←実行結果msgbox

チョット、アンタ今日、解説しないつもり?
あっ、そっか(笑)

えっと、まず、参照設定が必要な理由ですが、
    Dim objShell  As New Shell
    Dim objFolder As Shell32.Folder
と、ここで、
「Microsoft Shell Controls And Automation」
で定義されているオブジェクトを使用するためだったんです。

さっぱり、何言ってんだかわからないんだけど?
う〜ん、なんて説明しようかなぁ。。。

/*
 * 3.As New でオブジェクトの作成
*/

今日は、キレがないから、昔の自分に頼ってと(最近多いよね他所に飛ばすの)

昔、愚痴系で書いてた(はじめはVBAもここでやってた)
[Dim objExcel As New Excel.Application を後輩に教わる]
http://www.ken3.org/backno/backno_guchi06.html#26 ←解説(実力と年齢関係ない)
http://www.ken3.org/backno/hosoku/026/index.html  ←画像付き
を見てもらうと、
AccessでExcelのオブジェクトを参照設定して、
Dim objExcel As New Excel.Application
と、オブジェクト変数を定義して使用してます。

このように書くと、
Dim objExcel As Object
Set objExcel = CreateObject("Excel.Application")
とやらなくて済むのと、
oApp.とピリオドを打った時点でオブジェクトのメンバーが自動に表示されます。
 ←参考画像

なぜか、それは、オブジェクトを参照設定後に、
Dim objExcel As New Excel.Application
この変数objExcelはExcel.Application型(オブジェクト)ですよ
と指定してるからなんです。
*言われてみると普通のような、でもなれないと?だよね。

/*
 * 4.環境の違いで参照オブジェクトが無い時、や正しく参照されない時
*/

参照設定、便利なんだけど、注意事項がひとつ
当たり前の話、
開発したマシーンで
オブジェクトを参照設定、
Dim objExcel As New Excel.Application
でオブジェクト参照する変数を作成。
なんてやっても、
実行マシーンにExcelが入ってないと使えません。
*普通の話か(笑)

あと、あるのが、バージョンの違いで、参照できなかったりする場合があります。
Office2000が出た時、流行ったトラブルはチョット違うけど、
参照不可のエラーで動かないパターンでした。

<Access97 標準関数Midなどが使えない>
http://www.ken3.org/backno/hosoku/e032/index.html
で、設定エラーについて軽く書いてます(また、飛ばすの?好きだねぇ)

しょうもさんも書いてますが、
 >あと、フォルダの選択だけでしたらShellバージョンにもよりますが
 >Dir 関数使ってファイルを総当りするときはShell32使うことが多いです。
---
例えば、OSのバージョンによって、
Shellバージョン、オブジェクトが微妙に変化していて
ローカルバージョンに依存したプロパティやメソッド使っていると、
動かない場合があります。

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

今回は、
・参照設定の話
・As New XXXXXX の宣言
・参照不可などのトラブルについて
でした。

なんか、フォルダー選択で発行したほうが正しいタイトルみたいだけど(笑)
作成したフォルダーのテストプログラム
http://www.ken3.org/vba/lzh/folder-test.lzh
にfolder-test.xlsで保存してます。
サンプルはExcelですが、
Access,Word(そろそろ1つは書きたいね)のVBAから使えると思います。
*参照設定だけ忘れないでね(注意事項も)

何か素朴な疑問などあったら、メール、掲示板に気軽に書いてください。

拾い読みして、
1つでも何かの参考となれば幸いです。

Excel/Access大好き、三流プログラマーKen3でした。

質問・感想を送る

作者に感想・質問/要望を送る(気軽に質問・感想書いてください)
あなたのお名前(ニックネーム) さん

作者からの返信は、 不用 E-mail で受信したい

三流君のHP主な飛び先

VBA系のメルマガで書いた解説を項目ごとにまとめてます

[VBAでAccessを操作(一般)]
[VBAでAccessのレポートを操作]
[VBAでAccessのUserForm/サブフォームを操作]
[VBA Access から Excel 連携]

[VBA でExcel オブジェクト/プロパティ/メソッド/一般]
[VBA でExcel UserForm(ユーザーフォーム)を操作する]
[VBA ExcelからAccessを操作する]

[VBA Outlookの操作]
[VBA IEの操作]
[VBA テキストファイル(*.txt,*.html,*.csv)の操作]
[VBA標準関数関係とその他解説]

ASP系の解説を項目ごとにまとめてみました

[ASP Form等を使用したデータのやり取り]
[ASP その他処理サンプル]
[ASP テキストファイル処理]
[ASP VBScript関数関係の説明]
[ASP ADOでMdbファイルを使う]
[ASP ADOでExcelと接続してみた]

分類別

[アクセスランキング] [サイトマップ] [リンク先・相互リンク先など]
VBAで楽しくプログラミング 掲示板 バックナンバー メルマガ登録と解除
コンビニのオモテとウラ話 掲示板 バックナンバー メルマガ登録と解除
ASPで遊ぶ、失敗する 掲示板 バックナンバー メルマガ登録と解除
三流プログラマー 業務の愚痴 掲示板 バックナンバー メルマガ登録と解除
初心者にやさしいプログラム 掲示板 バックナンバー メルマガ登録と解除
ネットで稼ぐ本音と失敗談 掲示板 バックナンバー
www.ken3.org(サイト内)から Google を利用して、

Ken3の日記(weblog) -- [広告・副収入系] [プログラマー業務の愚痴] [VBA系の話題] [ASP系の話題] [コンビニ系ネタ] [その他]

その他、宣伝ページです

・[ アンケート/ポイント]などで月500円を必死に稼いでます(笑)
・[ SOHO/在宅プログラマー/派遣]の話題、Webエントリー後の反応など
・[ ネットで小金を稼げるか?]実験中だが成果は無し
※あとは、[パソコン関係の書籍]や[ゲームソフト]、 [パソコンパーツ] をバナーから売ろうとするけど、
 なかなかうまくはいかないよね(笑)

楽天の商品売れ筋ランキング紹介ページ

ドリンク

[コーヒー・ココア] [ソフトドリンク] [ハーブティー] [ビール・地ビール] [ワイン] [中国茶] [中国酒] [日本茶] [日本酒] [水・ミネラルウォーター] [洋酒] [焼酎] [紅茶] [その他(ドリンク)]

グルメ・フード

[キムチ・漬け物] [チーズ・乳製品] [パン] [フルーツ・野菜] [] [惣菜・食材] [中華料理・惣菜] [和風料理・惣菜] [洋風料理・惣菜] [水産物・水産加工品] [] [肉・肉加工品] [菓子] [調味料] [麺類] [その他(フード)]

ファッション

[インナーウェア・ナイトウェア] -- [ショーツ] [ブラジャー] [ストッキング] [キャミソール] [スリップ] [ガードル] [補正下着] [マタニティ用下着] [ナイトウェア]
[カジュアル] -- [Tシャツ] [シャツ] [カットソー] [セーター] [カーディガン] [ジーンズ] [パンツ] [ジャンバー・ブルゾン] [スカート]
[レディース・婦人服] -- [スーツ] [ワンピース] [スカート] [パンツ] [ブラウス] [フォーマル]
[ジュエリー・アクセサリー] -- [指輪] [ネックレス] [ペンダント] [イヤリング] [ピアス] [ブレスレット] [ジュエリーボックス・ケア用品]
[香水] -- [シャネル] [クリスチャン・ディオール] [ジバンシー] [グッチ] [ブルガリ]
[メンズ・紳士服] [メンズ-スーツ] [メンズ-シャツ] [メンズ-トランクス] [メンズ-ブリーフ] [メンズ-ボクサーパンツ] [メンズ-Tシャツ] [トレーナー・パーカー] [メンズ-ポロシャツ] [メンズ-カットソー] [メンズ-セーター] [メンズ-カーディガン] [メンズ-ジーンズ] [メンズ-ジャンバー・ブルゾン]
[バッグ] [] [ベビー・キッズ・マタニティ] [和服] [眼鏡・サングラス] [コンタクト・コンタクト用品] [腕時計] [雑貨・小物] [スイムウェア]

パソコン・家電・AV

[オフィス・サプライ] [コンパクトカメラ] [デジタルカメラ] [ビデオカメラ] [一眼レフカメラ] [ソフトウェア] [パソコン・コンピュータ] [デスクトップパソコン] [ノートパソコン] [モバイル・携帯電話] [周辺機器パーツ] [スキャナ] [プリンタ] [家電・AV] [エアコン・空気清浄機] [オーディオ] [冷蔵庫・冷凍庫] [掃除機] [映像機器]

生活・インテリア

[家具・インテリア] [手芸・クラフト] [文具] [日曜大工・作業用品] [日用品・生活雑貨] [食器・調理用具]

ヘルス・ビューティ

[ダイエット] [健康用品] [サプリメント] [医薬品] [福祉・介護] [美容・化粧品] [スキンケア] [メイクアップ]

スポーツ・アウトドア

[アウトドア] [ウィンタースポーツ] [サッカー] [ストリート系スポーツ] [テニス] [トレーニング] [フィッシング] [マリンスポーツ] [自転車] [野球] [スポーツグッズ] [格闘技グッズ] [その他スポーツ・用品]

フラワー・ガーデン

[エクステリア] [ガーデニング] [フラワー・花] [植木] [観葉植物] [造花]

ホビー・ペット・コレクション

[アート・美術品] [おもちゃ] [ペット・ペットグッズ] [占い・開運] [囲碁・将棋] [楽器] [趣味・コレクターグッズ]

CD・DVD・ゲーム

[CD・カセット] [DVD・LDソフト] [アニメ(DVD・LD)] [ミュージック(DVD・LD)] [洋画] [邦画] [テレビゲーム] [ビデオ] [音楽CD] [R&B] [アニメソング] [ジャズ] [ダンス&ソウル] [ヒップホップ] [ロック・ポップス(洋)] [ロック・ポップス(邦)]

車・バイク

[カー用品] [カーナビ] [カーオーディオ] [タイヤ・ホイール] [洗車用品] [バイク]

ゴルフ

[ゴルフ・クラブ] [ゴルフ・シューズ] [ゴルフ・ウェア] [ゴルフ・バッグ] [ゴルフ・ボール] [ゴルフ・小物] [ゴルフ・トレーニング用具]