C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Excelのワークシート内に画像をユーザーフォームに表示

[トピック内 5 記事 (1 - 5 表示)]  << 0 >>

■96559 / inTopicNo.1)  Excelのワークシート内に画像をユーザーフォームに表示
  
□投稿者/ エイ (4回)-(2020/12/16(Wed) 22:21:07)

分類:[.NET 全般] 

Excel2019 VBA

Excelのワークシート内に画像をユーザーフォームに表示させるにはどうしたらいいのでしょうか?


挿入した画像(図形)名Image_1
ユーザーフォーム:Image1

コード

Private Sub ComboBox1_Change()

If ComboBox1.ListIndex >= 0 Then

'画像
Image1.picture = Sheets("シート名").Image1("Image_1)"'※1

End If

End Sub

教えてほしい事

・ファイルパスではなく、ワークシート内で挿入した画像をユーザーフォームのImage1に表示させたい。
※1
現在この部分で悩んでます。

画像ファイルは600個ありますが、試しに一個で作って検証しております。

よろしくお願いします。
引用返信 編集キー/
■96560 / inTopicNo.2)  Re[1]: Excelのワークシート内に画像をユーザーフォームに表示
□投稿者/ kiku (210回)-(2020/12/17(Thu) 11:18:01)
No96559 (エイ さん) に返信
> Excelのワークシート内に画像をユーザーフォームに表示させるにはどうしたらいいのでしょうか?

ユーザフォームは下記のような感じ?
https://jizilog.com/vba-formpic

上記のような感じであれば、画像へのパスを
ユーザフォームに教えてあげればできることになります。
その方法は下記が参考になりそう。
https://excel-ubara.com/excelvba3/EXCELFORM009.html

自分だったら、グローバル変数使うかもです。
引用返信 編集キー/
■96561 / inTopicNo.3)  Re[1]: Excelのワークシート内に画像をユーザーフォームに表示
□投稿者/ 魔界の仮面弁士 (2939回)-(2020/12/17(Thu) 11:23:49)
No96559 (エイ さん) に返信
> Excelのワークシート内に画像をユーザーフォームに表示させるにはどうしたらいいのでしょうか?


VBA 的に手っ取り早いのは、シートにある画像を、
[開発]リボンの [コントロール]-[挿入]-[ActiveX]-[イメージ] に変更することです。

この場合、ユーザーフォームへの反映が一行で済みます。

Set Me.Image1.Picture = ThisWorkbook.Sheets("Sheet1").OLEObjects("Image1").Object.Picture



しかし通常の Picture の場合は、取り出す手段がクリップボードしかありません。

Dim pic As Excel.Picture
Set pic = ThisWorkbook.Sheets("Sheet1").Pictures("Picture 1")
Call pic.CopyPicture(xlScreen, xlBitmap)

さらに問題なのは、クリップボードから画像形式を直接取り出す方法が用意されていない点です。

Excel VBA で使える MSForms.DataObject はテキスト形式のクリップボードデータにしか対応していませんし、
VB と違って、Clipboard オブジェクトもありません。

そのため、GetClipboardData などといったクリップボード API 頼みのコードになります。
さらに、それを OLE の Picture 形式に変換するために、OleCreatePictureIndirect API も必要となるでしょう。
https://www.mrexcel.com/board/threads/refer-to-oleobject-picture-in-worksheet-from-vba.650707/
引用返信 編集キー/
■96562 / inTopicNo.4)  Re[1]: Excelのワークシート内に画像をユーザーフォームに表示
□投稿者/ ニケ (3回)-(2020/12/17(Thu) 11:44:06)
No96559 (エイ さん) に返信
ざっとググった結果、直接渡す方法は引っ掛からず、1回ファイルに保存するみたいなのはありました。
Shapeオブジェクトには画像として書き出しする仕組みが無いので、グラフを表すChartオブジェクトを経由してExport使うとか。
引用返信 編集キー/
■96563 / inTopicNo.5)  Re[2]: Excelのワークシート内に画像をユーザーフォームに表示
□投稿者/ エイ (5回)-(2020/12/17(Thu) 18:23:22)
2021/01/06(Wed) 12:15:35 編集(投稿者)

>kikuさん
>ユーザフォームは下記のような感じ?
はい、そんな感じでコンボボックス一覧から選択すると別の画像に表示を作ろうとしています。
ただ、画像ファイルパスでもいいんですが・・・。

>魔界の仮面弁士さん。

>この場合、ユーザーフォームへの反映が一行で済みます。

>Set Me.Image1.Picture = ThisWorkbook.Sheets("Sheet1").OLEObjects("Image1").Object.Picture
>しかし通常の Picture の場合は、取り出す手段がクリップボードしかありません。

>Dim pic As Excel.Picture
>Set pic = ThisWorkbook.Sheets("Sheet1").Pictures("Picture 1")
>Call pic.CopyPicture(xlScreen, xlBitmap)
>OleCreatePictureIndirect API も必要となるでしょう。
>https://www.mrexcel.com/board/threads/refer-to-oleobject-picture-in-worksheet-from-vba.650707/

ActiveX挿入やってみます。
OleCreatePictureIndirect API は調べてみます。(出来る気がしません)

>ニケ さん
>1回ファイルに保存するみたいなのはありました。

画像ファイルを保存する(ファイルパス)しがないんですよね?

3人の方回答ありがとうございました。


解決済み
引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ