The DualList control is a classic example of how you can create
multiconstituent UserControls to save yourself untold grief for common needs.
Moving items between lists is a capability many applications require — why
recode it in each? It's far better to simply drop a UserControl (CTL) module
into the project and double-click on its toolbar icon. Here's what you see when
you do that, and then drag a new instance of the DualList control onto the
default form:

The UserControl exposes, as properties, every one of its constituent
controls. This allows you to manipulate their properties however you wish. All
the wrapper does is keep everything in sync, including mundane tasks such as
setting the Font property for every control, and so on. You control the button
text and list contents, then turn the controls over to the user so they may move
list items between lists however they want. Simple!
If the layout I chose doesn't suit you, just open the UserControl designer,
and rearrange things. Then, crawl into the UserControl_Resize event, and tweak
the code there to enforce your new design.
Updated to Include New Reordering List
Another extremely common task is allowing the user to reorder a list of
items. You've probably coded it a hundred times? Put all the items in a standard
listbox, then add buttons to move a selected item up or down. On a recent
project, I decided I was tired of doing that over and over, so I stuck it all
inside a new control (CTL) module. This is the result:

You can now drag this CTL file into any project you're working on, and
immediately put it to use. I chose a slightly different approach with exposing
the constituent controls on this custom control, than I did on the earlier
DualList control. The ReorderList control directly reflects many of the
intrinsic properties and methods of the contained ListBox control. It also, of
course, directly exposes the ListBox for those times when you need direct
access. But this approach works well when there's just one main contained
control, as you can write code as simply as:
Private Sub Form_Load()
Dim i As Long
For i = 1 To 10
DualList1.List1.AddItem "Item #" & i
ReorderList1.AddItem "Item #" & i
Next i
End Sub
Note that in the For loop, I was able to directly AddItem on my ReorderList control, but had to
actually point at which list to add the item to in the DualList control
instance.