#excel #vba #activex #userform
#excel #vba #activex #пользовательская форма
Вопрос:
Я хочу, чтобы моя пользовательская форма отображалась так, как будто она на самом деле является частью листа Excel, а не отдельным окном из книги Excel. Я не могу использовать элементы управления ActiveX, которые на самом деле были бы расположены на листе, потому что мне нужно назначить RawSource для моих списков со списком, что не является опцией в версии ActiveX. Есть ли способ, которым я могу сделать так, чтобы моя пользовательская форма отображалась так, как будто она находится на листе, как если бы я использовал элементы управления ActiveX?
Ответ №1:
Вы не можете заставить пользовательскую форму отображаться «внутри» листа.
Я не знаю вашей идеи, лежащей в основе вашего запроса. Если вы хотите иметь возможность использовать форму и лист параллельно, вы можете показать свою форму немодальной ( userform1.show False
)
Однако вы можете использовать элементы управления ActiveX. Вы можете получить доступ к этим элементам управления из VBA и установить RowSource (свойство именуется ListFillRange
) в диапазон, или вы можете установить элементы по отдельности (однако вы не можете смешивать это).
Установить в диапазон:
Dim ctrl As OLEObject
Set ctrl = ThisWorkbook.Worksheets(1).OLEObjects("ComboBox1")
ctrl.ListFillRange = "A2:A10"
Установить для отдельного списка элементов:
with ctrl
.ListFillRange = "" ' Make sure that ListFillRange is empty
With .object ' "Object" is the real ComboBox object
.clear
.AddItem "Cheese"
.AddItem "Tomato"
.AddItem "Onion"
.AddItem "Ham"
.AddItem "Olives"
.Value = "Onion"
End With
End With
Если вы предпочитаете, вы также можете написать
Sheet1.ComboBox1.ListFillRange = "A2:A10"
или
Sheet1.ComboBox1.Clear
Sheet1.ComboBox1.AddItem "Hello"
Это предполагает, что кодовое имя листа Sheet1
— кодовое имя отображается в представлении проекта VBA и может отличаться от имени листа.