今日は昨日に引き続き図形の勉強と、フォームコントロールを勉強した。
図形は今日は軽く昨日の続きを勉強したくらいで、昨日の続きから勉強しようとした部分が少し難しかった。とりあえず今の時点では自分には難しい内容だったので、もっとスキルが上がったら本格的に勉強しようと思う。
今日はフォームコントロールを主体に勉強した。
フォームコントロールは基本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つ勉強になった。
まあ今日の収穫はこれくらいだけど。