クラスモジュールで実装してみます。
(その他の方法参照)。
Accessで実装されていたクラスモジュールです。
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
ttp://excelfactory.net/excelboard/excelvba/cfs.cgi?word=EXIF&andor=and&logs=24.txt
こことかはどうなの?