VBAでドラッグ&ドロップでファイルパスを取得する一番簡単な方法
はじめに
ExcelVBAで業務用ツールを開発する際に避けて通れないのが処理用のファイルパスの入力です。
これまで自分が作成したツールではファイルダイアログを開いて選択してもらう方法しかありませんでした。
今回、非常にシンプルな方法でフォーム上へのドラッグ&ドロップでファイルパスを取得できたので、記事に残します。
目的
VBAのフォーム上へのドラッグ&ドロップでファイルパスを取得したい。
処理フロー
1、フォーム上にWebbrowserコントロールを配置する
2、WebbrowserコントロールのBeforeNavigate2イベントの引数URLを取得する
3、BeforeNavigate2イベントを引数Cancel=Trueでキャンセルする
フォームイメージ・サンプルコード
下記のフォームイメージではTextBoxとLabelを配置しています。
WebbrowserコントロールはLabelの枠内の白い部分です。
Option Explicit
Private Sub WebBrowser1_BeforeNavigate2(ByVal pDisp As Object, URL As Variant, Flags As Variant, TargetFrameName As Variant, PostData As Variant, Headers As Variant, Cancel As Boolean)
TextBox1.Text = URL
Cancel = True
End Sub
解説
Webbrowserコントロールにファイルをドラッグ&ドロップすると表示のためファイルパスを開こうとします。
この時、BeforeNavigate2イベントは文字通りファイルを開く前に発生し、引数URLとしてファイルパスを返します。
さらに、BeforeNavigate2イベントそのものを引数Cancelで中断します。
結果としてWebbrowserコントロールのファイル読み込みによるエラーを回避しつつ、ファイルパスのみを取得することができます。
補足
ファイルパスは一つずつしか取得できません。
Webbrowserコントロールの枠とか背景色とかの変更はVBAのフォームでは簡単にはできないようです。
外部にHtmlファイル作れば表示内容の変更は可能でした。
最後に
自身の環境ではこれでファイルパスの取得がめちゃくちゃ楽になりました。
今後Webbrowserコントロールのサポートが続く限りは、使える方法だと思います。
Author And Source
この問題について(VBAでドラッグ&ドロップでファイルパスを取得する一番簡単な方法), 我々は、より多くの情報をここで見つけました https://qiita.com/Hacomo/items/74d881f0aecef8cf513e著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .