ACCESS開発の話です。

「ACCESSなんて知らねーよ」って方は、この記事はスルーで。


エクスプローラでファイルを選択し、リストボックスにドラッグアンドドロップで追加するフォームの製造をしました。

でも、ネットで調べてもAPIを使う難しい方法ばかりで、なかなか簡単な方法がない・・・

なんとか簡単に実装できる方法を見つけたので、紹介します。

ちょっと一般的な話じゃないので、ブログに載せるか迷ったのですが、僕と同じようにハマっている人の役に立てばいいなぁと思い記事にしました。


1.まずはフォームにリストボックスを追加

フォームにリストボックスを追加します。
コントロール名:lstFileList

リストボックス追加

プロパティの[値集合タイプ]を、[値リスト]に変更します。


2.フォームにActiveXコントロールのProgressBarを追加

[デザイン]の[コントロール]エリアにある、▼(上に横棒)をクリックします。

ActiveX追加1


下の図のように表示されるので、[ActiveXコントロール]をクリックします。

ActiveX追加2


選択画面が表示されるので、[Microsoft ProgressBar Control]を選択して、OKボタンをクリックします。

ActiveX追加3

すると、フォームにProgressBarが追加されます。


3.ProgressBarのプロパティを変更

フォームに追加されたProgressBarを選択し、プロパティ[OLEDropMode]を[1-ccOLEDropManual]に変更します。
コントロール名:prgAddFile

ProgressBarプロパティ


4.ソースで、ProgressBarにファイルをドラッグした時の処理を追加

VBAで、ProgressBarのOLEDragDropイベントに、リストボックスへのファイル名追加のロジックを記述します。

※OLEDragDropイベントは、プロパティシートの日本語イベント一覧にはないので、イベント自体も直接記述します。

Private Sub prgAddFile_OLEDragDrop(Data As Object, _
                                   Effect As Long, _
                                   Button As Integer, _
                                   Shift As Integer, _
                                   x As Single, y As Single)
                                   
On Error Resume Next

    Dim i As Long
    
    'ドラッグ&ドロップされた全てのオブジェクトを判定し、
    'フォルダ以外をリストに追加
    For i = 1 To Data.Files.Count
        If GetAttr(Data.Files(i)) <> vbDirectory Then
            Me.lstFileList.AddItem Data.Files(i)
        End If
    Next
    
On Error GoTo 0
End Sub


5.完成!!!

エクスプローラ上で、ファイルを選択(複数も可)します。

エクスプローラファイル選択

そのまま、ProgressBarにドラッグ&ドロップすると・・・

ドラッグ&ドロップの結果

リストボックスに選択したファイル名がフルパスで表示されました。

フォルダはロジック内で判定し無視しているので、リストボックスには追加されません。

あとは、取得したファイル名に対して、目的に応じた処理をすればOKです。

フォームのデザインが適当なのは、許してください・・・


お知らせ 2018年7月9日

最近、エクセルVBAを社会人向けの学校で教える仕事をしています。
それで、エクセルのサイトを作ってみました。
まだまだ作成途中ですが、開発ルールはボチボチまとまったかなと思っています。ACCESSでも生かせると思うので、参考にしてみてください。

>エクセルのサイト えくとしょ

エクセル図書館で、「えくとしょ」というサイト名にしてみました。

がんばって完成させようと思うので、よろしくお願いします。