Ответ внизу поста
Я получил код ниже, чтобы работать, но вопрос остается. Когда я копирую и вставляю код в мой проект, он не будет работать. Но вставка схемы вызова из выпадающего меню и вставка остальной части в его тело работает просто отлично. Итак, новый вопрос: что же делает Excel за моей спиной, чтобы сделать эту работу?
Я пытаюсь получить выбор всех открытых книг в выпадающем списке в Excel 2010/2013. Есть много решений онлайн (более или менее они все одинаковы). Но ни один из них, кажется, не работает для меня. Что я пробовал:
Private Sub UserForm1_Initialize()
Dim wkb As Workbook
For Each wkb In Application.Workbooks
ComboBox1.AddItem wkb.Name
Next wkb
End Sub
или же
Private Sub Userform1_Initialize()
Dim wkb As Workbook
With Me.ComboBox1
For Each wkb In Application.Workbooks
AddItem wkb.Name
Next wkb
End With
End Sub
Файл сохраняется как xlsm, два элемента действительно называются UserForm1
и ComboBox1
. Есть ли какая-то опция безопасности, которую мне нужно отключить? Пользовательская форма вызывается, но список пуст.
Изменить 1: Перечисление рабочих книг в MsgBox работает. Так что должно быть что-то не так с методом добавления.
Sub ListOpenBooks()
'lists each book that's OPEN
Dim wkb As Workbook
For Each wkb In Application.Workbooks
MsgBox wkb.Name
Next wkb
End Sub
Редактировать 2: Использование того же кода в кнопке на пользовательской форме работает также. Таким образом, это должен быть метод Initialize, когда вызывается пользовательская форма.
Ответ
Хорошо, просто недоразумение. В сегменте кода UserForm вам не нужно его имя для инициализации. Достаточно простого Private Sub UserForm_Initialize()
. Вы можете полностью игнорировать его имя.