![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
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
![「ExcelのVBAで」の質問画像](http://oshiete.xgoo.jp/_/bucket/oshietegoo/images/media/5/474450_5497bb9ed3667/M.jpg)
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
この回答への補足
watabe007様 回答ありがとうございます。
回答して頂いた内容で試したところ、無事解決しました。(画像をクリックした際に特定セルに思惑通り諸元が表示出来ました。)
ただしこの方式の場合、新たな問題が発生しました。(Excelの仕様で仕方が無いのかもしれませんが)
というのも画像をクリックした時に今までだと画像が変更できる状態(移動やリサイズ)だったものがクリックイベントが優先されるためか
画像が移動もリサイズも出来ない状態になりました。
マウスの右ボタンを押せば、今まで通り移動やサイズ変更が可能になることは確認できたのですが、使う人の都合で出来れば右ボタンは
使いたく無いというのが希望です。
何か他に解決方法はありませんでしょうか?
上記補足での問題、自己解決しました。
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#)
No.3
- 回答日時:
コンボボックス関係ないのね……。
先に良い回答が出て居ますが、私も各シェイプのAlternativeText に情報を持たせた方が良いと思います。
AlternativeText は、本来はブラウザが画像を読み込んでいる間に代わりに表示する文字列ですが、ここに諸元データを入れてしまっても問題ないでしょう。
この回答への補足
mt2008様 当方の拙い質問で申し訳ありませんでした。
ただ、watabe007様の回答の補足に追記させて頂きましたがAlternativeTextの方式の場合、新たな問題が発生しました。
他に何か解決策があればご教授願います。
自己解決しました。
諸元データを書き込む際に.nameにユニークな名前を与えて
識別出来ました。
アドバイス頂いた方々ありがとうございました。
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)
これ以外の諸元データは何を指しているのか不明なので省略します。
まったく的外れの回答でしたらごめんなさい。
![「ExcelのVBAで」の回答画像1](http://oshiete.xgoo.jp/_/bucket/oshietegoo/images/media/2/1241782_5497df9b9b304/M.jpg)
この回答への補足
mt2008様 回答ありがとうございました。
ご回答頂いた内容は、今回の問題箇所と違う部分がありますので質問を補足させて頂きます。
コンボボックスより選択したアイテムの画像をコマンドボタンCLICK時にシート上に挿入します。
挿入されるアイテム数は100アイテムとします。
ユーザーが挿入されたアイテムをマウスでクリックした時にシートの左側に諸元を表示したいのが要件です。
問題点としては、挿入した画像のイベントをどうやって拾うのか?(イベントが発生するのか?)
イベントが発生し、クリックした画像が特定できればご回答頂いた内容の様にvlookup関数やVBAでシートに諸元を表示する事は可能だと思っています。
画面のサンプルで説明すると、ユーザーはコンボボックスより赤色と青色の画像を選択し配置しました。
配置した青色の画像をクリックする事によりシート左側に諸元を表示したいと言う事です。(赤い画像を選べば赤の画像の諸元を表示)
まだ説明不足な点があると思いますが宜しくお願い致します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Visual Basic(VBA) 【VBA】写真の縦横比を変えずに貼り付ける 5 2023/06/13 11:42
- PowerPoint(パワーポイント) ExcelのVBAコードについて教えてください。 3 2022/05/25 14:32
- Excel(エクセル) エクセル VBA For Next 繰り返しの書き方を教えてください 6 2022/09/01 14:11
- Excel(エクセル) EXCELのグラフを画像(JPG形式)で保存、通常実行がうまく行かない。ステップインはうまく行く 3 2022/08/30 12:06
- Visual Basic(VBA) VBAでoutlook365が起動しません。 4 2022/08/25 13:31
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) VBA 参照先で選んだファイルをコピーし、出力先に別名で保存したい 8 2022/05/13 20:37
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
- Excel(エクセル) フォルダ内のワードファイルをPDFに一括変換するVBA 3 2023/06/09 16:51
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
googleドライブ 共有フォルダ ...
-
アイテム の意味がわかりませ...
-
データコンバート(続編への引...
-
Google Playで予約購入した漫画...
-
好みの楕円形を描きたい時は、...
-
エホバやると何故キモくなった...
-
パラサイトイブのアイテム
-
FF11 ノートパソコンでバザ...
-
ニューマリ>ニューマリWii>ニュ...
-
ファイアーエムブレム聖戦の系...
-
送信済みメールが表示されない...
-
バンドリなんですけど、 このチ...
-
wedo。ウィーデューはどういう...
-
PS2 ドラクエ8 名もなき小島 ...
-
PSPで文字化け?
-
VBのPrintersコレクションにつ...
-
モンハン2ndG
-
FF10のミヘン街道・北側 ミヘ...
-
マジックポットの倒し方を教え...
-
ドラクエ8の練成について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
アイテム の意味がわかりませ...
-
googleドライブ 共有フォルダ ...
-
Windows11で「フォト」の外部ア...
-
口臭ケアのおすすめのアイテム...
-
アプリゲーム内の課金について...
-
FF10のミヘン街道・北側 ミヘ...
-
PS2 ドラクエ8 名もなき小島 ...
-
Google Playで予約購入した漫画...
-
パラサイトイブのアイテム
-
マリオカートはアイテム次第で...
-
モンストの モンスポットのアイ...
-
ポケモンホワイト2
-
VBのPrintersコレクションにつ...
-
SFC版の「スーパーマリオカート...
-
FF4 アイテム管理
-
ドラゴンクエスト8で…
-
アンジェリークデュエットの攻略
-
mod入りマイクラ1.7.10でバグり...
-
データコンバート(続編への引...
-
FF7 クラウド 究極リミット技...
おすすめ情報