[三流君] −−> [VBAで楽しく] −−> [バックナンバー一覧]
−−> No.047 Excel Application.GetOpenFilenameでファイル名取得

Excel Application.GetOpenFilenameでファイル名取得

メルマガ発行内容

<Excel Application.GetOpenFilenameでファイル名取得>

こんにちは、三流プログラマーKen3です。 今回は、 ファイル名を取りたくて、 Application.GetOpenFilename を使ってみます。 気楽に読んでください。 サンプルファイルは、 http://www.ken3.org/vba/lzh/vba047.lzh にtest047-book.xls, db047.mdbが保存されています。(Excel97,Access97) /* * 1.みんな好きだねぇ画像処理、デジカメとかスキャナーの普及? */ 画像処理関係が質問のトップかなぁ今。 (みんな内気?で掲示板に書いてくれないけど) デジカメとかスキャナーの普及? でデジタル画像を処理する(処理したい)場面が増えたんでしょうね(と勝手な予測) 下記の質問メールをもらう。 In message "Accessでの画像ファイル処理について", m*****@k*****さん wrote... >画像の保存先を指定したあと、画像リストのテーブルを作成しないで >ファイル名を指定するだけで保存先に見に行かせたいです。 >または >ファイル選択ダイアログを表示させたいですぅ〜。 > ↑ >これだと本格的にVBが必要ですか? --- なるほどね、ファイル名入力じゃなく、選ばせたいのかぁ。 VBが無い環境でできたらやりますか。 *VB使えばなんでもできるってイメージあるのかなぁ?  あっ、逆にVB使わないとなんにも出来ないってイメージかな。 In message "Accessでの画像ファイル処理について", m*****@k*****さん wrote... >それから >あつかましいのですが… >もうひとつ質問がありますです。f(^^; > >フォームの画面を印刷させたいのですが >フォームをメイン+サブで作成しているとメイン画面内容の >フォーム印刷は出来るのですが >サブのデータ内容がプレビューでも表示されず印刷も出来ません。(T◇T) > (メイン+サブ=1枚目のデータは印刷可能) >2枚目以降はサブのデータ内容がついてきません。 >フォーム印刷はメインだけしか無理なのでしょうか? --- レポート作らないで、フォーム画面からの印刷は、そんな感じだと思います。 *読者の皆さんの中で、なにか小技でかわした?とかテクあったら教えてください。 In message "Accessでの画像ファイル処理について", m*****@k*****さん wrote... >以上2点の質問なのですが >回答を頂けると大変うれしいのですが…  >なにとぞ >未熟者(半熟者)ですので >ご教授おねがいいたしますです。m(__)m --- う〜ん、ご教授かぁ、(ネットの世界では、流行語なのかなぁ?) 私の性格を知らない読者ですね(そんなの知ってるわけねぇダロ) ご教授って言葉、嫌いなんだよねナゼカ。 そんなたいした回答できないのもあるけど、 なんかそんなんで持ち上げられて回答するのもねぇ。 処理ができて、質問者がうれしくてお礼のメールは好きだけど、 回答前にそんなにm(__)mと頭下げなくても。。。 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 私宛のメールは、気軽に送ってくださいね。 *あっ、お礼のメールはいらないですよ、  便りの無いのは良い知らせって感じで、問題あったら下さいね。 /* * 2.Excelには、Application.GetOpenFilenameがあります */ Excelには、 Application.GetOpenFilename なんて、いいものがあります。 使い方は簡単で、 Sub test047() Dim strFNAME As String 'ファイル名 strFNAME = Application.GetOpenFilename("画像 ,*.jpg; *.gif; *.bmp") MsgBox "選択されたファイル名は" & strFNAME End Sub ここでは、画像のファイルを取りたいので、 "画像 ,*.jpg; *.gif; *.bmp" と、ファイルの種類を渡しています(省略すると*.*) jpgのみ場合は、"画像 ,*.jpg"でOKです。 カンマの前がタイトル、次がワイルドカード指定となってます。 *複数の時はセミコロンで区切る。 ここで、気になるのが選択しないで、キャンセルを押された時。 文字列Falseが返ってくるみたいです。 /* * 3.Accessに無いので、小細工 */ Excelには、 Application.GetOpenFilename なんて、いいものがあります。 って書いてたよね。 はい。 日本語理解すると、Accessには、いいものは無いの? ええ、残念ながら私が探した範囲では、、、(ホントはあるかも、要チェックです) なので、今回、小細工させていただきます。 AccessからExcelを起動するのは、いろいろとやりました。 In message "[VBAで楽しく No.002] - AccessからExcel出力", /vba/backno/vba002.html で、 Dim oApp As Object Set oApp = CreateObject("Excel.Application") oApp.Visible = True oApp.UserControl = True なんて、 CreateObject("Excel.Application") を使って、書いてましたね。 流用して、 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 と作ってみました。 実行してみると、まぁ選択できたけど、選択後Excelが居座ってるよ。 サヨナラしてもらいたいし、出来たら顔も見せてほしくないよね。 ↑働いてるExcelに対して、なんて失礼な言い方なんだろう。  Excelファンが怒るよキット(うそです) .Visible = False にして、可視を不可視に、 .Quit でアプリを抜けてサヨナラします。 Private Sub btn裏で工作する_Click() Dim oApp As Object Set oApp = CreateObject("Excel.Application") 'Excelのオブジェクトを作成 oApp.Visible = False '見えなくする、裏工作したいので oApp.UserControl = True Dim strFNAME As String 'ファイル名 strFNAME = oApp.Application.GetOpenFilename("画像 ,*.jpg; *.gif; *.bmp") oApp.Quit '任務完了、サヨナラする Set oApp = Nothing 'オブジェクトも解放 MsgBox "選択されたファイル名は" & strFNAME End Sub って感じで。 /* * 4.Access画像処理に組み込む */ さてと、ダイアログ開く前にExcelが起動するから、 遅いんだけど(私のマシーンではチョット一呼吸かかる) なんとかできた。 これを In message "[VBAで楽しく No.041] - AccessのForm .Pictureプロパティで画像参照", /vba/backno/vba041.html のdb041.mdbに組み込みます。 画像フォルダーの処理を、絶対パスの固定フォルダーに置換えます。 画像ファイル名入力の隣に、ボタンを作って、 サンプルファイルは、 http://www.ken3.org/vba/lzh/vba047.lzh にtest047-book.xls, db047.mdbが保存されています。 (Excel97,Access97)みて、笑ってください。 Private Sub btn画像選択_Click() Dim oApp As Object Set oApp = CreateObject("Excel.Application") 'Excelのオブジェクトを作成 oApp.Visible = False '見えなくする、裏工作したいので oApp.UserControl = True Dim strFNAME As String 'ファイル名 strFNAME = oApp.Application.GetOpenFilename("画像 ,*.jpg; *.gif; *.bmp") oApp.Quit '任務完了、サヨナラする Set oApp = Nothing 'オブジェクトも解放 If strFNAME <> "False" Then 'キャンセルかもしれないのでチェック Me![F_GFILENAME] = strFNAME '選択されたファイル名をセットする Call PUTGraph '画像表示を呼ぶ End If End Sub Private Sub F_GFILENAME_AfterUpdate() '画像ファイル入力後 Call PUTGraph '画像表示の関数を呼ぶ End Sub Private Sub Form_Current() 'レコードが移動したら Call PUTGraph '画像表示の関数を呼ぶ End Sub Sub PUTGraph() Dim strFNAME As String '画像ファイル名 'ファイル名入力済みかチェック(新規、未入力、クリアを考慮する) If Len(Me![F_GFILENAME] & "") = 0 Then Me![画像].Picture = "" Exit Sub 'ここから後ろは処理しないので抜ける End If 'ファイル名フルパスを作成 strFNAME = Me![F_GFILENAME] 'ファイルの存在をチェックする If Dir(strFNAME) = "" Then Me![画像].Picture = "" 'ファイルが見つからないので画像は無しにする Else Me![画像].Picture = strFNAME '画像ファイル名をセットする End If End Sub まぁ、なんとかできたのかなぁ。。。 意地でAPIを使わなかったけど、これでよかったのか、、、、 /* * 5.おわりの挨拶 */ 今回は、 ・画像管理、みんな好きですね ・Excel Application.GetOpenFilenameでファイル選択 ・小細工 Excelで裏工作する方法 でした。 まっ、いろいろと不親切なサンプルだけどね。(このへんは次回以降に) 積み残し多いや。 何か素朴な疑問などあったら、メール、掲示板に気軽に書いてください。 拾い読みして、 1つでも何かの参考となれば幸いです。 Excel/Access大好き、三流プログラマーKen3でした。


ページフッター

ここまで、読んでいただきどうもです。ここから下は、三流君のホームページの紹介・案内です
目的の情報が見つかったか?少々心配しつつ、、、

種類別のリンク や 広告など

気になったジャンル↓を選択してください。

人気記事(来場者が多いTOP3):
[VBAでIE,WebBrowserを操作]・・・VBAでIE,WebBrowserを操作する サンプルです
[Access から Excel 連携 CreateObject("Excel.Application")]・・・AccessからExcelを操作したりデータの書き出しなどです
[VBAでOutlookの操作 CreateObject("Outlook.Application" )]・・・VBAからOutlookを使い、メール関係を処理するサンプルです
↑上記3つみたいなCreateObjectで他のアプリケーションを操作するサンプルが人気です。

Excel関係:
[Excel UserFormを操作する]・・・エクセルでユーザーフォームを作成して入力などを行ってます
[ExcelからAccessを操作する]・・・ExcelからAccessのマクロを起動してみました、
[Excel関係 関数、その他]・・・その他Excel関係です

Access関係:
[Access UserForm/サブフォーム 操作]・・・アクセスでフォームを使ったサンプルです
[Access レポート操作]・・・レポートを操作してみました
[Access クエリーやその他関数]・・・あまりまとまってませんが、スポット的な単体関数の解説です

その他:VBAの共通関数やテキストファイルの操作など
[VBAでテキストファイル(TextFile)の操作]・・・普通のテキストファイルを使ったサンプルです
[VBA 標準関数関係とその他解説]・・・その他、グダグタ解説してます

開発時の操作: [F1を押してHELPを見る]/ [Debug.Print と イミディエイトウインドウ]/ [実行時エラーでデバッグ]/ [ウォッチ式とSTOP]/ [参照設定を行う]

仕様書(設計書?) XXXX書類: [基本設計書や要求仕様書]/ [テスト仕様書 テストデータ]/ [バグ票]/ [関数仕様書]/ [流れは 入力・処理・出力]

※↑文章の味付けが変わっていて、お口に合うかわかりませんが。。。
※※読んで、気分を悪くされたらスミマセン。

Blogとリンク:[三流君の作業日記]/ [VBAやASPのサンプルコード]/ 広告-[通販人気商品の足跡]



[三流君(TOP ken3.org へ戻る)] / [VBA系TOPへ] / [VBA系バックナンバー目次へ移動]