Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / скопировать форму / 17 сообщений из 17, страница 1 из 1
24.09.2007, 16:16:57
    #34822002
LETME
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
скопировать форму
Перемещаю листы в новую книгу следующим образом:
Код: plaintext
1.
2.
3.
4.
5.
For i =  0  To varRow( 1 ) - varRow( 0 )
    arrItem(i) = Sheets(i +  3 ).Name
Next i

Sheets(arrItem()).Move

В исходной книге есть форма. Подскажите, пожалуйста - как её скопировать вместе с листами в новую книгу?
...
Рейтинг: 0 / 0
24.09.2007, 17:19:52
    #34822249
vkodor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
скопировать форму
Форма - имеется ввиду UserForm?
...
Рейтинг: 0 / 0
24.09.2007, 17:23:27
    #34822266
LETME
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
скопировать форму
Да, именно UserForm...
...
Рейтинг: 0 / 0
24.09.2007, 17:24:59
    #34822271
udgeen69
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
скопировать форму
Тупо перетащить в редакторе VB не подойдет?
Или export - > import...
...
Рейтинг: 0 / 0
24.09.2007, 17:25:02
    #34822273
vkodor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
скопировать форму
Имхо проще сделать SaveAs всей книги и kil ненужных листов
...
Рейтинг: 0 / 0
24.09.2007, 17:43:46
    #34822349
LETME
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
скопировать форму
vkodor, хотелось бы в автоматическом режиме...
Исходная книга - шаблон, и каждый раз в новую нужно копировать.
...
Рейтинг: 0 / 0
24.09.2007, 17:53:37
    #34822388
vkodor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
скопировать форму
Так в чем проблема?
Код: plaintext
1.
ThisWorkbook.SaveAs "C:\temp.xls"
ActiveWorkbook.Worksheets( 1 ).Delete
Ведь после
Код: plaintext
Sheets(arrItem()).Move
все равно наверняка сохраняете книгу?
...
Рейтинг: 0 / 0
24.09.2007, 18:09:45
    #34822438
LETME
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
скопировать форму
vkodor, всё верно. Как вариант это подходит.
Однако, не совсем удобный вариант...
Я открываю книгу с шаблонами и написанным кодом (управляющий файл).
В нём строятся листы по заданным критериям и перемещаются в новую книгу.
Посредством такого управления я могу создавать сколько угодно файлов с разными данными, а если я буду удалять листы с кодом, то мне придётся копировать каждый раз шаблонный файл, под каждый новый файл результата, а это неудобно.
...
Рейтинг: 0 / 0
25.09.2007, 09:37:18
    #34823219
vkodor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
скопировать форму
Ну чтож, попробуй
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
Option Explicit
Sub CopyUserForm()
    Dim VBP As VBIDE.VBProject, VBP2 As VBIDE.VBProject ' в референс подключить "Microsoft Visual Basic for Applications Extensibility"
    Dim vbContt As VBIDE.VBComponent
    Dim i As Long, ufName As String
    ufName = "UserForm4"

    On Error Resume Next
    Set VBP = Workbooks("Книга1.xls").VBProject
    If Err <>  0  Then Exit Sub
    Set VBP2 = Workbooks("Книга2.xls").VBProject
    If Err <>  0  Then Exit Sub
    Set vbContt = VBP.VBComponents(ufName)
    If Err <>  0  Then Exit Sub
    '   Проверка уникальности имени
    For i =  1  To VBP2.VBComponents.Count
        If VBP.VBComponents(i).Name = ufName Then
            Set vbContt = Nothing
            Set VBP = Nothing
            Set VBP2 = Nothing
            Exit Sub
        End If
    Next
    vbContt.Export "C:\temp.bas"
    VBP2.VBComponents.Import "C:\temp.bas"
    Kill "C:\temp.bas"
    Set vbContt = Nothing
    Set VBP = Nothing
    Set VBP2 = Nothing

End Sub
...
Рейтинг: 0 / 0
25.09.2007, 09:39:40
    #34823225
vkodor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
скопировать форму
Код: plaintext
If VBP.VBComponents(i).Name = ufName Then
читать как
Код: plaintext
If VBP2.VBComponents(i).Name = ufName Then
...
Рейтинг: 0 / 0
25.09.2007, 11:31:30
    #34823685
LETME
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
скопировать форму
vkodor, спасибо!
Идея ясна и вполне подходит.
Однако у меня трабла какая-то ... не могу понять...
Вставляю код в файл и делаю референс на VB for App Ext.

Как только пытаюсь сохранить файл пишет:

"Невозможно сохранить изменения в 'Книга1' из-за конфликта доступа...

Не понимаю в чём причина :/
...
Рейтинг: 0 / 0
25.09.2007, 11:50:27
    #34823755
vkodor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
скопировать форму
Давай файл глянем.
Можно на мыло.
...
Рейтинг: 0 / 0
25.09.2007, 12:11:53
    #34823856
vkodor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
скопировать форму
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
Option Explicit
Sub CopyUserForm()
    Dim VBP1 As Object, VBP2 As Object
    Dim vbContt As Object
    Dim i As Long, ufName As String
    ufName = "UserForm1"
    On Error Resume Next
    Set VBP1 = Workbooks("Книга1.xls").VBProject
    If Err <>  0  Then Exit Sub
    Set VBP2 = Workbooks("Книга2.xls").VBProject
    If Err <>  0  Then Exit Sub
    Set vbContt = VBP1.VBComponents(ufName)
    If Err <>  0  Then Exit Sub
    For i =  1  To VBP2.VBComponents.Count
        If VBP2.VBComponents(i).Name = ufName Then VBP2.VBComponents.Remove VBP2.VBComponents(i)
    Next
    vbContt.Export "C:\temp.bas"
    VBP2.VBComponents.Import "C:\temp.bas"
    Kill "C:\temp.bas"
    Set vbContt = Nothing
    Set VBP1 = Nothing
    Set VBP2 = Nothing
End Sub
...
Рейтинг: 0 / 0
25.09.2007, 13:11:08
    #34824198
LETME
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
скопировать форму
vkodor, спасибо.
Однако файл у меня всё равно не сохраняется… поэтому и выслать нет возможности.
А так… - все чётко работает! Но не могу сохранить…
К примеру, создаю файл «Книга1», где будет храниться UserForm для копирования, делаю ссылку на VBAE, сохраняю. Всё нормально.
И как только я вставляю приведённый код и пытаюсь сохранить файл – всё рушится и говорит, что невозможно сохранить файл из-за конфликтов доступа.
Пробовал на двух АРМ-ах – всё одно и тоже…:/
...
Рейтинг: 0 / 0
25.09.2007, 13:16:02
    #34824223
vkodor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
скопировать форму
возьми последний код и ничего не подключай
...
Рейтинг: 0 / 0
25.09.2007, 13:20:05
    #34824248
vkodor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
скопировать форму
попробуй имя (CopyUserForm) изменить
...
Рейтинг: 0 / 0
25.09.2007, 13:46:06
    #34824355
LETME
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
скопировать форму
Как ни странно - разделил процедуру на две части и всё заработало и засохранялось....

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
Sub ExportFrm()
    Dim VBP1 As Object
    Dim vbContt As Object
    Dim ufName As String
    
    ufName = "UserForm1"
    
    
    Set VBP1 = Workbooks("Книга1.xls").VBProject
    Set vbContt = VBP1.VBComponents(ufName)
    
    vbContt.Export "P:\example.bas"
    Set vbContt = Nothing
    Set VBP1 = Nothing
End Sub


Public Function ImportFrm()
    Dim VBP2 As Object
    Set VBP2 = Workbooks("Книга2.xls").VBProject
    VBP2.VBComponents.Import "P:\example.bas"
    Kill "P:\example.bas"
    
    Set VBP2 = Nothing
End Function

Теперь я счастлив!)
Благодарности!
...
Рейтинг: 0 / 0
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / скопировать форму / 17 сообщений из 17, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]