Я много гуглил, спрашивал своих коллег и даже пытался создать обходной код. Я попытался изменить имя списка и создать новый.
У меня есть список с именем lbx_genoutages в пользовательской форме. Я хочу получить номер строки выбора. Даже если что-то выбрано, оно всегда возвращает отрицательное (-1).
Единственное время, когда это работает, - это если я выбираю первую запись (запись 0).
Вот строка с кодом ошибки:
listboxId = Me.lbx_genoutages.List(Me.lbx_genoutages.ListIndex, 0)
Я попытался изменить «я» на имя пользовательской формы. Я прикрепил изображение списка, показывая что-то выбранное, но все равно выдает ошибку. Я также дважды проверил правильность написания имени списка и т. Д. 
Это работает для других списков на других пользовательских формах в той же программе. Я сравнил свойства обоих списков, но различий не было.
Вот код, который заполняет список при инициализации пользовательской формы:
frm_dbGenBrowser.lbx_genoutages.Clear
frm_dbGenBrowser.lbx_genoutages.ColumnCount = 8
frm_dbGenBrowser.lbx_genoutages.ColumnWidths = "0, 40, 40, 40, 40, 60, 70, 50"
If q = "" Then 'query could be already filled if specified when this sub was called. This is used for sorting.
q = "SELECT * FROM SLA_Generators as s left join (list_lcc as l) on s.sg_lcc = l.id" & _
" WHERE SG_deleted = No " & _
" AND SG_outDate <= #" & frm_dbGenBrowser.DTPicker2.Value & "# " & _
" AND SG_retDate >= #" & frm_dbGenBrowser.DTPicker1.Value & "# " & _
" ORDER BY " & orderby
End If
Set rs = con.Execute(q)
Do Until rs.EOF 'for each outage, add it into the list
If rs.Fields("SG_isOutage").Value = True Then partialOutage = "" Else partialOutage = " *"
With frm_dbGenBrowser.lbx_genoutages
.addItem
.List(i, 0) = rs.Fields("s.ID").Value
.List(i, 2) = nz(rs.Fields("lccname").Value, "")
.List(i, 1) = rs.Fields("SG_unit").Value
.List(i, 3) = rs.Fields("SG_reduction").Value & partialOutage
.List(i, 4) = IIf(rs.Fields("SG_dailyReport").Value = True, "Y", "N")
.List(i, 5) = rs.Fields("SG_outDate").Value
.List(i, 6) = rs.Fields("SG_retDate").Value
If Len(rs.Fields("SG_reason")) > 0 Then
.List(i, 7) = rs.Fields("SG_reason").Value
Else
.List(i, 7) = ""
End If
If rs.Fields("s.ID").Value = outageId Then .ListIndex = i
End With
rs.MoveNext
i = i + 1
Loop