• ベストアンサー

Excel2007+Window7でVBAを使い

TIFファイルの枚数を数えたいのです。 TIFは既定でWindowsフォトビューアーが開かれます。 そのプロパティを取得すればよいと思いますが どの様にすればよいのでしょうか。。。 宜しくご回答願います。

質問者が選んだベストアンサー

  • ベストアンサー
  • nicotinism
  • ベストアンサー率70% (1019/1452)
回答No.4

どうもWindow7ではTifファイルのページ数が取得できなさそうなので 下記を参考(丸コピ)させてもらいました。 http://blogs.yahoo.co.jp/ussr1917jp/17686408.html 今までの1~3の回答はきれいさっぱり忘れてください。 これで取得出来なかったら、降参です。 以下を全て標準モジュールに。 'http://blogs.yahoo.co.jp/ussr1917jp/17686408.html ' GDIPlus Public Type TGpStartupInput   GdiplusVersion As Long   DebugEventCallback As Long   SuppressBackgroundThread As Long   SuppressExternalCodecs As Long End Type Public Type TGpStartupOutput   NotificationHook As Long   NotificationUnhook As Long End Type Public Type UUID   Data1 As Long   Data2 As Integer   Data3 As Integer   Data4A As Byte   Data4B As Byte   Data4C As Byte   Data4D As Byte   Data4E As Byte   Data4F As Byte   Data4G As Byte   Data4H As Byte End Type ' GDIスタート Public Declare Function GdiplusStartup Lib "gdiplus.dll" ( _   ByRef RetToken As Long, _   GpInput As TGpStartupInput, _   GpOutput As TGpStartupOutput) As Long ' GDIの破棄 Public Declare Sub GdiplusShutdown Lib "gdiplus.dll" ( _   ByVal Token As Long) ' GDIファイルの読み込み Public Declare Function GdipLoadImageFromFile Lib "gdiplus.dll" ( _   ByRef FileName As Byte, _   ByRef RetGpImage As Long) As Long ' GDIイメージカウントの取得 Public Declare Function GdipImageGetFrameDimensionsCount Lib "gdiplus.dll" ( _   ByVal GpImage As Long, _   ByRef RetCount As Long) As Long ' GDIイメージリストの取得 Public Declare Function GdipImageGetFrameDimensionsList Lib "gdiplus.dll" ( _   ByVal GpImage As Long, _   RetArDimensionIDs As UUID, _   ByVal COUNT As Long) As Long ' GDIフレーム数の取得 Public Declare Function GdipImageGetFrameCount Lib "gdiplus.dll" ( _   ByVal GpImage As Long, _   DimensionID As UUID, _   ByRef RetCount As Long) As Long    'GDIイメージの破棄 Public Declare Function GdipDisposeImage Lib "gdiplus.dll" ( _   ByVal GpImage As Long) As Long 'Tiffファイルの枚数のチェック '戻り値 : ページ数 '======================================================= Private Function fncImegeCount(ByVal strPath As String) As Long   Dim gsi As TGpStartupInput   Dim gdiOut As TGpStartupOutput   Dim lngGdiPlusTolen As Long   Dim bytPath() As Byte   Dim lngGpImage As Long   Dim lngVarType As VbVarType   Dim lngResult As Long      On Error GoTo ERRCOM:      ' 構造体初期化   With gsi     .GdiplusVersion = 1     .DebugEventCallback = 0     .SuppressBackgroundThread = 0     .SuppressExternalCodecs = 0   End With   ' GDI+初期化   lngResult = GdiplusStartup(lngGdiPlusTolen, gsi, gdiOut)      ' ファイル名の指定   strPath = strPath & vbNullChar      ' 文字列バイト変換   bytPath = strPath        ' ファイルの取得   Call GdipLoadImageFromFile(bytPath(0&), lngGpImage)      If (0& = lngGpImage) Then Exit Function      ' ページ数の取得   Dim PCnt As Long   Dim MUID As UUID   Dim Ret As Long      Call GdipImageGetFrameDimensionsCount(lngGpImage, PCnt)   Call GdipImageGetFrameDimensionsList(lngGpImage, MUID, PCnt)   Ret = GdipImageGetFrameCount(lngGpImage, MUID, PCnt)      ' イメージの開放   Call GdipDisposeImage(lngGpImage)      ' GDI+の開放   Call GdiplusShutdown(lngGdiPlusTolen)      fncImegeCount = True   'ページ数のSet   fncImegeCount = PCnt      Exit Function    ERRCOM:   MsgBox Err.Description End Function Sub makeTifList(trgDir As String) '使い方 イミディエイトウィンドウで、maketiflist("d:\画像") などと入力   Dim oFs As Object   Dim oDir As Object   Dim oF As Object   Dim i As Integer      Set oFs = CreateObject("Scripting.FilesystemObject")   Set oDir = oFs.getfolder(trgDir)     For Each oF In oDir.Files       If oFs.getextensionname(oF.Path) = "tif" Then         i = i + 1         Worksheets(1).Cells(i, 1) = oF.Name         Worksheets(1).Cells(i, 2) = fncImegeCount(oF.Path)         Worksheets(1).Cells(i, 3) = oF.Path       End If     Next   Set oDir = Nothing: Set oFs = Nothing End Sub

mayu1992
質問者

お礼

nicotinismさん> ありがとうございます^^ 完璧にページを取得できました!!! すごく助かりました~♪ XPと7ってずいぶん違うものなんですね。。。 またよろしくお願いします<(_ _)>

その他の回答 (3)

  • nicotinism
  • ベストアンサー率70% (1019/1452)
回答No.3

その前に、ページ数があなたが欲しているものなのか 前回回答のファンクションモジュールを標準モジュールに丸コピペして Ctrl + G を押して現れるイミディエイトウィンドウに ?fileInfo("C:\users・・・・なんとか.tif") と入力し現れるメッセージボックスを確認してください。

mayu1992
質問者

補足

何度もご回答頂きありがとうございます。 MsgBoxは表示されるものの、結果が表示されないです。 どうしてでしょうか。。。? <追記> 個々のTIFファイルのページ数を取得したいのです。

  • nicotinism
  • ベストアンサー率70% (1019/1452)
回答No.2

失礼しました。枚数=ページ数ならば、 Function fileInfo(ByVal trgFile As String) As String 'http://www.kixtart.org/forums/ubbthreads.php?ubb=showflat&Number=194237   Dim oSH As Object   Dim oFs As Object   Dim oFLD As Object   Dim oF As Object   Dim i As Long   Dim sTime As String   Dim NsTime As String      Set oSH = CreateObject("Shell.Application")   Set oFs = CreateObject("Scripting.FileSystemObject")   Set oF = oFs.getfile(trgFile)   Set oFLD = oSH.Namespace(oF.ParentFolder.Path)      'ここから下は撮影日時取得   sTime = oFLD.GetDetailsOf(oFLD.ParseName(oF.Name), 12)   For i = 1 To Len(sTime) 'ごみ取りのループ     If Mid(sTime, i, 1) Like "[0-9,/ :]" Then       NsTime = NsTime & Mid(sTime, i, 1)     End If   Next   MsgBox "撮影日時=" & NsTime      'index で決め打ち(OSによってIndexが変わってしまう148はWin7の場合)   MsgBox "決め打ちページ数=" & oFLD.GetDetailsOf(oFLD.ParseName(oF.Name), 148)       For i = 1 To 300  '余計なもの?も出てくる。300はテキトーな値です     If oFLD.GetDetailsOf(oFLD.Items, i) = "ページ数" Then       MsgBox "名前からページ数=" & oFLD.GetDetailsOf(oFLD.ParseName(oF.Name), 148)     End If     Debug.Print i, oFLD.GetDetailsOf(oFLD.Items, i),oFLD.GetDetailsOf(oFLD.ParseName(oF.Name),i)    Next      '解放   Set oF = Nothing: Set oFLD = Nothing: Set oFs = Nothing: Set oSH = Nothing End Function trgFile にファイルのフルパスを渡してください。 なお、撮影日時を取得する余計なコードが含まれていますが、オマケということで・・。 イミディエイトウィンドウに出力するようにしていますが、 最初の方は消えてしまうのでExcelなどに書き出すようにしてください。

mayu1992
質問者

補足

ご回答ありがとうございます。 フォルダの中にある、複数のTIFファイルのそれぞれのファイル名とページ数を エクセル上に記述したいのです。 すみません。。。 Functionで始まるコードを使った事がないので、、、 コマンドボタンからどの様に動作させれば良いのでしょうか。。。<(_ _)> もう少し詳しく教えて頂ければ助かります。

  • nicotinism
  • ベストアンサー率70% (1019/1452)
回答No.1

>TIFファイルの枚数を数えたいのです。 TIFファイルに『枚数』というプロパティって有りましたっけ? 念のため、Windowsフォトビューアーで開いて詳細タブの中のプロパティも 見てみましたが、当方では見当たりません。 フォルダの中のTIFファイルの個数の事を指しているのかな?

関連するQ&A

  • ファイルの関連付けについて

    ファイルの関連付けについて SHARPの「sharpdesk」というファイリングソフトがあります。 通常、「sharpdesk」から、拡張子「tif」のファイルなどの画像ファイルを開くと 「sharpdesk」付属の「イメージビューアー」というソフトで開きます。 XPで使っている頃はそういう動作でした。  ところが、WIN7して、WIN7対応版の「sharpdesk」をインストールしてみたところ、 拡張子「tif」のファイルをダブルクリックすると「Windowsフォトビュワー」 というソフトが立ち上がります。  最初は、「sharpdesk」の問題かと思っていたのですが、Windowsのエクスプローラーからも 拡張子「tif」のファイルをダブルクリックすると「Windowsフォトビューワー」 というソフトが立ち上がる事が分かりました。  念のため、「エクスプローラー」からファイルを選んで、 右クリックのメニューから「プログラムから開く」-「既定のプログラムの選択」で、 「イメージビューアー」を選択しました。  しかし、そのファイルを開くと「Windowsフォトビューワー」というソフトが立ち上がります。 「イメージビューワー」でファイルを開くには、最初に「イメージビューワー」を立ち上げて そこから開かなければなりません。  過去に、「イメージビューアー」を使って画像に文字の書き込みやリンクを 埋め込んであるファイルが多数あるので、なるべく簡単な方法で、 「イメージビューアー」でファイルを開きたいです。  いずれの場合もファイルのアイコンは「イメージビューワー」のものになっているし、 ファイルのプロパティを見ても既定のプログラムは「イメージビューワー」になっています。  さらに、プログラムの「変更」で、「イメージビューワー」を選択しても、 プログラムを変更することが出来ません。 ファイルの関連付けを、一度クリアして関連付けをやり直すにはどうすればいいのでしょうか。 「Windows 7 Professional」です。

  • フォトビューワーが既定のProgにならない

    ちと面倒なことを質問しますが、Windows10にて画像閲覧用のフォトビューワーが既定のプログラムに指定できません。 実はWin10のPCを新品から使用してまして、当初はネットで周知の方法を使ってWin10に既定のプログラムとしてフォトビューワーを指定して画像を閲覧してました。 しかしWin10の調子が数か月前からおかしくなり、最近になってますます悪化して来たのでこの度クリーンインストールをし、諸々のソフトを再インスト・再設定しつつ現在に至ります。 この時、画像閲覧時にフォトビューワーを使用するために、「画像ファイルの右クリック」→「プログラムから開く」→「別のプログラムを選択」→「その他のアプリ」→「Windows フォトビューワー」→「常にこのアプリを使ってファイルを開く」と順に指定して画像をフォトビューワーで見るのですが、次回ファイルクリックしてもWin10デフォルトの「フォト」が起動してしまい、「フォトビューワー」が既定のプログラムにならないのです。 何度やっても駄目のようです。 一方、設定(コントロールバネル)からではフォトビューワーが選択肢に出てきません。 どうすれば既定のプログラムになりますか。 --- 補足 --- デフォルトの「フォト」が使いにくい。 Win10標準ではフォトビューワーが既定のプログラムの選択肢に出てこないのがデフォルト。 Win10標準でフォトビューワーはexeではなくdllの形でインストールされている。 そのPhotoViewer.dllを直接指定して画像閲覧できるが、既定のプログラムにできない。 「photo-viewer.reg」の方法も試してみた。 諸々やっているうちにファイルの直接の右クリックからのメニューにはフォトビューワーの選択肢が出てきてるが、設定(コントロールバネル)の「既定のアプリ」にはフォトビューワーの選択肢が出てこない。

  • .wmf をExploreから表示

    Explorer上のWMF(Windowsメタファイル)をダブルクリックしてWindows フォト ビューアー開きたいのですがうまくいきません。 『プログラムから開く』⇒『既定のプログラムの選択』で『Windows Photo Viewer\PhotoViewer.dll』を設定しましたところwindowsフォトビューアーは開くのですが【このファイル形式が Windows フォトビューアーでサポートされていないか、または Windows フォトビューアーの最新の更新プログラムが適用されていないため、この画像を開けません。】とのメッセージのみで画像が表示されません。 WMFファイルのダブルクリックだけでてWindows フォト ビューアーを開き画像を表示させる方法をお教え下さい。 よろしくお願いします。

  • FAXが開けません

    パソコンに搭載しているモデムでFAXは受信できたのですが、「表示」をクリックしたところ「FAXドキュメント(tifファイル)の既定のビューアがないため、FAXドキュメントを表示できません。」とでて開けません。この既定のビューアはなんなんでしょうか? また、このビューアをインストールするにはどうすればいいのでしょうか? ご存知の方がいらっしゃれば是非教えてください。

  • 画像を出すには?

     (1)友人から送って戴いた画像の幾つかが「このファイル形式がwindowsフォトビュアーでサポートされていないか、またはwindowsフォトビュアーの場所の最新プログラムが適用されていないため、この画像を開けません。」と言うコメントが出て画像が開けません。  (2)そして、この画像のプロパティを見ると最下段のセキュリティに「このファイルは他のコンピューターから取得したものです。このコンピューターを保護するため、このファイルへのアクセスはブロックされる可能性があります。」と示されます。  以上から、(1)に関連して…プログラムから開く…で「windowsフォト ギャラリー」以外を試してみましたがダメでした。(2)に関して…「ブロックの解除」を押して試みましたがやはりダメでした。Webから開いて…をも見ましたが、横文字に弱く何も進展しません。  どうしたらこれらを開けるように出来るのでしょうか?教えて下さい!

  • XP付属のファックスのビューア

    ウィンドウズ付属のファックスソフトで送信済みファイルを表示させようとすると「FAXドキュメント(tifファイル)の既定のビューアがないため表示できません」とエラー表示が出てしまいます。表示させる方法教えてください。

  • XPでFAXの送信済みをみる設定について

    いつも勉強になります。 今回は、タイトルの通りなんですが、送信済みをダブルクリックしますとエラーが出まして曰く「FAXドキュメント(.tif ファイル)の既定のビューアがないため表示できません」と いうウィンドウが開きまして、表示できません。 どなたか、お暇でしたらこの「既定のビューア」ってのの設定手順なんぞの詳細な作業フローをご教授ください。 PCの設定に疎いんで、なるだけ平易でお願いします。

  • zip形式のtif画像が開けません

    windows7を使用しています。 顧客からPW付きzip形式でtif画像がメールで来たのですが、開くと「windowsフォトビューアーでサポートされていないか最新更新プログラムが適用されていないため開くことができません。」と出ます。どうすれば良いのか教えてください。

  • 送信済みアイテムの項目が開かない

    PCからFAXを送ったのですがFAXコンソールの 送信済みアイテムの項目を開けようとすると 「FAXドキュメント(.tifファイル)の既定のビューアがないため、 FAXドキュメントを表示できません。」 との表示がでます、この場合の対処を教えて下さい よろしくお願いいたします。

  • Win7でOffice2000のWordが開かない

    お判りになる方、以下の解決方法をご教示ください。 Office2000のWordファイルがWindows7上で開けません。 開こうとすると、Windowsフォトビューアーが起動し、 「このファイル形式が、Windowsフォトビューアーでサポートされていないか、 または、Windowsフォトビューアーの最新の更新プログラムが適用されて いないため、この画像を開けません。」と表示され、ファイルが開けません。 また、エクスプローラー上での種類表示は「DOSファイル」?となっています。 エクセルとパワーポイントのファイルは、種類表示が「Microsoft。。。」となっており、 開けます。 以上、解決方法、お待ちしております。

専門家に質問してみよう