• ベストアンサー

ExcelのVBAで

Excel2007のVBAで以下のことは可能でしょうか? Sheet1の上にコンボボックス(アイテムリスト)とコマンドボタン(配置用ボタン)を設置しています。 コンボボックスよりユーザーがアイテムを選択してコマンドボタンを押すことで対応するアイテムの画像をシートに挿入します。 シートに挿入する画像は、最大100アイテムを予定しています。 困っている部分が、挿入したアイテムをユーザーがマウスでクリックしたときに VBAでどの画像が選択されたかを判断することは可能でしょうか? アイテムがクリックされると同時にクリックされたアイテムのコードや名称等の諸元データを特定のセルに表示をしたいという事が行いたいのです。 以上、何かヒントや解決方法があればご教授願います。 図の挿入に関しては下記のロジックで挿入しています。 Private Sub CommandButton1_Click() dim pc(100) as shape dim flname as string '画像のファイル名は、"pic" + コード + ".jpg" 'A1にはコンボボックスで選択されたコードが設定されています。 flname = "pic" & Worksheets("sheet1").Range("a1").Value & ".jpg" 'idxはGlobal変数です。 idx = idx + 1 Set pc(idx) = ActiveSheet.Shapes.AddPicture(Filename:=flname, LinkToFile:=True, savewithdocument:=False, Left:=Selection.Left, Top:=Selection.Top, Width:=100#, Height:=100#) end sub

質問者が選んだベストアンサー

  • ベストアンサー
  • watabe007
  • ベストアンサー率62% (476/760)
回答No.2

>Set pc(idx) = ActiveSheet. ・・・・・ '取込写真に代替テキスト設定 With pc(idx)   '取込写真に代替テキスト設定   .AlternativeText = アイテムのコードや名称等の諸元データ   '写真をクリックしたときにShapeClick プロシージャを   '実行するようにします。   .OnAction = "ShapeClick" End With Sub ShapeClick()   特定セル.Value = ActiveSheet.Shapes(Application.Caller).AlternativeText End Sub

zauber99
質問者

お礼

上記補足での問題、自己解決しました。 ShapeClick()のサブルーチンの最後に ActiveSheet.Shapes(Application.Caller).Select とすると、画像が選択した状態(移動やリサイズ可能)になりました。 ただし、新たな問題が発生しました。 同じ画像を挿入した場合、画像を選択すると一番最初に挿入した画像が選ばれてしまい、2番目以降の画像が選択できなくなりました。 原因は、画像挿入時に同じファイル名を使用している為、Excel上の画像の名前が同じ名前になっている為だとまでは検討がつきました。 が、どうやって解決出来るのか悩んでいます。 何か良い解決策があればご教授下さい。 画像の挿入時に下記の命令で行っていますが、この場合、同じ画像を挿入した場合、ファイル名が同じとなり区別がつかなくなっていると思われます。 ActiveSheet.Shapes.AddPicture(Filename:=flname, LinkToFile:=True, savewithdocument:=False, Left:=Selection.Left, Top:=Selection.Top, Width:=100#, Height:=100#)

zauber99
質問者

補足

watabe007様 回答ありがとうございます。 回答して頂いた内容で試したところ、無事解決しました。(画像をクリックした際に特定セルに思惑通り諸元が表示出来ました。) ただしこの方式の場合、新たな問題が発生しました。(Excelの仕様で仕方が無いのかもしれませんが) というのも画像をクリックした時に今までだと画像が変更できる状態(移動やリサイズ)だったものがクリックイベントが優先されるためか 画像が移動もリサイズも出来ない状態になりました。 マウスの右ボタンを押せば、今まで通り移動やサイズ変更が可能になることは確認できたのですが、使う人の都合で出来れば右ボタンは 使いたく無いというのが希望です。 何か他に解決方法はありませんでしょうか?

その他の回答 (2)

  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.3

コンボボックス関係ないのね……。 先に良い回答が出て居ますが、私も各シェイプのAlternativeText に情報を持たせた方が良いと思います。 AlternativeText は、本来はブラウザが画像を読み込んでいる間に代わりに表示する文字列ですが、ここに諸元データを入れてしまっても問題ないでしょう。

zauber99
質問者

お礼

自己解決しました。 諸元データを書き込む際に.nameにユニークな名前を与えて 識別出来ました。 アドバイス頂いた方々ありがとうございました。

zauber99
質問者

補足

mt2008様 当方の拙い質問で申し訳ありませんでした。 ただ、watabe007様の回答の補足に追記させて頂きましたがAlternativeTextの方式の場合、新たな問題が発生しました。 他に何か解決策があればご教授願います。

  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.1

シートとコンボボックスの連係が良く判らないと言うことでしょうか? VBAじゃないですが、ご参考までに……。 アイテム名とコードが並んだリストはシート上に有りますよね。 例えば、A10:B15にそのリストがあるとします(A列がアイテム名、B列がコード)。 コンボボックスのプロパティにListFillRangeと言う項目がありますので、ここに「Sheet1!A10:A15」と入力します。 次にLinkedCellに、「Sheet1!A2」と入力します。 これで、コンボボックスのリストにはA10:A15の項目が表示され、選択されたアイテムはA2に表示されます コードを表示したいなら、A2の値を使って、次のセル式を表示したいセル(A1?)に =VLOOKUP(A2,A10:B15,2,FALSE) これ以外の諸元データは何を指しているのか不明なので省略します。 まったく的外れの回答でしたらごめんなさい。

zauber99
質問者

補足

mt2008様 回答ありがとうございました。 ご回答頂いた内容は、今回の問題箇所と違う部分がありますので質問を補足させて頂きます。 コンボボックスより選択したアイテムの画像をコマンドボタンCLICK時にシート上に挿入します。 挿入されるアイテム数は100アイテムとします。 ユーザーが挿入されたアイテムをマウスでクリックした時にシートの左側に諸元を表示したいのが要件です。 問題点としては、挿入した画像のイベントをどうやって拾うのか?(イベントが発生するのか?) イベントが発生し、クリックした画像が特定できればご回答頂いた内容の様にvlookup関数やVBAでシートに諸元を表示する事は可能だと思っています。 画面のサンプルで説明すると、ユーザーはコンボボックスより赤色と青色の画像を選択し配置しました。 配置した青色の画像をクリックする事によりシート左側に諸元を表示したいと言う事です。(赤い画像を選べば赤の画像の諸元を表示) まだ説明不足な点があると思いますが宜しくお願い致します。

関連するQ&A

専門家に質問してみよう