
No.3ベストアンサー
- 回答日時:
#2です。
EnhancedMetaFileのお勉強をしていました。ワークシートに貼り付けた画像を選択した状態で、下記のコードを実行すると、オリジナルのピクセル数が取得できると思います。
・APIの定数、関数等の入手先-必要なものをセットしないと動きません。長いので割愛します。
http://homepage2.nifty.com/nonnon/Win32Api/
・最もキーとなった、参考URL
http://nienie.com/~masapico/api_GetEnhMetaFileBi …
Sub getPixelCount()
Dim SrcData() As Byte
Dim hSrcMetaFile As Long
Dim BufSize As Long
Dim SrcIdx As Long
Dim RecordHeader As emr
Dim strechDibRecord As EMRSTRETCHDIBITS
Selection.Copy
If OpenClipboard(0) Then
hSrcMetaFile = GetClipboardData(CF_ENHMETAFILE)
hSrcMetaFile = CopyEnhMetaFile(hSrcMetaFile, vbNullString)
CloseClipboard
End If
If hSrcMetaFile = 0 Then Exit Sub
BufSize = GetEnhMetaFileBits(hSrcMetaFile, ByVal 0, ByVal 0)
ReDim SrcData(BufSize)
BufSize = GetEnhMetaFileBits(hSrcMetaFile, BufSize, SrcData(0))
If BufSize = 0 Then Exit Sub
SrcIdx = 0
While SrcIdx < BufSize
MoveMemory RecordHeader, SrcData(SrcIdx), Len(RecordHeader)
If RecordHeader.iType = EMR_STRETCHDIBITS Then
MoveMemory strechDibRecord, SrcData(SrcIdx), Len(strechDibRecord)
End If
SrcIdx = SrcIdx + RecordHeader.nSize
Wend
DeleteEnhMetaFile hSrcMetaFile
With strechDibRecord
Debug.Print ".cxSrc - ", .cxSrc
Debug.Print ".cySrc - ", .cySrc
End With
End Sub
Public Function EnumFunc( _
ByVal hdc As Long, _
ByVal pHandles As Long, _
ByVal pRecord As Long, _
ByVal HandleNum As Long, _
ByVal pData As Long) As Long
Dim eh As ENHMETARECORD
RtlMoveMemory VarPtr(eh), pRecord, Len(eh)
EnumFunc = 1
End Function
No.2
- 回答日時:
シートに貼り付けた画像は、元画像のサイズや、解像度dpiの情報を保持している様ですが、
ローカルウィンドウを表示させてメンバーを眺めていても、それらしい物が見つかりません。
ご存じの方がいたら、自分も是非知りたいです。
ベタな方法ですが、解像度96dpi決め打ちで、下記により画像のサイズ(ピクセル数)が取得できるかも。
(クリップボードから貼り付けたり、解像度情報の無いファイルだと、96dpiと見なされる様です)
なお、VBAによる画像のリサイズについては、下記に回答した例があります。
http://okwave.jp/qa/q5647625.html
xl2000のコードです。他の環境で動かない場合はあしからず。
Type shapeSize
Width As Long
Height As Long
End Type
Sub test()
Dim shp As Shape
Dim shpSize As shapeSize
For Each shp In ActiveSheet.Shapes
If shp.Type = msoPicture Then
shpSize = test2(shp)
Debug.Print shpSize.Width, shpSize.Height
End If
Next shp
End Sub
Function test2(shp As Shape) As shapeSize
Dim originalSize As shapeSize
Application.ScreenUpdating = False
originalSize.Width = shp.Width
originalSize.Height = shp.Height
shp.ScaleWidth 1, msoTrue
shp.ScaleHeight 1, msoTrue
test2.Width = shp.Width * 96 / 72
test2.Height = shp.Height * 96 / 72
shp.Width = originalSize.Width
shp.Height = originalSize.Height
Application.ScreenUpdating = True
End Function
No.1
- 回答日時:
やりたいのは分りますが
>VBAはほんの少しだけ触れた事のある初心者です。
では・・・
十分理解してからでないと難しいと思いますよ
まずは、この辺から
Sub Macro1()
Dim ws As Worksheet
Dim i
For Each ws In Worksheets
With ws
For i = 1 To .Shapes.Count
With .Shapes(i)
MsgBox "SheetName = " & ActiveSheet.Name & vbCrLf & _
"ShapeName = " & .Name & vbCrLf & _
"ShapeHeight = " & .Height & vbCrLf & _
"ShapeWidth = " & .Width
End With
Next i
End With
Next ws
End Sub
参考まで
この回答への補足
ご回答ありがとうございます。
この程度でしたら理解できます。
すみません、言い方が悪かったです。
画像の縦横のサイズではなく、画像自体のファイルサイズを取得して警告を出したいなと考えています。
メッセージボックスの出し方やループに関しては参考にさせていただきます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
【VBA】写真の縦横比を変えずに貼り付ける
Visual Basic(VBA)
-
エクセルに貼付けた写真の容量(何バイトなのか)を確認する方法はありますか?
その他(パソコン・スマホ・電化製品)
-
EXCELにクリップボードにある画像を貼り付け、その表示サイズを変更したい
Visual Basic(VBA)
-
-
4
Excel VBA シェイプの原型のサイズ取得方法
その他(プログラミング・Web制作)
-
5
エクセルVBAで、画像の倍率を知るには、どのようにすればいいのでしょう
Visual Basic(VBA)
-
6
エクセルマクロでシート内にある画像のみを選択する
Excel(エクセル)
-
7
エクセルのVBAでクリップボードにコピーした画像をpng(or jpg or bmp)保存したい
Visual Basic(VBA)
-
8
【エクセルのマクロ】クリップボードのbitmapをフォームに表示させたい
Visual Basic(VBA)
-
9
Excelマクロ 選択画像の大きさを100%に
その他(Microsoft Office)
-
10
EXCEL VBA 複数のImageコントロールにクリップボードに保存されている画像を表示したい
Visual Basic(VBA)
-
11
Excel マクロ 画像をリンクせずかつ圧縮して貼りつける方法を教えてください
Excel(エクセル)
-
12
エクセルVBAで縦向きの画像の挿入・回転
Excel(エクセル)
-
13
画像のピクセルデータの取得
Visual Basic(VBA)
-
14
VBAによるセル内の画像の位置調整
Excel(エクセル)
-
15
VBAで、なぜかSendkeyが効きません。
PowerPoint(パワーポイント)
-
16
エクセルで貼り付けたオブジェクトの画像をユーザーフォームのイメージコントロールで表示する方法
Excel(エクセル)
-
17
「Columns(A:C")」の列文字を数字にして表記したい"
Excel(エクセル)
-
18
マクロを実行すると画像がズレてしまいます
その他(Microsoft Office)
-
19
VBAでブックを非表示で開いて処理して閉じる方法
Excel(エクセル)
-
20
VBAでwebの画像を名前を付けて保存する方法
その他(プログラミング・Web制作)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「画像サイズが○○KBあって、350...
-
メールの添付ファイルを印刷す...
-
ワードの挿入画像が拡大する原因
-
エクセルへ画像挿入、元サイズ...
-
重たい画像を軽くする方法
-
同じ解像度でもサイズが違う画...
-
素人に方に解像度を説明したい...
-
Excel2016 まとめてのコピ...
-
PDF-XChange Viewerで、データ...
-
イラストレーターの線幅ツール...
-
イラストレーターにマジック消...
-
2つのjpegを1つのjpegにまと...
-
Illustratorで四角形の底辺だけ...
-
IllustratorCS2でグラデーショ...
-
VBA横に並んでいるデータを縦に...
-
windowsのペイントソフトを使っ...
-
作成したオブジェクト(長方形な...
-
Adobe Acrobat 9で挿入したテキ...
-
イラストレータの「パスの変形...
-
Firefox の開発ツールの文字を...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
メールの添付ファイルを印刷す...
-
エクセルへ画像挿入、元サイズ...
-
「画像サイズが○○KBあって、350...
-
同じ解像度でもサイズが違う画...
-
ワードの挿入画像が拡大する原因
-
重たい画像を軽くする方法
-
ExcelVBAで画像のサイズを調べ...
-
グラフィック素材や写真画像に...
-
原寸大より小さい画像
-
画像サイズ(ピクセル)の変更
-
pdfデータはどこまで軽くできま...
-
フォトショップで画像にシロ枠...
-
素人に方に解像度を説明したい...
-
ファイルサイズ1k以下のbitmap...
-
Photoshopで写真をトリミング
-
PowerPointへの詳細画像の貼り付け
-
天地700×左右150ピクセルって?
-
スキャナで取り込んだ画像の縮小
-
解像度を理解できてませんdpiと...
-
mac os x での画像編集に付いて
おすすめ情報