# ListView control in Excel spreadsheets

List view controls can be exceptionally useful for viewing data on a spreadsheet. 

## Step 1: Add control to spreadsheet.

Click on the `Insert` dropdown button in the `Controls` group of the `Developer` tab. When here click the `More controls` button of the `ActiveX Controls` sub menu.

## Step 2: Find ListView control

Scroll down through the `More Controls` dialogue until you find `Microsoft ListView Control, version 6.0`.

## Step 3: Draw the ListView control

Draw the list view control on the Excel spreadsheet.

## Step 4: Change ListView properties

Right click on the ListView control. In the context menu click on the `Properties` button in the `ListViewCtrl Object` menu.

> Note: You will only be able to access this menu in `Design Mode` which you will be able to access from the `Controls` group in the `Developer` tab.

When here we can start to change the list view properties. The list view properties we will likely want are:

### `General` tab

```
View:               3-lvwReport
HideSelection:      false
MultiSelect:        true
AllowColumnReorder: true
FullRowSelect:      true
GridLines:          true
```

### `Column Headers` tab

Here click `Insert Column` until you have the correct number of columns. For each column you can change the `Text` property (the text displayed in the column header) `Key` is the `Key` property in VBA. All other properties you can likely ignore.

### Finally

Apply the changes and close the properties dialog. Give this listview a name! This will be used later to fill the listview with data!

## Fill the listview with data

Now that the list view has been created, we can now fill it with data.

```vbs
sub fillData(sh as Worksheet, ByVal sLVName as string)
  'Get object
  Dim lv as Object, lvi as 
  set lv = sh.OLEObjects(sLVName).Object
  
  'Clear existing data
  lv.ListItems.Clear
  
  'Add data
  Dim lvi as object
  
  'Row 1
  Set lvi = ListView.ListItems.Add()  
  lvi.Text = "Row_1_1"
  lvi.ListSubItems.Add().Text = "Row_1_2"
  lvi.ListSubItems.Add().Text = "Row_1_3"
  
  'Row 2
  Set lvi = ListView.ListItems.Add()  
  lvi.Text = "Row_2_1"
  lvi.ListSubItems.Add().Text = "Row_2_2"
  lvi.ListSubItems.Add().Text = "Row_2_3"
  
  'Row 3
  Set lvi = ListView.ListItems.Add()  
  lvi.Text = "Row_3_1"
  lvi.ListSubItems.Add().Text = "Row_3_2"
  lvi.ListSubItems.Add().Text = "Row_3_3"
  
  'Row 4
  Set lvi = ListView.ListItems.Add()  
  lvi.Text = "Row_4_1"
  lvi.ListSubItems.Add().Text = "Row_4_2"
  lvi.ListSubItems.Add().Text = "Row_4_3"
  
 'Row 5
  Set lvi = ListView.ListItems.Add()  
  lvi.Text = "Row_5_1"
  lvi.ListSubItems.Add().Text = "Row_5_2"
  lvi.ListSubItems.Add().Text = "Row_5_3"
end sub
```