19日目 図形2日目とフォームコントロール

今日は昨日に引き続き図形の勉強と、フォームコントロールを勉強した。


図形は今日は軽く昨日の続きを勉強したくらいで、昨日の続きから勉強しようとした部分が少し難しかった。とりあえず今の時点では自分には難しい内容だったので、もっとスキルが上がったら本格的に勉強しようと思う。

 

今日はフォームコントロールを主体に勉強した。
フォームコントロールは基本Shapeオブジェクトとして扱えるみたい。


だけどShapeオブジェクトに無いプロパティやメソッドを指定するとエラーになってしまうので、
その場合はフォームコントロールのコレクションを指定する必要があるとの事。

 

フォームコントロール自体Excelでほとんど使った事が無いから、いまいち勉強していてもピンとこなかった。
でもせっかく勉強しているので、何か自分の知識になればと思って色々ネットで調べてみる。

 

すると、Excelのシート上にあるコンボボックスにシートの値を表示させるやり方が載っているページを発見。
内容はExcelVBAではなくExcelで設定する内容だった。

 

一応自分でもExcelのシート上にコンボボックスを配置してやってみたけど、なぜか上手くいかない。
Excelの勉強不足を露呈している。。

 

でもコンボボックスのListFillRangeプロパティにセル範囲を設定すれば、シートのセル範囲の値が表示されるのを見ていてExcelVBAでも出来るんじゃないかと確信する。


なので色々調べて出来たコードが以下↓

Sub sample1()
    Dim ws As Worksheet
    Set ws = ActiveSheet
    Dim sp As Shape
    Set sp = ws.Shapes.AddFormControl(xlDropDown, 50, 50, 100, 20)
    Dim MyRange As Range
    Set MyRange = Range("B2:B11")
    sp.ControlFormat.ListFillRange = MyRange.Address
End Sub

 

ShapesコレクションのメソッドでAddFormControlメソッドというのがあった。
従来からExcelにあるActiveXコントロール以外のコントロールを作成するメソッドらしい。
このメソッドを使ってシート上にコンボボックスを作成出来た。

 

作成したコンボボックスをオブジェクト変数spに入れて、コンボボックスに設定するセル範囲をオブジェクト変数MyRangeに入れる。
そしてShapeオブジェクトのプロパティでControlFormatプロパティを使う。
ActiveXコントロール以外のコントロールのプロパティを含むControlFormatオブジェクトを取得出来るらしい。

 

ControlFormatオブジェクトのプロパティで、先程調べたページのListFillRangeプロパティを見つけた。
これにセル範囲を設定すれば、コンボボックスにシート上のセル範囲の値が表示されるはず。

 

早速実行してみたら、コンボボックスにシート上のセル範囲の値を表示させる事に成功。
手探りだけどやってみるもんだなと思った。

 

これでまた1つ勉強になった。
まあ今日の収穫はこれくらいだけど。