powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / скопировать форму
17 сообщений из 17, страница 1 из 1
скопировать форму
    #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
скопировать форму
    #34822249
vkodor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Форма - имеется ввиду UserForm?
...
Рейтинг: 0 / 0
скопировать форму
    #34822266
LETME
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, именно UserForm...
...
Рейтинг: 0 / 0
скопировать форму
    #34822271
Фотография udgeen69
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тупо перетащить в редакторе VB не подойдет?
Или export - > import...
...
Рейтинг: 0 / 0
скопировать форму
    #34822273
vkodor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имхо проще сделать SaveAs всей книги и kil ненужных листов
...
Рейтинг: 0 / 0
скопировать форму
    #34822349
LETME
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vkodor, хотелось бы в автоматическом режиме...
Исходная книга - шаблон, и каждый раз в новую нужно копировать.
...
Рейтинг: 0 / 0
скопировать форму
    #34822388
vkodor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так в чем проблема?
Код: plaintext
1.
ThisWorkbook.SaveAs "C:\temp.xls"
ActiveWorkbook.Worksheets( 1 ).Delete
Ведь после
Код: plaintext
Sheets(arrItem()).Move
все равно наверняка сохраняете книгу?
...
Рейтинг: 0 / 0
скопировать форму
    #34822438
LETME
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vkodor, всё верно. Как вариант это подходит.
Однако, не совсем удобный вариант...
Я открываю книгу с шаблонами и написанным кодом (управляющий файл).
В нём строятся листы по заданным критериям и перемещаются в новую книгу.
Посредством такого управления я могу создавать сколько угодно файлов с разными данными, а если я буду удалять листы с кодом, то мне придётся копировать каждый раз шаблонный файл, под каждый новый файл результата, а это неудобно.
...
Рейтинг: 0 / 0
скопировать форму
    #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
скопировать форму
    #34823225
vkodor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
If VBP.VBComponents(i).Name = ufName Then
читать как
Код: plaintext
If VBP2.VBComponents(i).Name = ufName Then
...
Рейтинг: 0 / 0
скопировать форму
    #34823685
LETME
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vkodor, спасибо!
Идея ясна и вполне подходит.
Однако у меня трабла какая-то ... не могу понять...
Вставляю код в файл и делаю референс на VB for App Ext.

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

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

Не понимаю в чём причина :/
...
Рейтинг: 0 / 0
скопировать форму
    #34823755
vkodor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Давай файл глянем.
Можно на мыло.
...
Рейтинг: 0 / 0
скопировать форму
    #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
скопировать форму
    #34824198
LETME
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vkodor, спасибо.
Однако файл у меня всё равно не сохраняется… поэтому и выслать нет возможности.
А так… - все чётко работает! Но не могу сохранить…
К примеру, создаю файл «Книга1», где будет храниться UserForm для копирования, делаю ссылку на VBAE, сохраняю. Всё нормально.
И как только я вставляю приведённый код и пытаюсь сохранить файл – всё рушится и говорит, что невозможно сохранить файл из-за конфликтов доступа.
Пробовал на двух АРМ-ах – всё одно и тоже…:/
...
Рейтинг: 0 / 0
скопировать форму
    #34824223
vkodor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
возьми последний код и ничего не подключай
...
Рейтинг: 0 / 0
скопировать форму
    #34824248
vkodor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
попробуй имя (CopyUserForm) изменить
...
Рейтинг: 0 / 0
скопировать форму
    #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
17 сообщений из 17, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / скопировать форму
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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