2010年11月11日

UserFormsオブジェクト5.ListBox

リストボックスコントロール[ ListBox* ]

 リストボックスコントロールの、リストの取扱方法は、先のコンボボックスと然程変わりません。対して外観は大きく違い、省スペースのコンボボックス、一覧表示のリストボックス、というところでしょうか。リストは、予め複数の値があって、その中から特定のものを選択する際に使われるものです。でも、もっと柔軟に、リスト項目の追加・変更・削除ができたら、Excelで作るVBAマクロプログラムの用途が、広がるかもしれません。

  • [ CommanButton1 ]のクリックイベントで、[ ListBox1 ]で選択中の項目だけを削除する
    項目リストは、外部ファイル(HTTPD.log)で、カンマ区切りでIP・日付・参照先ファイル名・転送サイズの順で、アクセスログが記録されているとします。
     
    Private Sub UserForm_Initialize()
      i = 0
      With CreateObject("Scripting.FileSystemObject").OpenTextFile( _
        ThisWorkbook.Path & "\HTTPD.log", 1, True, -2)
        Do While .AtEndOfLine <> True
          L_DAT = Split(.ReadLine, ",")
          With ListBox1
            .AddItem L_DAT(0)
            .List(i, 1) = L_DAT(1)
            .List(i, 2) = L_DAT(2)
            .List(i, 3) = L_DAT(3)
          End With
          i = i + 1
        Loop
        .Close
        End With
        With ListBox1
          .ColumnCount = 4
          .ColumnWidths = "50;50;50;50"
        End With
    End Sub

    Private Sub CommandButton1_Click()
      ListBox1_Remove
    End Sub

    Private Sub ListBox1_Remove()
      If ListBox1.ListCount = 0 Or ListBox1.ListIndex = -1 Then Exit Sub
      i = MsgBox("この項目を削除しますか?" & vbCrLf & vbCrLf & _
        ListBox1.List(ListBox1.ListIndex, 0), vbYesNo + vbQuestion, "リスト項目の削除")
      If i = 6 Then
        With ListBox1
         .List( .ListIndex, 0) = .List( .ListCount - 1, 0)
         .RemoveItem ( .ListIndex) ' ( .ListCount - 1)
         .ListIndex = -1
        End With
      End If
    End Sub

    このVBAマクロでは、外部ファイルのデータでリスト項目を設定し、ユーザーが選択したリスト項目を削除します。ちょうど、ダルマ落としのように、リスト項目が詰まります。リスト項目の数を[ ListCountプロパティ ]で数え、また、どのリスト項目が選択されているか[ ListIndexプロパティ ]で判断し、項目が無いときや、選択されていない場合のエラーをトラップしています。
     
    リストの項目を設定する方法と、削除する方法を覚えておけば、一つのコントロールで複数の用途に、使いまわすことができます。リストから、全ての項目を削除するには、[ Clearメソッド ]を使います。

      ListBox1.Clear
posted by くきお at 11:11| Comment(0) | UserFormオブジェクト | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。