[[20150505122304]] 『ExcelのVBAを使って、フォルダ内にある複数のJPEG』(mamu) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『ExcelのVBAを使って、フォルダ内にある複数のJPEGファイルの撮影日時秒等を取得したい。』(mamu)

ExcelのVBAを使って、フォルダ内にある複数のJPEGファイルの撮影日時秒を取得したいと思っています。はじめは、ExifReader.clsという外部クラスをインポートして使用し、撮影日時秒を取得できたのですが、多量のJPEGファイルを読み込んだ時に、32件目のファイルでなぜが、ExifReader.clsのオーバーフローでストップしてしまったため、ExifReader.clsには頼らず、Open、Get、byte配列などを使って、ファイルを開き、撮影日時秒を取得することとしました。以下のコードで、1件目のJPEG画像の撮影日時秒が取得できましたが、2件目以降の撮影日時秒が取得できないで困っています。2件目以降も、1件目と同じ撮影日時秒が出力されてしまいます。
Open、Get、byte配列、Closeなどの使い方で、何か間違っているのでしょうか?
ご教授いただけるとたすかります。よろしくお願いいたします。

Private Sub 取り込みボタン_Click()

    Dim buf As String, cnt As Long, path As String, ws As Worksheet
    Dim i As Integer
    Dim byteJPEG() As Byte
    Dim tmpOffset(0 To 3) As Variant
    Dim offset As Long
    Dim tmpExifDate As String
    Dim n As Integer

    path = Range("B5").Value 'Excelのセルからパスの取得 例)c:\
    buf = Dir(path & "*.JPG") 'JPGファイル名の取得

    Set ws = Sheets("?AJPEG一覧")

    cnt = 2  '1行目には列のタイトルが入っているので、2〜スタートしました。

    Do While buf <> ""

      n = FreeFile

      Open path & buf For Binary As #n
       ReDim byteJPEG(LOF(n)) As Byte
       Get #n, , byteJPEG
      Close #n

      '撮影日時秒の取得
      For i = 0 To 3 Step 1
       tmpOffset(i) = byteJPEG(444 + i) '444は、撮影日時の位置
      Next

      offset = CLng(tmpOffset(0)) + CLng(tmpOffset(1)) * 256 + CLng(tmpOffset(2)) * 256 * 256 + CLng(tmpOffset(2)) * 256 * 256 * 256 + 12

      For i = 0 To 19 Step 1
       tmpExifDate = tmpExifDate & Chr("&H" & Hex(byteJPEG(offset + i)))  '←撮影日時秒
      Next

      With ws  '取得した情報をセルに書き出し
        .Range("A" & cnt).Value = buf
        .Range("B" & cnt).Value = tmpExifDate
      End With

      cnt = cnt + 1
      buf = Dir() 'JPGファイル名の再取得

      Erase byteJPEG()

    Loop

    ws.Activate

End Sub

< 使用 Excel:Excel2013、使用 OS:Windows8 >


すみません。
解決しました。

tmpExifDate = ""

で初期化することで、機能しました。
お騒がせしました。
(mamu) 2015/05/05(火) 12:39


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.