[[20121101165007]] 『チェックボックスでアイコンを入れ替える』  ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『チェックボックスでアイコンを入れ替える』

こんにちは。いつもご教授いただいてます。
今回 EXCELのチェックボックスをつかい、何もチェックを入れていない場合は
a.jpg のアイコンを、チェックが入れば b.jpg の画像をそれぞれチェックボックスの
すぐ横に表示したいです。
つまりデフォルトでは、aのアイコン、チェックが入ればbのアイコンを表示します。
アイコンの大きさは5×15pxくらいで、すべての画像はマイコンピュータのcドライブの
中の、Aフォルダに入っています。

それともう1つ、ご質問です。
表示したいアイコンが4種類ほどある場合、チェックボックスでは補えませんが、
なにかほかにいい方法はありますでしょうか??
いろいろ試してみましたが、図をうまく表示させる方法が見当たらなくて
行き止まっておりました。

ご教授くださいませ。

windows 7
excel 2010
(かなこ)


 シート上のチェックボックスはフォームコントロール? ActiveXコントロール?

 いずれにしても、(VBAで)できるけど、アイコンか、図形かのチェックボックスに加えて
 アイコンの場合には、どのアイコンというのをオプションボタンで指定させるようにすることがいいんじゃない?

 (ぶらっと)

ぶらっとさんありがとうございます。

フォームコントロール、ActiveXコントロールの区別が申し訳ないことにわかりませんが、
「オプションボタンで指定させるようにすること」 のやり方をご教授いただきたいです。

お手数おかけします。

(かなこ)


 >フォームコントロール、ActiveXコントロールの区別が申し訳ないことにわかりませんが

 これが重要なので。
 このチェックボックスをシートに配置したときに、開発タブの挿入を使ったよね?
 そのとき、コントロールを選択する小さなダイアログの上の部分がフォームコントロール、
 下の部分がActiveXコントロールなんだけど、どちらのチェックボックスを選んだのかな?

 それと、たぶん、本件は、チェックボックスは使わず、画像分も含めて、オプションボタンを
 配置して、チェックされたオプションボタンに相当するものをフォルダからひっぱってくるようにしたほうが
 いいと思うね。

 いずれにしてもフォームコントロールなのか、ActiveXコントロールなのか教えてほしい。

 ★あるいは、どちらでもいいのなら、こちらでやりやすいほうにして、コード案を書いてみるけど?

 (ぶらっと)

ぶらっと様

はい、よろしくお願いいたします。
合計5つのアイコンを設置したいと思っております。

カタログ構成の下書きを進めており、画像の下にスペックを設けていまして。
その画像とスペックの間に3行ほど空白があり、そこにアイコンを入れたいと思ってます。

5つのアイコンの内訳は
・新商品には「NEW」のアイコンを、そうでないものはアイコンなし。
・鉢の商品には、「5号」「4号」「3号」など、何種類かのアイコンを設置。規格外のものはアイコンなし。
・ライナー付の商品は「ライナー付き」そうでないものは「ライナーなし」
・穴ありは「穴あり」、なしのものはアイコンなし。
・ビニール付きのものは「ビニール付き」、そうでないものはアイコンなし。

のように毎回画像を張っていくのは大変な労力でした。300ページほどありますので、
チックボックスなどなにか便利なものがあれば、ワンクリックで指定の画像がすぐ反映されればと
考えた次第でございます。

(かなこ)


 とりあえず試作品。画像をセットする場所や大きさ等、これから聞きながら調整しよう。
 また、おそらくは、このように指定して画像を貼り付けるものが、他にもたくさんあって
 今回のものは、その中の1つだと想像する。
 最終的には、そういったものも追加組み込みしていくことになるんだと思うけど、まずは、この1組で。

 ・コントロールは「フォームコントロール」を使う。
  上でレスしたように開発タブの挿入ボタンをおしてでてくるコントロール群の上の部分。
 ・準備
  1)まず、コントロールの中から「グループボックス」を選んでシートのどこかにセット。
    このグループボックスには、このグループで選択しようとするオプションボタンが入るので
    それらが入る充分に大きなサイズで。
    で、このグループボックスを選択した状態で、エクセル画面左上の名前ボックスを、
    GRP_A と打ち直してエンター。このグループボックスの名前を変更する。
    このグループボックスのキャプションも、適切な言葉に変更しておいてもいいね
  2)次に、コントロールの中からオプションボタンを選び、このグループボックス内に配置。
    オプションボタンを選択した状態で、左上の名前ボックスに OPTA_1 と打ち直してエンター。
    グループボックスと同様にキャプションを、画像名称になおしておいてもいいね。
  3)あと、必要な数だけオプションボタンを配置。名前は OPTA_2 OPTA_3 といったようにしておく。
    下でアップするコードは、ここに6つのオプションボタンがある(OPTA_1〜OPTA_6)というサンプル。
  4)標準モジュールに以下のコードを貼り付けた後、このオプションボタンをCTRLキーを押しながら
    すべて選んで右クリック。マクロの登録で、PicSetAを登録する。
  5)とりあえず画像は、グループボックスがある左隣のセルに貼り付けるので、その列幅は、少し大きめに。
    コードでは、フォルダから持ってきた画像の縦横比を維持しながら横幅を、この貼り付ける列幅にあわせている。

 で、標準モジュールに以下。
 picName = Array("aaa.jpg", "bbb.jpg", "ccc.jpg", "ddd.jpg", "eee.jpg", "fff.jpg")(n - 1)
 ここには左から、OPTA_1 〜 に相当する画像ファイル名を記述。

 Sub PicSetA()
    Dim n As Long
    Dim picName As String

    n = Split(Application.Caller, "_")(1)
    picName = Array("aaa.jpg", "bbb.jpg", "ccc.jpg", "ddd.jpg", "eee.jpg", "fff.jpg")(n - 1)
    Call PicSet("GRP_A", picName, "myPicA")
 End Sub

 Private Sub PicSet(grp As String, pic As String, shp As String)
    Dim n As Long
    Dim myPath As String
    Dim myPic As Object
    Dim l As Double, t As Double, w As Double

    myPath = "c:\A\"
    With ActiveSheet.Shapes(grp).TopLeftCell.Offset(, -1)
        l = .Left
        t = .Top
        w = .Width
    End With

    On Error Resume Next
    ActiveSheet.Shapes(shp).Delete
    On Error GoTo 0
    With ActiveSheet.Shapes.AddPicture(Filename:=myPath & pic, LinkToFile:=False, _
        SaveWithDocument:=True, Left:=l, Top:=t, _
        Width:=0, Height:=0)            'とりあえず 縦横0で。
        .ScaleHeight 1, msoTrue         'いったん元のサイズに戻す
        .ScaleWidth 1, msoTrue          'いったn元のサイズに戻す
        .LockAspectRatio = msoTrue      '縦横比維持
        .Width = w                      '横幅を列幅にあわせる(縦は自動調整)
        .Name = shp
    End With

 End Sub

 (ぶらっと)

 追加で。

 よく読んでみると、画像があって、これは必ず表示して、その他にアイコンを追加貼り付けするかしないか。
 そういう要件だったのかな?

 アップした試作品は、画像でもアイコンでも同じように、選択された1つだけを 貼り付ける構成になっている。
 まずは、新規ブックで、アップしたコードを試してみてね。

 もし、画像は必ず、アイコンは指定によってということなら、アップしたコードで、おおよそOKになった後で
 コード改訂するので。

 (ぶらっと)

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.