After a bit of troubleshooting I think I found the answer in the Controls collection. Within each list box I call a procedure which takes existing listbox index, topIndex (useful when using scrolbars) and its own name.
Private Sub lbox_gl_account_Change()
Call arrangeIndexOfLabels(Me.lbox_gl_account.listIndex,
Me.lbox_gl_account.topIndex, Me.ActiveControl.Name)
End Sub
The arrangeIndexOfLabels procedure loops through all controls in the collection and only affects those that are of type ListBox. It updates listIndex and topIndex for all ListBoxes except for the active one.
'Change index location of other listbox items according to the selected one
Private Sub arrangeIndexOfLabels(lngListIndex As Long, lngTopIndex As Long, strActiveControl As String)
Dim ctrlItem As Control
For Each ctrlItem In Me.Controls
If TypeName(ctrlItem) = "ListBox" Then
'Only changing index position of other list boxes than selected
If ctrlItem.Name <> strActiveControl Then
ctrlItem.listIndex = lngListIndex
ctrlItem.topIndex = lngTopIndex
End If
End If
Next ctrlItem
End Sub
Controlscollection and test each item's type to see if it's a listbox.