top of page

画像をドラッグ&ドロップで表示させる

今回は画像をユーザーフォームにドラッグ&ドロップして表示させる方法を紹介します。 サンプルファイル

画像をデータベースなどに登録する場合、「開く」ボタンからファイルを指定して行うのが一般的な方法ですが、ドラグ&ドロップの方が便利な場合もあります。

1. ユーザーフォームにコントロールを配置

まず、ユーザーフォームの上に次の通りコントロールを配置してください。

Image1、lblDropImageHere、lvDropImageHereの順で配置してください。重なる順番が重要です。

lvDropImageHereのプロパティを次の通り設定してください。

Appearance: 1 - ccFlat

OLEDropMode: 1 - ccOLEDropManual

Visible: False

Listviewはその名のとおり、主に文字列をリスト表示する際に使用するもので、リストボックスの代わりに使うことが多いコントロールです。また、ファイルをドロップした時にイベントが発生するのが特徴です。他にドロップ時のイベントを扱えるコントロールが見当たらないので、私はこれを使っています。

2. 画像をドロップした時の処理の流れ

1.画像がImage1の上に来る

2. Image1のBeforeDropOverイベントが発生

3. lvDropImageHereのvisibleをtrueに変更する

4. 画像をドロップする

5. lvDropImageHereのOLEDragDropイベントが発生する

6. ドロップした画像ファイルのパス、名前を取得

7. 画像ファイルを読み込み、Image1に設定する 8. 画像のパス、名前をラベルに表示

9. lvDropImageHereとlblDropImageHereを隠す

3. ドロップ時のイベントプロシージャーの実装

いよいよ実装です。

次のコードをUserform1のコードウィンドウに貼り付けてください。

Private Sub Image1_BeforeDragOver(ByVal Cancel As MSForms.ReturnBoolean, ByVal Data As   MSForms.DataObject, ByVal x As Single, ByVal y As Single, ByVal DragState As MSForms.fmDragState, ByVal Effect As MSForms.ReturnEffect, ByVal Shift As Integer)

Me.lvDropImageHere.Visible = True End Sub

Private Sub LvDropImageHere_OLEDragDrop(Data As MSComctlLib.DataObject, Effect As Long, Button As Integer, Shift As Integer, x As Single, y As Single) Dim filePath As String Dim fileName As String '画像ファイルのパスと名前を取得 filePath = Data.Files(1) fileName = Dir(filePath) '取得したパスとファイル名をラベルに表示させる Me.lblFileName.Caption = fileName Me.lblFilePath.Caption = filePath '画像を読み込んでImageコントロールに設定する Me.Image1.Picture = LoadPicture(filePath) 'リストビューとラベルを隠す Me.lvDropImageHere.Visible = False Me.lblDropImageHere.Visible = False End Sub

3. Imageコントロールに登録された画像をダブルクリックで開く機能を追加

下記のコードをImage1のDblClickイベントプロシージャーに貼り付けます。

Private Sub Image1_DblClick(ByVal Cancel As MSForms.ReturnBoolean) On Error GoTo ErrorHundler

'ラベル(lblFilePath)に表示されているファイルのパスを参照する CreateObject("WScript.Shell").Run ("""" & Me.lblFilePath.Caption & """") Exit Sub  ErrorHundler: MsgBox "File Not Found."

End Sub

4. 画像ファイルの保存フォルダをエクスプローラーで開いて、画像ファイルを選択する機能を追加

cmdOpen(Openボタン)のClickイベントプロシージャーに次のコードを貼り付けます。

Private Sub cmdFindFile_Click() Shell "C:\Windows\Explorer.exe /select, " & Me.lblFilePath.Caption, vbNormalFocus End Sub

以上です。

私はデータベースと連携したマクロを組むことが多いです。画像をレコードと紐づける際は、画像の名前だけを保存し、画像は決められた特定のフォルダにコピーを置き、呼び出すときは、画像が保存してあるフォルダのパスと画像の名前を結合してImageコントロールに渡す方法を採っています。

追記

画像ファイルをネットワーク上に保存する場合は注意が必要です。

まず、エクスプローラで開く場合は、事前にPCのネットワークドライブを設定しておく必要があります。

また、クライアントPC1から画像ファイルを保存しているネットワークドライブを参照するときは(X:)、クライアントPC2からは(Y:)になどというように、クライアントPCごとにパスが変わってしまいます。ドライブ名を含む画像データの保存場所パスを各クライアントPCのレジストリ(又はワークシート上のどこか)に保存し、マクロ実行時にレジストリ(又はワークシート上のどこか)からドライブ名を取得するためのコーディングが必要です。

特集記事
最新記事
アーカイブ
タグから検索
ソーシャルメディア
  • Facebook Basic Square
  • Twitter Basic Square
  • Google+ Basic Square
bottom of page