Форма - это объект: это экземпляр класса UserForm1
- тот, который вы не создали сами (см. UserForm1.Show для всего, что влечет за собой), но, тем не менее, это объект .
Существует экземпляр элемента управления ComboBox
с именем ComboBox1
, который находится в этом объекте UserForm1
и доступен в интерфейсе publi c формы (точно так же, как если бы он был publi c). свойство самой формы!) - это то, как вы можете получить доступ к элементу управления из-за выделенного кода формы (примечание: это самый простой способ создания пользовательского интерфейса, но есть более совершенные и более масштабируемые способы, которые не нарушают инкапсуляцию) и оставьте форму ответственной за свои элементы управления, а остальная часть кода, к счастью, не знает о макете пользовательского интерфейса и о том, какие конкретно элементы управления c, см. ссылку выше).
VBA не знает на что ComboBox1
вы ссылаетесь, если только вы не квалифицируете вызов этого члена с объектом, которому он принадлежит, используя оператор .
dot:
UserForm1.ComboBox1
Вы можете иметь UserForm2
, который также имеет элемент управления ComboBox1
, и может быть 20 рабочих листов, каждый со своим собственным элементом управления ComboBox1
: они не могут жить в глобальной области видимости и не имеют.
Таким образом:
Worksheets("Sheet1").Range("O5").Value = UserForm1.ComboBox1.Value
Или лучше:
Public Sub EmailGenerator()
With New UserForm1
.Show '<~ form is modal, execution is blocked here until form is closed.
Worksheets("Sheet1").Range("O5").Value = .ComboBox1.Value
End With
End Sub