VB初心者です。色々調べて、セルに「画像名と画像サイズ一覧」を
書き出すことができました。
しかし、書き出せたのはjpgだけで、gifやpngをフォルダー内に入れると
エラーが・・・・
どうしたらgifやpngも書き出せるコードになるか教えてください。
よろしくお願いします。
書いたコードは下記です。
Sub GetImageSize(ByVal f, ByRef x, ByRef y)
Dim p
Set p = LoadPicture(f)
x = CLng(CDbl(p.Width) * 24 / 635)
y = CLng(CDbl(p.Height) * 24 / 635)
Set p = Nothing
End Sub
Sub main()
Dim FSO As New FileSystemObject
Dim FLD As Folder
Dim FLE As File
Dim FF As File
Dim x As Long
Dim y As Long
Set FLD = FSO.GetFolder("C:\画像の入ったフォルダー名")
For Each FF In FLD.Files
Call GetImageSize(FF, x, y)
Name = FF.Name
Name_x = x
Name_y = y
myCnt = myCnt + 1
Cells(myCnt, "A").Value = FF.Name
Cells(myCnt, "B").Value = x
Cells(myCnt, "C").Value = y
Next FF
End Sub
No.1ベストアンサー
- 回答日時:
LoadPictureはgifやpngには対応していませんので、最近のWindowsなら標準で持っているGDI+という機能を用いています。
なるべく元の形に添わせました。簡便さ優先で毎回GDI+のオブジェクトを生成しているので、重たいと思います。ご参考まで。(訳の分からないものを使うのは嫌という場合は、他の回答者様の回答をお待ち下さい。)Windows7Home(64bit),xl2010で試しています。
Private Type GdiplusStartupInput
GdiplusVersion As Long
DebugEventCallback As Long
SuppressBackgroundThread As Long
SuppressExternalCodecs As Long
End Type
Private Declare Function GdipCreateBitmapFromFile Lib "Gdiplus" (FileName As Any, bitmap As Long) As Long
Private Declare Function GdipDisposeImage Lib "Gdiplus" (ByVal Image As Long) As Long
Private Declare Function GdipGetImageHeight Lib "Gdiplus" (ByVal Image As Long, Height As Long) As Long
Private Declare Function GdipGetImageWidth Lib "Gdiplus" (ByVal Image As Long, Width As Long) As Long
Private Declare Sub GdiplusShutdown Lib "Gdiplus" (ByVal token As Long)
Private Declare Function GdiplusStartup Lib "Gdiplus" (token As Long, pInput As GdiplusStartupInput, pOutput As Any) As Long
Function GetImageSize(ByVal f As File, ByRef x As Long, ByRef y As Long) As Boolean
Dim udtInput As GdiplusStartupInput
Dim lngToken As Long, lngStatus As Long
Dim pSrcBmp As Long, pDstBmp As Long
Dim lngWidth As Long, lngHeight As Long
Dim srcPath As String
srcPath = f.Path
udtInput.GdiplusVersion = 1
If GdiplusStartup(lngToken, udtInput, ByVal 0&) <> 0 Then
GetImageSize = False
Exit Function
End If
If GdipCreateBitmapFromFile(ByVal StrPtr(srcPath), pSrcBmp) <> 0 Then
GdiplusShutdown lngToken
GetImageSize = False
Exit Function
End If
GdipGetImageWidth pSrcBmp, lngWidth
GdipGetImageHeight pSrcBmp, lngHeight
x = lngWidth
y = lngHeight
GdipDisposeImage pSrcBmp
GdiplusShutdown lngToken
GetImageSize = True
End Function
Sub main()
Dim FSO As New FileSystemObject
Dim FLD As Folder
Dim FLE As File
Dim FF As File
Dim x As Long
Dim y As Long
Dim myCnt As Long
Set FLD = FSO.GetFolder(GetDesktopPath & "\picsizetest")
For Each FF In FLD.Files
If GetImageSize(FF, x, y) Then
myCnt = myCnt + 1
Cells(myCnt, "A").Value = FF.Name
Cells(myCnt, "B").Value = x
Cells(myCnt, "C").Value = y
End If
Next FF
End Sub
'パスの伏せ字をなくすためデスクトップ上のフォルダーとしています
Private Function GetDesktopPath() As String
Dim wScriptHost As Object, strInitDir As String
Set wScriptHost = CreateObject("Wscript.Shell")
GetDesktopPath = wScriptHost.SpecialFolders("Desktop")
Set wScriptHost = Nothing
End Function
mitarashiさん
大変ありがとうございます!
jpg gif png全て書き出せました^^
gif pngに対応するために、2,3行追加すればなんて、
甘いこを考えていた昨日の自分・・・
ご丁寧にコードまで書いて頂き大変感謝しております!
本当にありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Excel(エクセル) VBA フォルダ見える化のコードについて 2 2023/06/19 15:04
- Visual Basic(VBA) VBAで質問ですが、皆さんはどの様に導き出しているのでしょうか? 6 2022/05/03 21:53
- Visual Basic(VBA) countifsについての質問 3 2023/03/08 13:45
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Visual Basic(VBA) EXCEL VBAにて動的にCheckBOXを複数作成し、同BOXにイベントを追加したい 1 2023/03/16 07:05
- Excel(エクセル) 【マクロ】スクショ印刷がうまく動かない件 5 2022/12/06 17:37
- Excel(エクセル) エクセルのマクロについて教えてください。 2 2023/01/11 08:33
- Visual Basic(VBA) 別シートのデータを参照して値を入れたい。 まとめデータシートのC列D列の値を商品一覧シートのコードが 7 2022/08/17 13:20
- Visual Basic(VBA) VBA処理追加 こちらでご教示頂いたのですが回答完了させてしまいましたのでこちらからまた質問させてく 2 2022/10/27 09:57
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
アップロード画像数でCSSを分け...
-
【PHP】サーバー上で TIFFをJPE...
-
★PHP★画像アップロードの際に余...
-
PythonのTkinter詳しい方へ。画...
-
C#とJavaで、MP3タグの画像を表...
-
C# Excelファイルへの画像挿入。
-
透過PNGが透過されない!!
-
Illustratorで文字と画像を流し...
-
GDの画像変換でサーバーに負荷
-
PHP + MySQL で画像データ表示
-
エクセルでカレンダーマクロの...
-
PHPで半透明画像を作りたい
-
VBSの「MsgBox」について
-
imageフォルダに、画像をリサイ...
-
PostgreSQLのラージオブジェク...
-
<img src="http://x.y.com/cgi-...
-
VBAでJPGサイズ変更
-
PHPによる画像の生成による色の...
-
こちらはただの直列処理ですか?
-
フォントの色を変えるには?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBSの「MsgBox」について
-
拡張子php画像をjpg画像等に変...
-
透過PNGが透過されない!!
-
アップロード画像数でCSSを分け...
-
imageフォルダに、画像をリサイ...
-
VBAでJPGサイズ変更
-
Illustratorで文字と画像を流し...
-
VBAのコードを教えてください
-
C# Excelファイルへの画像挿入。
-
php,mysqlにて画像パス保存/表...
-
GDI+を使ったビット数とDPIの扱い
-
SQLiteに画像を格納したい
-
ListViewコントロールでサムネ...
-
★PHP?★画像を縦横比を変えずに...
-
ビットマップ画像を読み込むプ...
-
phpで画像がどうしても文字化け...
-
PHPで吐き出した画像にリンクを...
-
phpMyAdminに画像を保存できない
-
OpenGLで描いて画像ファイル出力
-
手作業で埋め込んだ、UserForm1...
おすすめ情報