Как в Excel сохранить программно измененную форму??

Программирование на Visual Basic for Applications
Linda
Начинающий
Начинающий
 
Сообщения: 7
Зарегистрирован: 01.02.2008 (Пт) 17:23

Как в Excel сохранить программно измененную форму??

Сообщение Linda » 13.05.2008 (Вт) 14:34

Есть макрос, который добавляет на форму контролы и задает для них некоторые параметры.
Можно ли и если да, то как, сохранить измененную форму? Нужно, чтобы в следующий раз открывалась не исходная версия формы, а последняя версия.
____

KL
Microsoft MVP
 
Сообщения: 483
Зарегистрирован: 30.10.2005 (Вс) 0:31
Откуда: Madrid

Сообщение KL » 14.05.2008 (Ср) 16:00

Код: Выделить всё
'*********************************************************************
'1)Excel's Main Window:
'Tick the option "Trust access to the VBA project object model"
'from 'Tools > Macro > Security' menu

'2) VBE Window:
'Establish the following references from 'Tools > References...' menu:
'- Microsoft Visual Basic for Application Extensibility #.#
'- Microsoft Forms #.# Object Library
'*********************************************************************

Sub TestKL()
    Dim VBProj As VBIDE.VBProject
    Dim VBComp As VBIDE.VBComponent
    Set VBProj = ActiveWorkbook.VBProject
    Set VBComp = VBProj.VBComponents("UserForm1")
    VBComp.Designer.Controls.Add "Forms.ComboBox.1", "TextBox", Visible
    ThisWorkbook.Save
End Sub
Привет,
KL

Linda
Начинающий
Начинающий
 
Сообщения: 7
Зарегистрирован: 01.02.2008 (Пт) 17:23

Сообщение Linda » 14.05.2008 (Ср) 16:26

Мучисимас грасиас.
Суть ответа понятна.
К сожалению, галочку "доверять доступ в проекту" у нас запрещено ставить. А без этого, я так поняла, макрос работать не будет.
Придется искать обходной путь. :( Жалко. Такая идея была!!!!

HandKot
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 283
Зарегистрирован: 28.06.2006 (Ср) 13:34
Откуда: Sergiev Posad

Сообщение HandKot » 14.05.2008 (Ср) 19:19

может какой-нибудь файл (txt, xml) таскать с екселем (или где-нибудь внутри файла), в котором хранить все контролы формы и при ее открытии динамически добавлять?
I Have Nine Lives You Have One Only
THINK!

KL
Microsoft MVP
 
Сообщения: 483
Зарегистрирован: 30.10.2005 (Вс) 0:31
Откуда: Madrid

Сообщение KL » 14.05.2008 (Ср) 19:33

HandKot писал(а):может какой-нибудь файл (txt, xml) таскать с екселем (или где-нибудь внутри файла), в котором хранить все контролы формы и при ее открытии динамически добавлять?


Если не ошибаюсь, для того, чтобы динамически добавлять контролы, достаточно чего-то в таком духе и нет нужды в галочке "доверять доступ в проекту":
Код: Выделить всё
UserForm1.Controls.Add "Forms.ComboBox.1", "TextBox", Visible

Но Линде почему-то надо именно сохранять.

Кстати, кажется, чтобы импортировать формы из текстовых файлов злосчастная галка тоже нужна.
Привет,
KL

Linda
Начинающий
Начинающий
 
Сообщения: 7
Зарегистрирован: 01.02.2008 (Пт) 17:23

Сообщение Linda » 14.05.2008 (Ср) 23:07

Динамически добавлять контролы и/или устанавливать параметры для них - это для моего случая не лучший вариант.
Изначально я его рассматривала, но он будет слишком тормозить. Поэтому и возник вариант с сохранением формы.

У меня не слишком велик опыт работы с формами. Поэтому объясните, что значит:
может какой-нибудь файл (txt, xml) таскать с екселем (или где-нибудь внутри файла), в котором хранить все контролы формы и при ее открытии динамически добавлять?

Я знаю, конечно, что форму можно экспортировать и импортировать, но, как я понимаю, чтобы сделать это программно, нужна все та же галочка, нет?

HandKot
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 283
Зарегистрирован: 28.06.2006 (Ср) 13:34
Откуда: Sergiev Posad

Сообщение HandKot » 15.05.2008 (Чт) 13:47

экспорт
Код: Выделить всё
Application.VBE.ActiveVBProject.VBComponents(1).Export("путь к файлу")


импорт
Код: Выделить всё
Application.VBE.ActiveVBProject.VBComponents.Import("путь к файлу")


только галочка все-таки должнв быть
I Have Nine Lives You Have One Only
THINK!

Vlassoff
Начинающий
Начинающий
 
Сообщения: 7
Зарегистрирован: 06.06.2008 (Пт) 13:55

Сообщение Vlassoff » 06.06.2008 (Пт) 14:33

А не проще ли на отдельном листе книги Excel, сохранять массив, где храняться контролы и их параметры?

Ну например

Код: Выделить всё
Sub TestKL()
    Dim VBProj As VBIDE.VBProject
    Dim VBComp As VBIDE.VBComponent

    Set VBProj = ActiveWorkbook.VBProject
    Set VBComp = VBProj.VBComponents("UserForm1")
i = 1
Do While ActiveWorkbook.Worksheets("Форма").Cells(i, 1) <> ""
i = i + 1
Loop
КолСтрок = i

for i=1 to КолСтрок
s1 =     ActiveWorkbook.Worksheets("Форма").Cells(i, 1).value
s2 =     ActiveWorkbook.Worksheets("Форма").Cells(i, 2).value
s3 =     ActiveWorkbook.Worksheets("Форма").Cells(i, 3).value
VBComp.Designer.Controls.Add s1, s2, s3
next i

    ThisWorkbook.Save
End Sub


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: AhrefsBot и гости: 83

    TopList