午後わてんのブログ

ベランダ菜園とWindows用アプリ作成(WPFとC#)

ワークシート上にある画像をユーザーフォームで使うには

ワークシート上にある画像をユーザーフォームやボタンで使うにはどうしたらいいのか
正確には、ユーザーフォームで表示する画像をワークシートに用意する方法は
シートへの画像貼り付けはActiveXコントロールのイメージを使う
 
 

f:id:gogowaten:20191015161447p:plain

UserForm1のCommandButton1に
イコン画像という名前のシート上にあるActiveXコントロールのImage1の画像を表示したところ
 
f:id:gogowaten:20191015161501p:plain
ActiveXコントロールのイメージを挿入して
右クリックでプロパティを表示
プロパティのPctureに目的の画像を指定するでシートへの画像貼り付け完了
あとは
CommandButton1.Picture = Sheets("アイコン画像").Image1.Picture
これでOK
 
 
エクセルで貼り付けたオブジェクトの画像をユーザーフォームのイメージコントロールで表示する方法 - 楽天 みんなで解決!Q&A
にある
papayukaさんの回答がきっかけになった
 
 
普通はユーザーフォームに画像を表示するには
CommandButton1.Picture = LoadPicture("F:\png\画像1赤小.gif")とかで
PictureのプロパティにLoadPictureで画像のアドレスを指定すればいいんだけどシート上の画像を使ってみたかったので
CommandButton1.Picture = Sheets("アイコン画像").OLEObjects("Image1").Object.Picture
 
本当は図の挿入から貼り付けた画像から使いたかったんだけど、普通には使えないらしい、見えているのにw
ActiveXコントロールのイメージはOLEObjectsってのになるみたいでこれも初めて使った

試していたら
CommandButton1.Picture = Sheets("アイコン画像").Image1.Picture
だけでもいいみたい?動いた

f:id:gogowaten:20191015161551p:plain

 
 
PCの中の画像ファイルを読み込む場合の不都合はその画像を移動、削除、名前の変更したときにコードを書き換えないとエラーになること
だったらユーザーフォームのデザインの画面のPictureプロパティで予め指定してエクセルファイルに埋め込んで?おけばいいかもしれないけど、これだとボタンを押した時に画像を切り替えるなどができない
これも複数のボタンを用意してそれぞれに画像を指定してVisibleプロパティで表示のオン、オフを切り替えればいいけどめんどくさい
今の午後のパレットはこのめんどくさい方式でセルと文字のアイコンの切り替えをしている
今回のを使えば見た目は全く変わらないけど気分的に少しいいかんじになるかなあ