Страницы: 1
RSS
VBA Удалить форму
 
Вот код:
Код
Function NewForm(name As String) As Object
    Dim myForm As Object
    'Application.VBE.MainWindow.Visible = False
    Set myForm = ThisWorkbook.VBProject.VBComponents.Add(vbext_ct_MSForm)
    myForm.Properties("Caption") = name
    myForm.Properties("Width") = 300
    myForm.Properties("height") = 270
    VBA.UserForms.Add(myForm.name).Show
    Set CreateForm = myForm
End Function
Sub DelForm(name As Object)
    ThisWorkbook.VBProject.VBComponents.Remove name
End Sub
Sub Start()
    Dim my As UserForm
    Set my = NewForm("MyFormCaption")
    'Call DelForm(my)
    ThisWorkbook.VBProject.VBComponents.Remove my
End Sub
ошибок нет, но форма не удаляется. Заранее спасибо.
Изменено: zenija2007 - 18.12.2016 09:14:27
 
А в чём прикол, - создавать форму, а потом её удалять, и всё это кодом?
Вручную создайте форму, и вызывайте / закрывайте её через .Show / .Hide  
 
смею предположить, что (для вашего кода) дело в настройках самого xl - см.:
 файл -  параметры -  центр управления безопасностью -  параметры центра управления безопасностью -  параметры макросов -  доверять доступ к vba.модели - включено должно быть
(поскольку чтобы делать кодом - ThisWorkbook.VBProject.VBComponents.Add и VBProject.VBComponents.Remove - xl'ю надо иметь этот доступ)... мне подсказывает интуиция  ;)
Изменено: JeyCi - 18.12.2016 08:18:32
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
 
включено было. что-то другое значит.

Цитата
Игорь написал:
Вручную создайте форму, и вызывайте / закрывайте её через .Show / .Hide
так и собирался, но стало интересно разобраться с удалением. наверняка где-то пригодится.
 
Цитата
zenija2007 написал: ошибок нет
Ошибки есть. В UDF. Называется она у Вас NewForm, а Set CreateForm = myForm
Согласие есть продукт при полном непротивлении сторон
 
Спасибо большое, все заработало. И тип не UserForm, а Object.
Изменено: zenija2007 - 19.12.2016 16:08:28
 
Так чему у Вас равна Ваша переменная my после выполнения функции NewForm?
Согласие есть продукт при полном непротивлении сторон
 
странно, что ошибка не выскакивала.
 
Цитата
zenija2007 написал:
И тип не UserForm, а Object
Да, и это тоже. И еще у меня vbext_ct_MSForm не сработал, заменил на 3
Согласие есть продукт при полном непротивлении сторон
 
Цитата
Sanja написал: И еще у меня vbext_ct_MSForm не сработал, заменил на 3
в оригинале было 3, а если считать от 0, то как раз шло vbext_ct_MSForm. По идее это одно и то же.
 
Цитата
zenija2007 написал: ошибка не выскакивала
Да это, собственно, больше логическая ошибка, VBA ее не отслеживает. Ну не создана форма my и что? Откуда VBA знать почему. И что это ошибка  :)
Согласие есть продукт при полном непротивлении сторон
Страницы: 1
Читают тему
Наверх