Powerpoint VBA ActiveXコンボボックスの制御
昨日に引き続き,ActiveXコントロールで遊んでみました。
InputBoxとListBoxの両方の特性を持つコンボボックス。
私もAccessで物を作ったりして見ていた時は,よくお世話になっていました。
昨日の記事で imihitoさんからアドバイスを頂いたので,VBAでコンボボックスを挿入するやり方も書いておきます。
作成と同時にアイテムまで追加するのはとてもかっこいいのですが,どたばたやってる段階ではわかりませんでした。imihitoさんは同時にやってくれていますね(;´▽`A``
似たような感じで書いてみたのにな・・(;´▽`A``
まずコンボボックスを作るコード
Sub MakeCombobox() ActivePresentation.Slides(1).Shapes.AddOLEObject _ Left:=100, Top:=200, Width:=100, Height:=30, ClassName:="Forms.ComboBox.1" End Sub
けっこう簡単。シンプルですね。(昨日,自力では到達できていませんでした)
そして,アイテムを登録するコード。昨日のリストボックスと同様です。
Sub SetItems() Slide1.ComboBox1.Clear Dim Items As String: Items = "str1,str2,str3,str4,str5" Dim i As Long For i = 0 To UBound(Split(Items, ",")) Slide1.ComboBox1.AddItem Split(Items, ",")(i) Next End Sub
この部分は次のように書けるみたいですね。 AddItemでひと一つ足すんじゃなくて Listというプロパティで一気に与えれるんですねぇ。
Sub SetItems() Slide1.ComboBox1.Clear Dim Items As String: Items = "str1,str2,str3,str4,str5" Slide1.ComboBox1.List = Split(Items, ",") End Sub
ほぼ同じことですが,とてもスマートな感じです。
さて,コンボボックスのイベントのほうです。コンボボックスを作ると,ComboBox1というコンボボックスができて,
Slide1というオブジェクトがプロジェクトエクスプローラーにいると思います。その中に,下記のコードを書きます。。
Private Sub ComboBox1_GotFocus() ComboBox1.DropDown End Sub Private Sub ComboBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) If KeyCode = vbKeyReturn Then If ComboBox1.MatchFound = False Then ComboBox1.AddItem ComboBox1.Value End If ComboBox1.DropDown End If If KeyCode = vbKeyDelete And Shift = 1 Then Dim tmp As String: tmp = ComboBox1.Value If ComboBox1.MatchFound = True Then ComboBox1.RemoveItem ComboBox1.ListIndex End If ComboBox1.ListIndex = -1 ComboBox1.Value = tmp ComboBox1.DropDown End If End Sub Private Sub ComboBox1_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) ComboBox1.DropDown End Sub
過剰にDropDownを設定しています。好みの数に修正していただければいいかと思います。今はとにかくフォーカスがあるときはドロップダウンリストを開くようにしています。
KeyDownイベントで
KeyCode=vbKeyReturnの時にAddItemを書いています。
未登録の値を入力してエンターを押すと追加するように書いている感じです。
そして,Deleteは入力ミスのとき修正しようと押してしまうので,値を消す方法として 消したい値を選択しているときに,Shift+Delを押すと値を消すように書いています。
KeyCodeとShiftという二つの引数がこのイベントには設定されていますが,
KeyCodeはいろいろなキーを設定できます。 vbKeyなんとか と書けばだいたい書けますし, Stopを入れておいていろんなキーを押してみるとチェックできると思います。
Shiftのほうは,
Shiftが1 Ctrlが2 Altが4で 押してるキーの分足した数値を設定します。
Shiftだけなら1 Shift+Ctrlなら3とかみたいです。
こちらで勉強させていただきました。
www.accessclub.jp
これだけの知識でも十分使える代物になるんじゃないかなーと思います。
見てたら,様々なプロパティ・メソッドがあるようで,これまた面白いコントロールですね。
さすが使い続けられているだけあります。
いろいろ試してみててとても面白かった。