.ListIndex
возвращает число, которое идет от 0 до ListCount - 1 (воспринимайте его как массив на основе нуля). Поэтому, когда вы передаете 0 для 1-го элемента (если это то, что выбрано), то рабочие книги (0) завершатся с ошибкой вне диапазона. Все остальное будет отключено одним элементом в списке, и последний никогда не сможет быть использован.
Отрегулируйте свой код соответствующим образом (т.е. добавьте 1 к .ListIndex
). Подсказка: поэтому -1 означает, что в выпадающем списке ничего не выбрано.
Как правило, вы хотите проверить, не является ли wb
ничем. Чтобы сделать это, вы должны обернуть строку назначения wb = Workbooks(ComboBox1.List(ComboBox1.ListIndex))
с On Error Resume Next
/ On Error GoTo 0
. Это приостановит полученную вами ошибку и позволит вашему коду продолжить работу, чтобы вы могли проверить If Not wb Is Nothing Then
и действовать соответствующим образом.
Сказав все это, я бы посоветовал вам использовать значимые имена вместо Combobox1
. Кроме того, вы не предоставили, как вы .Show
свою форму пользователя. Убедитесь, что вы не используете экземпляр по умолчанию, и дайте своему пользователю осмысленное имя, а объект, который вы установили, также будет иметь осмысленное имя. Вы будете благодарить себя позже.