Schöck
| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > VBA. Создание нового листа (layout) как полную копию одного из существующих. Размещением его в произвольном месте.

VBA. Создание нового листа (layout) как полную копию одного из существующих. Размещением его в произвольном месте.

Ответ
Поиск в этой теме
Непрочитано 06.10.2019, 23:35 #1
VBA. Создание нового листа (layout) как полную копию одного из существующих. Размещением его в произвольном месте.
Theodor
 
Петрозаводск
Регистрация: 16.04.2009
Сообщений: 219

Коллеги, подскажите,
Есть набор листов в чертеже.
1. Необходимо сделать полную копию одного из них (со всеми элементами и видовыми экранами).
2. Перемещение листа в произвольное место в закладках листов (по умолчанию новые размещаются в конец).
Ну и как понятно из темы - средствами VBA.
Просмотров: 369
 
Непрочитано 07.10.2019, 00:44
1 | #2
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 6,983


Цитата:
Сообщение от Theodor Посмотреть сообщение
1. Необходимо сделать полную копию одного из них (со всеми элементами и видовыми экранами).
Имхо, на VBA проще будет командным методом через LAYOUT сделать.
Цитата:
Сообщение от Theodor Посмотреть сообщение
2. Перемещение листа в произвольное место в закладках листов (по умолчанию новые размещаются в конец).
свойство TabOrder AcadLayout.
Сергей812 вне форума  
 
Автор темы   Непрочитано 07.10.2019, 05:32
#3
Theodor


 
Регистрация: 16.04.2009
Петрозаводск
Сообщений: 219


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
свойство TabOrder AcadLayout.
разобрался, спасибо

Цитата:
Сообщение от Сергей812 Посмотреть сообщение
Имхо, на VBA проще будет командным методом через LAYOUT сделать.
в принципе оказалось не сложно. создал массив всех block на листе через цикл и скопировал массив в новый лист. Ну и сам лист (его настройки) то же.
Theodor вне форума  
 
Непрочитано 07.10.2019, 07:57
#4
Boxa

КЖ; C#
 
Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,057


Лист - блок. Надо будет поэкспериментировать с размножением этого блока...
__________________
_бложиг
Boxa вне форума  
 
Непрочитано 07.10.2019, 13:29
#5
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 6,983


Цитата:
Сообщение от Boxa Посмотреть сообщение
Лист - блок. Надо будет поэкспериментировать с размножением этого блока...
Да вроде вы уже поучаствовали в этом)
Сергей812 вне форума  
 
Непрочитано 07.10.2019, 14:11
#6
Boxa

КЖ; C#
 
Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,057


Вот ведь память у Вас... но я другое имел ввиду, там все таки используются специфическое NewLayout.CopyFrom(OldLayout), а я про прямое копирование BlockTableRecord, может что нить сломается, может нет...
__________________
_бложиг
Boxa вне форума  
 
Непрочитано 07.10.2019, 14:36
#7
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 6,983


Offtop:
Цитата:
Сообщение от Boxa Посмотреть сообщение
Вот ведь память у Вас...
На память не надеюсь как раз, просто стараюсь избранное вести более менее упорядоченно)


Цитата:
Сообщение от Boxa Посмотреть сообщение
а я про прямое копирование BlockTableRecord, может что нить сломается, может нет...
имхо, для этого надо сначала понять - что делает внутри себя метод CreateLayout менеджера листов.
Сергей812 вне форума  
 
Автор темы   Непрочитано 07.10.2019, 15:07
#8
Theodor


 
Регистрация: 16.04.2009
Петрозаводск
Сообщений: 219


Цитата:
Сообщение от Boxa Посмотреть сообщение
Лист - блок. Надо будет поэкспериментировать с размножением этого блока...
Код:
[Выделить все]
Public Sub copylastlayout()
 Dim iInd As Integer, iCntLayout As Integer
 Dim objLayout As AcadLayout, objNewLayout As AcadLayout
 Dim objEnt As AcadObject
 Dim arrObjBlock() As Object
 iCntLayout = ThisDrawing.Layouts.Count
 Set objLayout = ThisDrawing.Layouts.Item(iCntLayout - 1) 
 Set objNewLayout = ThisDrawing.Layouts.Add(ThisDrawing.Layouts.Item(iCntLayout - 1).Name & "(copy)") 
 ReDim arrObjBlock(objLayout.Block.Count - 1)
 iInd = 0
 For Each objEnt In objLayout.Block 
  Set arrObjBlock(iInd) = objEnt
  iInd = iInd + 1
 Next
 ThisDrawing.CopyObjects arrObjBlock, objNewLayout.Block
 objNewLayout.CopyFrom objLayout
End Sub
Theodor вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > VBA. Создание нового листа (layout) как полную копию одного из существующих. Размещением его в произвольном месте.

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создание нового типа линий Apelsinov AutoCAD 903 16.07.2019 16:20
Создание нового типа линии (или MKLTYPE не работает) Филипп AutoCAD 24 25.06.2010 12:43
Создание нового материала в AutoCAD 2008 termit-spb AutoCAD 1 21.12.2009 22:14
Создание нового стиля таблиц AutoCAD 2006 (VL) Дмитрий Голованов Программирование 21 20.12.2009 02:37
Как отключить создание каждый раз нового файла .bak при нажатии на кнопку "Сохранить" или при закрытии любого файла .dwg в Автокад 2008? gve2005 AutoCAD 4 30.10.2009 10:30