Excel(VBA)でJPGファイルのExif情報を読み込む


クラスモジュールで実装してみます。

その他の方法参照)。

 

Accessで実装されていたクラスモジュールです。

GPSExifReader

GPSExifReader.mdbというファイル名からわかるようにAccessデータベースのファイルです。

この中にクラスモジュールが3個定義されています。これを使わせていただきましょう。

 


AccessのVBAの場合

クラスモジュール

このモジュールを使ったAccessコード

Private Sub btnBrowseAndOpen_Click()

On Error GoTo ExifError

Dim strDump As String

txtOutput.Value = “”    ‘Access由来のもの

With GPSExifReader.BrowseAndOpenFile()

strDump = strDump & “FilePath:                  ” & .FilePath & vbCrLf
strDump = strDump & “DateTimeOriginal:          ” & .DateTimeOriginal & vbCrLf
strDump = strDump & “GPSVersionID:              ” & .GPSVersionID & vbCrLf
strDump = strDump & “GPSLatitudeDecimal:        ” & .GPSLatitudeDecimal & vbCrLf
strDump = strDump & “GPSLongitudeDecimal:       ” & .GPSLongitudeDecimal & vbCrLf

<中略>

txtOutput.Value = strDump

End With

Exit Sub

ExifError:

End Sub


ExcelのVBAの場合

クラスモジュールをインポートして使いますが、ExcelのVBAの場合

クラスモジュールだけでは動きません。もう一つ標準モジュールを作って

その中でクラスのインスタンスを作成して使います。

こういう感じ。

1:クラスモジュール:GPSExifReaderの中で

BrowseAndOpenFile()をPublic参照にしておく

 

2:標準モジュールに以下のコードを記述

Public Sub ExifRead()

On Error GoTo ExifError

Dim strDump As String

Dim ER

Set ER = New GPSExifReader ’<--インスタンス

With ER.BrowseAndOpenFile()

strDump = strDump & “FilePath:                  ” & .FilePath & vbCrLf
strDump = strDump & “DateTimeOriginal:          ” & .DateTimeOriginal & vbCrLf
strDump = strDump & “GPSVersionID:              ” & .GPSVersionID & vbCrLf
strDump = strDump & “GPSLatitudeDecimal:        ” & .GPSLatitudeDecimal & vbCrLf
strDump = strDump & “GPSLongitudeDecimal:       ” & .GPSLongitudeDecimal & vbCrLf
<中略>

‘txtOutput.Value = strDump

MsgBox strDump
End With

Exit Sub

ExifError:

End Sub

これでExcelでも使えます。


ファイルパスを指定して読む場合

上記の場合、1回づつファイルを選択することになりますが、ファイル名が分かっている場合は以下のようにします。

GPSExifReaderクラスの中に、OpenFile(ByVal FilePath As String)という関数があります。これはファイルパスを引数に持ちます。これを使います。

With ER.BrowseAndOpenFile()

の代わりに

With ER.OpenFile(FilePath)

とすることで、ダイレクトにファイルを指定できます。


その他

GDI+

Windows Image Aquisition Library


 

Be the first to comment

Leave a Reply

Your email address will not be published.


*