Чаще всего при создании новой формы средствами VBA используют стандартные компоненты. В результате форма выглядит достаточно инородно:
В составе Scala идет набор своих компонентов - туннелированные компоненты, позволяющих встраивать VBA приложения без всяких швов. Сделаем простейшую форму.
- Создаем новое VBA приложение Tunneling: Tools -> VBA Developer -> Project Explorer. New Project. Set Active для нового приложения.
- Идем в среду разработки: Tools -> VBA Developer -> Visual Basic Editor
- Добавляем новую форму.
- Идем в Tools -> References и добавляем ссылку на ScaXVBProxies 1.0 Type Library
- На палитре компонентов Toolbox щелкаем правой клавишей мыши и выбираем Additional Controls. Отмечаем все ScaXVB* компоненты. Получится что-то вроде этого:
- Бросаем на форму ScaXVBForm. Он должен присутствовать на любой форме, где используются туннелированные компоненты.
- Рисуем фому, используя только скальские компоненты. Добавляем кнопку закрыть с кодом ScaXVBForm1.DelayUnload
- Добавляем событие ScaXVBForm1_OnScaReady. В этом событии нужно заполнить все заголовки на форме. Дело в том, что вы не сможете сделать это в дизайнере, т.к. по идеологии таких приложений они должны читать все строки из LAN-файлов. По уму и нужно создать пользовательский LAN-файл и читать строки оттуда, но для простоты я сделал это в коде.
- Добавляем кнопку для запуска (в меню добавляется аналогично):
Получаем стандартную встроенную форму:
Код примера.
' Файл UserForm2
Private Sub scaXVBButton1_OnScaClick()
ScaXVBForm1.DelayUnload
End Sub
Private Sub ScaXVBForm1_OnScaReady()
scaXVBLabel1.Caption = "Some Label 1:"
scaXVBLabel2.Caption = "Some Label 2:"
scaXVBLabel3.Caption = "Some Label 3:"
scaXVBButton1.Caption = "Close"
End Sub
' Файл ProjectMacros
Sub RunUserForm2()
UserForm2.ScaXVBForm1.Connect ThisProcess, scaXVBDockedForm
UserForm2.ScaXVBForm1.Show
End Sub