![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
こんにちは!
クリップボードにビットマップが入っていたとき、そのデータをフォームに表示させたりすることはできませんか?API関数にgetclipboarddata(cf_bitmap)というものがあり、これを使うことでデータは取得していると思うのですが、例えばImage1.Picture=GetClipBoardData(CF_BITMAP)というようにやっても〔オブジェクトが必要です〕というエラーが出てしまいます。
openclipboard(0)とかcloseclipboardとか、これらの宣言とか、概ね必要と思われるものはコードに組み込んであると思います。
正直申し上げて、完全な初心者です。どなたかお分かりになる方いらっしゃいますか?
また、エクセルのグラフやシェイプをマクロを使い、bitmap形式で保存する方法はありませんか?VBの参考サイトで調べてみるとメタファイル形式で取得してやってらっしゃったのですが、エクセルのマクロではこれはできないでしょうか(自分が見たサイトではエクセルでサポートしていない関数を使っていました)?
どなたか助けてください。よろしくお願いいたします。
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
こんばんは。
> クリップボードにビットマップが入っていたとき、そのデータをフォームに
> 表示させたりすることはできませんか?
クリップボードから直接 Picture オブジェクトを生成します。内容が内容なので
どうしても Excel 単体だと難しいですね。API だらけで難易度は高めですけど、
頑張って下さい。
' // 標準モジュール
' // Declareations --------------------------------------------------
Private Declare Function IsClipboardFormatAvailable Lib "user32.dll" ( _
ByVal wFormat As Long) As Long
Private Declare Function OpenClipboard Lib "user32.dll" ( _
ByVal hWnd As Long) As Long
Private Declare Function GetClipboardData Lib "user32.dll" ( _
ByVal wFormat As Long) As Long
Private Declare Function CloseClipboard Lib "user32.dll" () As Long
Private Declare Function OleCreatePictureIndirect Lib "olepro32.dll" ( _
ByRef lpPictDesc As PictDesc, _
ByRef RefIID As GUID, _
ByVal fPictureOwnsHandle As Long, _
ByRef IPic As IPicture) As Long
' // Types ----------------------------------------------------------
Private Type PictDesc
cbSizeofStruct As Long
picType As Long
hImage As Long
Option1 As Long
Option2 As Long
End Type
Private Type GUID
Data1 As Long
Data2 As Integer
Data3 As Integer
Data4(7) As Byte
End Type
' // Constants ------------------------------------------------------
Private Const CF_BITMAP As Long = 2
Private Const CF_PALETTE As Long = 9
' // クリップボードのビットマップデータから Picture オブジェクトを作成
Public Function CreatePictureFromClipboard() As StdPicture
Dim hImg As Long
Dim hPalette As Long
Dim uPictDesc As PictDesc
Dim uGUID As GUID
Set CreatePictureFromClipboard = Nothing
' 終了条件:: クリップボードに該当データが無い
If IsClipboardFormatAvailable(CF_BITMAP) = 0 Then Exit Function
' 終了条件:: クリップボードからイメージハンドルが取得できない
If OpenClipboard(0&) <> 0 Then
hImg = GetClipboardData(CF_BITMAP)
hPalette = GetClipboardData(CF_PALETTE)
Call CloseClipboard
End If
If hImg = 0 Then Exit Function
With uPictDesc
.cbSizeofStruct = Len(uPictDesc)
.picType = 1
.hImage = hImg
.Option1 = hPalette
End With
With uGUID
.Data1 = &H20400
.Data4(0) = &HC0
.Data4(7) = &H46
End With
Call OleCreatePictureIndirect(uPictDesc, _
uGUID, _
0&, _
CreatePictureFromClipboard)
End Function
とこんな感じの関数を作成して、ビットマップデータを Picture オブジェクト
に変換してやります。例えばユーザーフォームの Image1 なら、
Private Sub CommandButton1_Click()
Set Image1.Picture = CreatePictureFromClipboard()
End Sub
で呼び出します。
> エクセルのグラフやシェイプをマクロを使い、bitmap形式で保存する方法は
> ありませんか?
グラフなら Chart オブジェクトに Export メソッドがあるので、それを使って
Bitmap とか Gif で保存できたと思います。
Worksheets("Sheet1").ChartObjects(1).Chart.Export _
FileName:="Sample.bmp", FilterName:="BMP"
シェープも一度コピーしたものを Chart オブジェクトの ChartArea にペースト
することで同様に保存できます。ただ、余計な余白などができたりして、あまり
お勧めできません。
Image コントロール経由でもよければ、
Private Sub CommandButton2_Click()
stdole.SavePicture Image1.Picture, "C:\sample.bmp"
End Sub
とか。この場合、Bitmap 限定です。
以上の方法なら VBA 標準の機能で済みますが、きめ細かな制御が必要なら
どうしても API を使うか、GdiPlus などを使うことになります。GdiplusStartup
などをキーワードで調べてみて下さい。
なお、GdiPlus を使った場合、ファイル形式を Jpeg や Png などに変更することも
可能です。
また、明熊さんがフリーで公開されている SaveJPG.DLL も割と簡易なコードで
Jpeg 保存が可能で大変便利です。
http://www.vector.co.jp/soft/win95/prog/se093621 …
No.1
- 回答日時:
こちらをご参照ください。
http://www.keep-on.com/excelyou/2003lng4/200302/ …
ぱげさんのマクロをエクセルにコピーして、クリップボードの画像データがファイルに保存されることを確認しました。
このoPictureをImage1に直接コピーする方法はわかりませんが、保存されたビットマップファイルをLoadPictureすればImage1に表示されることは確認しました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルでcsvファイルを開いてVBAを使いたい 7 2022/04/28 11:12
- Visual Basic(VBA) エクセルマクロでアニメを作る方法を教えてください。 1 2023/02/07 14:27
- Excel(エクセル) 【マクロ】マクロが保存されているエクセルとは、別のエクセルブックの全シートの非表示列を再表示したい 1 2022/12/24 20:48
- Visual Basic(VBA) DisplayAlertsブロパティで ”実行時エラー424オブジェクトが必要です” 5 2022/05/15 18:02
- Word(ワード) LibreOfficeで数年保存しているデータの変更作業 4 2022/07/08 17:15
- Excel(エクセル) エクセルの散布図で新たに入力した値のデータラベルが空欄になる現象 1 2022/04/26 09:31
- Excel(エクセル) 【VBA】エクセルで選択した範囲の値のみをクリップボードにコピーするコードについて 3 2023/03/08 17:41
- Excel(エクセル) 【マクロ】マクロが保存されているエクセルとは、別のエクセルのオートフィルターのしぼりをクリアーしたい 2 2022/12/24 08:36
- Excel(エクセル) 下記エクセルの式がなぜこうなるのか理由が知りたいです。 6 2022/08/20 00:43
- Visual Basic(VBA) vbaエクセルマクロについて あるデータを作成し、デスクトップに.xlsx形式で保存するマクロを作成 2 2023/03/02 18:54
このQ&Aを見た人はこんなQ&Aも見ています
-
性格の違いは生まれた順番で決まる?長男長女・中間子・末っ子・一人っ子の性格の傾向
同じ環境で生まれ育っても、生まれ順で性格は違うものなのだろうか。家庭教育研究家の田宮由美さんに教えてもらった。
-
EXCEL VBA 複数のImageコントロールにクリップボードに保存されている画像を表示したい
Visual Basic(VBA)
-
エクセルのVBAでクリップボードにコピーした画像をpng(or jpg or bmp)保存したい
Visual Basic(VBA)
-
【エクセル】シート内の表をUserFormに画像として表示させる方法
Excel(エクセル)
-
-
4
エクセル ユーザーフォームにオートシェープ(図形)を貼り付けるこは可能なのでしょうか?
Excel(エクセル)
-
5
エクセルで貼り付けたオブジェクトの画像をユーザーフォームのイメージコントロールで表示する方法
Excel(エクセル)
-
6
VBA ユーザーフォーム Image1 貼り付け画像の保存?
Visual Basic(VBA)
-
7
VBAのユーザーフォームのイメージコントロールに読み込んだ画像を左に90°回転させたい
Visual Basic(VBA)
-
8
Excel ユーザーフォームで表示させた画像をユーザーフォーム上で保存したい
Visual Basic(VBA)
-
9
VBAでユーザーフォームの表示を確認
Visual Basic(VBA)
-
10
【VBA】 Alt+PrintScreenにてアクティブウィンドウのスクショを貼付する方法
Excel(エクセル)
-
11
vba クリップボードクリアについて教えてください
その他(プログラミング・Web制作)
-
12
エクセルVBAでセル番地を指定してオブジェクト名取得
Excel(エクセル)
-
13
ユーザーフォームで動的(Me.Controls.Add)に作成したコントロールの削除
Visual Basic(VBA)
-
14
クリップボードの内容を変数に取り込みたい(EXCEL VBA)
Visual Basic(VBA)
-
15
ユーザーフォームをホイールでスクロールする方法(Excel2000VBA)
Excel(エクセル)
-
16
Imageコントロールにグラフを表示させるには
Visual Basic(VBA)
-
17
EXCEL VBAで全選択範囲の解除
Excel(エクセル)
-
18
Excel VBA:フォーム←→セルのアクティブ切り替え
Excel(エクセル)
-
19
エクセルVBAでフォームのListboxをスクロールするには?
その他(Microsoft Office)
-
20
メッセージボックスを前面に表示させるには?
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
アクセスVBAのMe!と[ ]
-
openGLにおいて描画した物体に...
-
クリスタルレポートのプレビュ...
-
【エクセルのマクロ】クリップ...
-
Excel VBAでマウスの左クリック...
-
HTMLでこの画像を表示したいで...
-
uwscについて、同一の画像(仮...
-
「PC Helpsoft Driver Updated...
-
「ご処理進めて頂きますようお...
-
リョウ・・・量?料?
-
FFTの結果ついて
-
お家デートをしててハグを長い...
-
Googleフォーム・複数人の申し...
-
Excelシート上のマクロを登録し...
-
エクセルVBAで、MsgBox やInput...
-
同じ画像を複数回表示させる
-
VBAにてメッセージボックスを最...
-
Excel ラジオボタンのリセット...
-
メルカリのメルカードで買い物...
-
背景画像の繰り返しについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBA エンターキーでイベントに...
-
アクセスVBAのMe!と[ ]
-
文字列で小数点以下の0を削除し...
-
Excel VBAでマウスの左クリック...
-
【エクセルのマクロ】クリップ...
-
エクセルVBAでセル番地を指定し...
-
Accessのフォーム上にエクセル...
-
コードでオブジェクトを最前面に
-
日本語の文字化けを直す方法
-
現在アクティブになっているオ...
-
Imageコントロールにグラフを表...
-
Excel2007 でのチェックボック...
-
PowerpointVBAで指定のShapeオ...
-
Access からオブジェクトとして...
-
エクセルのデータをwebフォーム...
-
【エクセル】複数のTextBoxに共...
-
[C#] DataGridViewの項目名
-
カッコ付けのオブジェクト名を...
-
ExcelのシートをAccessで表示し...
-
ユーザーフォームのインポート...
おすすめ情報