Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


12496 / 76734 ←次へ | 前へ→

【69756】Re:エクセルに貼りつけてある画像をコピーしたい
発言  takataka  - 11/8/26(金) 14:05 -

引用なし
パスワード
   どうもありがとうございます。
非常に難しそうですが、できそうです。
前回に引き続き、色々ありがとうございます。
お伺いしたことをベースに
今週末、なんとかチャレンジして克服してみます。
これからもどうぞよろしくお願いします。


▼かみちゃん さん:
>こんにちは。かみちゃん です。
>
>> 別面でjpeg保存する部分まで、vbaではできないのでしょうか?
>
>http://www.vbalab.net/vbaqa/c-board.cgi?cmd=ntr;tree=57318;id=excel
>で、kanabunさんが紹介されていた
>
>>> シート上の図や画像をjpgファイルとして保存するには
>>>
>>> SaveCBPictureAs
>>>
>>> というshiraさんという方の関数
>
>を利用すると、以下のような感じてできませんか?
>
>なお、
>http://www.vbalab.net/vbaqa/c-board.cgi?cmd=one;no=69743;id=excel
>の質問と何が違うのかよくわかりませんが、
>以下のコードは、アクティブシートのすべての
>msoPicture をファイルに保存する方法です。
>
>すべてのシートの特定のセルにある msoPicture であれば、これをベースに修正すればできると思います。
>
>Option Explicit
>
>'http://www4.ocn.ne.jp/~outfocus/gdip/pic2bmp2.html
>
>Private Type FLTIMAGE
>  StructSize As Integer
>  Type As Byte
>  Reserved1(0 To 8) As Byte
>  hImage As Long
>  Reserved3(0 To 19) As Byte
>End Type
>Private Type FLTFILE
>  Reserved1 As Integer
>  Ext As String * 4
>  Reserved2 As Integer
>  Path As String * 260
>  Reserved3 As Currency
>End Type
>
>'ここで出力形式を選択する
>#Const FLT_MODE = -1
>
>#If FLT_MODE = -1 Then 'PNG
>  Private Declare Function GetFilterInfo Lib _
>   "C:\Program Files\Common Files\Microsoft Shared\Grphflt\PNG32.FLT" _
>    (ByVal Ver As Integer, ByVal Reserved As Long, _
>    phMem As Long, ByVal flags As Long) As Long
>  Private Declare Function ExportGr Lib "PNG32.FLT" _
>    (ff As FLTFILE, fi As FLTIMAGE, ByVal hMem As Long) As Long
>  Private Const SaveExt As String = "PNG保存,*.png"
>#ElseIf FLT_MODE = 1 Then 'JPEG
>  Private Declare Function GetFilterInfo Lib _
>   "C:\Program Files\Common Files\Microsoft Shared\Grphflt\JPEGIM32.FLT" _
>    (ByVal Ver As Integer, ByVal Reserved As Long, _
>    phMem As Long, ByVal flags As Long) As Long
>  Private Declare Function ExportGr Lib "JPEGIM32.FLT" _
>    (ff As FLTFILE, fi As FLTIMAGE, ByVal hMem As Long) As Long
>  Private Const SaveExt As String = "Jpeg保存,*.Jpg"
>#ElseIf FLT_MODE = 2 Then 'TIFF
> Private Declare Function GetFilterInfo Lib _
> "C:\Program Files\Common Files\Microsoft Shared\Grphflt\TIFFIM32.FLT" _
>    (ByVal Ver As Integer, ByVal Reserved As Long, _
>     phMem As Long, ByVal flags As Long) As Long
> Private Declare Function ExportGr Lib "TIFFIM32.FLT" _
>   (ff As FLTFILE, fi As FLTIMAGE, ByVal hMem As Long) As Long
> Private Const SaveExt As String = "TIFF保存,*.Tif"
>#Else '         GIF
>  Private Declare Function GetFilterInfo Lib _
>   "C:\Program Files\Common Files\Microsoft Shared\Grphflt\GIFIMP32.FLT" _
>    (ByVal Ver As Integer, ByVal Reserved As Long, _
>    phMem As Long, ByVal flags As Long) As Long
>  Private Declare Function ExportGr Lib "GIFIMP32.FLT" _
>    (ff As FLTFILE, fi As FLTIMAGE, ByVal hMem As Long) As Long
>  Private Const SaveExt As String = "GIF保存,*.Gif"
>#End If
>
>Private Declare Function OpenClipboard Lib "user32" _
>    (ByVal hWndNewOwner As Long) As Long
>Private Declare Function GetClipboardData Lib "user32" _
>    (ByVal uFormat As Long) As Long
>Private Declare Function CloseClipboard Lib "user32" () As Long
>Const CF_ENHMETAFILE = 14
>Private Declare Function CopyEnhMetaFile Lib "gdi32" _
>    Alias "CopyEnhMetaFileA" _
>    (ByVal hemfSrc As Long, ByVal lpszFile As String) As Long
>Private Declare Function DeleteEnhMetaFile Lib "gdi32" _
>    (ByVal hemf As Long) As Long
>Private Declare Function GlobalFree Lib "kernel32" _
>    (ByVal hMem As Long) As Long
>
>Function SaveCBPictureAs(ByVal SavePath As String) As Boolean
>' クリップボードにコピーされたEMFイメージを _
>       定数 FLT_MODE で指定された形式で保存
> Dim fi  As FLTIMAGE
> Dim ff  As FLTFILE
> Dim hemf As Long
> Dim hMem As Long
>
> If OpenClipboard(0) Then
>   hemf = CopyEnhMetaFile( _
>       GetClipboardData(CF_ENHMETAFILE), vbNullString)
>   CloseClipboard
> End If
> If hemf = 0 Then Exit Function
> ' パラメータ設定
> ff.Path = SavePath & vbNullChar
> With fi
>   .StructSize = LenB(fi)
>   .Type = 1
>   .hImage = hemf
> End With
> ' フィルタ呼び出し
> If GetFilterInfo(3, 0, hMem, &H10000) And &H10 Then
>   If ExportGr(ff, fi, hMem) = 0 Then
>     SaveCBPictureAs = True
>   End If
> End If
> If hMem Then GlobalFree hMem
> DeleteEnhMetaFile hemf
>End Function
>
>Sub 動作テスト()
> Dim AWorksheet As Worksheet
> Dim wShape As Shape
> Dim myW As Double, myH As Double, myRatio As Double
> Dim oW As Double, oH As Double
> Dim strPath As String
> Dim lngCount As Long
> 
> Application.ScreenUpdating = False
>   
> Set AWorksheet = ActiveSheet
> For Each wShape In AWorksheet.Shapes
>  If wShape.Type = msoPicture Then
>   With wShape
>    myW = .Width
>    myH = .Height
>    '図を元の大きさに変更
>    .ScaleHeight 1, msoTrue
>    .ScaleWidth 1, msoTrue
>    oH = .Height
>    oW = .Width
>    .Copy
>    '縮小後のサイズに戻す
>    .Width = myW
>    .Height = myH
>   End With
>   Application.ScreenUpdating = True
>   myRatio = WorksheetFunction.Round(myW / oW * 100, 0)
>   
>   lngCount = lngCount + 1
>'   strPath = ThisWorkbook.Path & "\testABC_" & Format(lngCount, "000") & ".jpg"
>   strPath = "C:\tpic\testABC_" & Format(lngCount, "000") & ".jpg"
>   
>   Call SaveCBPictureAs(strPath)
>  End If
> Next
>End Sub

7 hits

【69742】エクセルに貼りつけてある画像をコピーしたい takataka 11/8/25(木) 18:50 質問
【69745】Re:エクセルに貼りつけてある画像をコピー... かみちゃん 11/8/25(木) 20:37 発言
【69747】Re:エクセルに貼りつけてある画像をコピー... takataka 11/8/25(木) 21:56 発言
【69748】Re:エクセルに貼りつけてある画像をコピー... かみちゃん 11/8/25(木) 22:25 発言
【69749】Re:エクセルに貼りつけてある画像をコピー... takataka 11/8/25(木) 22:41 発言
【69750】Re:エクセルに貼りつけてある画像をコピー... かみちゃん 11/8/26(金) 6:16 発言
【69756】Re:エクセルに貼りつけてある画像をコピー... takataka 11/8/26(金) 14:05 発言
【69764】Re:エクセルに貼りつけてある画像をコピー... Abyss 11/8/27(土) 17:57 発言
【69772】Re:エクセルに貼りつけてある画像をコピー... takataka 11/8/28(日) 6:33 質問

12496 / 76734 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free