Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.08.2013, 15:06   #1
iNataliya
Пользователь
 
Регистрация: 29.08.2013
Сообщений: 27
Вопрос Очистка списка имен UserForm из памяти

Всем доброго времени суток,
Помогите, пожалуйста, вот с таким вопросом:

У меня есть программа которая добавляет в книгу новую форму:

Private Sub CreateUserForm(zag, nam)
With ThisWorkbook.VBProject.VBComponents .Add(3)

.Properties(42) = 500
.Properties(43) = 400
.Properties("Caption") = zag
.Name = "UF" & nam
End With
End Sub

Затем созданная форма удаляется.
Так вот получается, что создать новую форму под тем же именем, что и только что удаленная форма, уже нельзя, хотя самой формы в проекте нет. Выпадает ошибка 75 "Could not find the specified object". Но если книгу закрыть и снова открыть, то форма замечательно создается. Я так понимаю что есть где-то в памяти список имен форм, который очищается если книгу перегрузить. Подскажите пожалуйста, есть способ очистить эту память? Спасибо.
iNataliya вне форума Ответить с цитированием
Старый 29.08.2013, 21:53   #2
VictorM
Старожил
 
Аватар для VictorM
 
Регистрация: 15.05.2008
Сообщений: 2,058
По умолчанию

А если попробовать при удалении формы написать в конце
Код:
Name = ""
или наоборот, при создании новой формы
Код:
Private Sub CreateUserForm(zag, nam)
With ThisWorkbook.VBProject.VBComponents .Add(3)
.Name = "" 
.Properties(42) = 500
.Properties(43) = 400
.Properties("Caption") = zag
.Name = "UF" & nam
End With
End Sub
Конечно с примером файла было бы проще, а так - только догадки
"Дайте людям рыбы, и вы накормите их на весь день; научите их ловить рыбу - и вы накормите их на всю жизнь"
"Большое спасибо" - Z261597841314, R208907249777, U447361470499
VictorM вне форума Ответить с цитированием
Старый 29.08.2013, 23:39   #3
iNataliya
Пользователь
 
Регистрация: 29.08.2013
Сообщений: 27
По умолчанию

Цитата:
Сообщение от VictorM Посмотреть сообщение
А если попробовать при удалении формы написать в конце
Код:
Name = ""
или наоборот, при создании новой формы
Код:
Private Sub CreateUserForm(zag, nam)
With ThisWorkbook.VBProject.VBComponents .Add(3)
.Name = "" 
.Properties(42) = 500
.Properties(43) = 400
.Properties("Caption") = zag
.Name = "UF" & nam
End With
End Sub
Конечно с примером файла было бы проще, а так - только догадки
Не получается, и дело видимо даже не в файле сейчас в пустую книгу добавляю 3 формы UserForm1, UserForm2, UserForm3
затем называю через свойства
UserForm1 - UserForm4 - нормально работает
UserForm2 - UserForm1 - нормально работает
удаляю UserForm3
пытаюсь переназвать UserForm1 - UserForm3 - выдает ошибку pass/file access error и лечится только закрытием и открытием книги.
Можно эту ошибку как-то обойти?
iNataliya вне форума Ответить с цитированием
Старый 29.08.2013, 23:52   #4
iNataliya
Пользователь
 
Регистрация: 29.08.2013
Сообщений: 27
По умолчанию

Все получилось!!!
Правда не знаю, наверное через неправильное место.
Сразу после удаления формы добавила код сохранения книги
ActiveWorkbook.Save
и все заработало
iNataliya вне форума Ответить с цитированием
Старый 30.08.2013, 00:21   #5
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Вопрос, конечно, не в тему, но всё же:
а зачем программно создавать форму?

Вот я постоянно пишу макросы, и ни разу не потребовалось так извращаться.
Можно же вручную один раз создать эту форму, а потом отображать (меняя заголовок и другие параметры)
Можно и несколько копий одной формы отобразить (пример), с разными заголовками:
Код:
dim F as new Userform1
F.show ' как-то вроде так это делается
EducatedFool вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
очистка памяти Kukurudza Общие вопросы C/C++ 1 30.07.2012 11:34
Очистка памяти в delphi 7 Ербулат Общие вопросы Delphi 11 13.06.2012 11:22
Очистка памяти _-Re@l-_ Общие вопросы Delphi 4 22.05.2010 17:08
Очистка памяти Senator Общие вопросы Delphi 1 28.06.2008 19:39
Очистка памяти в C# darkstarx Общие вопросы .NET 1 14.04.2008 14:48