プロが教える店舗&オフィスのセキュリティ対策術

エクセルで画像をオブジェクトで作り、ユーザーフォームに作ったイメージコントロールに表示する方法はないでしょうか?
条件によってイメージの画像が切り替わるようにしたいのですが。
別の画像ファイルから読み出すことはあまりしたくありません。あくまでエクセルの中にある画像からフォームのイメージに表示したいのですが。何かいい方法があれば教えてください。

回答よろしくお願いします。

A 回答 (4件)

(#2コメントへのレスです)


とりあえず
http://www.google.co.jp/search?q=win32api%E3%81% …
http://wisdom.sakura.ne.jp/system/winapi/win32/w …
VB系から扱うなら
http://www.winapi-database.com/Beginner/page1.html
ですが、中途半端に手を出すと少々やっかいかも。当り前の事ですが、自己責任でお願いします。

それより
>本当はワークシート上で画像を表計算のデータと同じようにデータとして扱って作りたかったのです
なら
http://www.officetanaka.net/excel/function/tips/ …
http://www.geocities.jp/chiquilin_site/data/0505 …
...のあたりが参考になるかもしれませんね。
    • good
    • 0
この回答へのお礼

説明不足で申し訳ありませんでした。
このプログラムは初心者にとってはやはり難しいですね。
下の二つのサイトは大変参考になりました。

ありがとうございました。

お礼日時:2007/07/13 23:26

#1です。



シートに画像を置いてUserFormで使う場合は、コントロールツールボックスのイメージを使うと割と楽です。

下記はUserFormのコマンドボタンを押すたびに画像を入れ替えるサンプルです。
試す場合は手順に従って新規ブックでどうぞ。

1)新規ブックを起動する。
2)表示-ツールバー-コントロールツールボックスを表示する。
3)コントロールツールボックスの「イメージ」を Sheet1 に複数配置する。
4)それぞれプロパティの Picture で画像を設定する。
5)ツール-マクロ-VisualBasicEditorを起動する。
6)UserFormを追加する。
7)UserForm1 に Image1 と CommandButton1 を配置する。
8)CommandButton1 をダブルクリックして、出て来たコードを全て消してから下記をコピペ。

'---------ここから--------------------------------------------------------

Dim cnt As Integer

Private Sub UserForm_Initialize()
  cnt = 1
  ImageChange
End Sub

Private Sub CommandButton1_Click()
  ImageChange
End Sub

Private Sub ImageChange()
 On Error Resume Next
 With Worksheets(1)
  If cnt > .OLEObjects.Count Then cnt = 1
    Image1.Picture = .OLEObjects("Image" & cnt).Object.Picture
    cnt = cnt + 1
 End With
End Sub

'---------ここまで--------------------------------------------------------
    • good
    • 3
この回答へのお礼

丁寧に教えていただきありがとうございます。
若干使ったことがないコードもありますが参考にして勉強したいと思います。

ありがとうございました。

お礼日時:2007/07/14 15:23

こんにちは。


>別の画像ファイルから読み出すことはあまりしたくありません。
との事なので、かなり難易度があがると思います。
ActiveSheet.Shapes(1).CopyPicture Appearance:=xlScreen, Format:=xlBitmap
などとしてClipboardに送った後、 QNo.2885043 を参考にWindowsAPIを使う事になるかと。
VBAだけで比較的簡単にやるなら

Const fn As String = "c:\tmpshp.jpg"
With ActiveSheet
  If .Shapes.Count Then
    With .Shapes(1)
      .Copy
      With .Parent.ChartObjects.Add(, , .Width + 5, .Height + 5)
        With .Chart
          .ChartArea.Border.LineStyle = 0
          .Paste
          .Export Filename:=fn
        End With
        .Delete
      End With
    End With
    Me.Image1.Picture = LoadPicture(fn)
    Kill fn
  End If
End With

と、.Chart.Exportメソッドを使って一旦ファイル作成し、読み込み後 Kill で削除します。
『画像ファイルから読み出すこと』になるのでボツかもしれませんが....

この回答への補足

APIを使って全く作ったことがないので「QNo.2885043」 のプログラムが全く理解できませんでした。
初心者なのですいません。
そのようなことを書いているおすすめのサイトや本などはあるのでしょうか?
よろしくお願いします。

補足日時:2007/07/13 08:44
    • good
    • 0

意図されているものと異なるかも知れませんが、、、


シート上ではなくて、UserForm に Image1 と Image2 を持たせて Visible を切替えるとか。
    • good
    • 0
この回答へのお礼

なるほど、そういう手がありますね。
本当はワークシート上で画像を表計算のデータと同じようにデータとして扱って作りたかったのですが、参考にします。

ありがとうございました。

お礼日時:2007/07/13 10:48

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A