Powerpoint VBAを使おう!

Powerpoint VBAやExcelのVBAで遊んでいます。Word VBAも始めました。

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


これだけの知識でも十分使える代物になるんじゃないかなーと思います。

見てたら,様々なプロパティ・メソッドがあるようで,これまた面白いコントロールですね。

さすが使い続けられているだけあります。

いろいろ試してみててとても面白かった。