Работа с подшивками (VBA). Заполнение формы при ее инициализации.
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Работа с подшивками (VBA). Заполнение формы при ее инициализации.

Работа с подшивками (VBA). Заполнение формы при ее инициализации.

Ответ
Поиск в этой теме
Непрочитано 27.01.2014, 20:57 #1
Работа с подшивками (VBA). Заполнение формы при ее инициализации.
Talion
 
Самара
Регистрация: 17.10.2011
Сообщений: 12

Есть простой код, который открывает существующую подшивку и создает два свойства подшивки и два свойства листа.

Код:
[Выделить все]
'' ОТКРЫТЬ ПОДШИВКУ
Public Sub OpenSheetSet()
'' Create a Reference to the Sheet Set Manager Object
Dim oSheetSetMgr As AcSmSheetSetMgr
Set oSheetSetMgr = New AcSmSheetSetMgr
'' Open a Sheet Set file
Dim oSheetDb As AcSmDatabase
Set oSheetDb = oSheetSetMgr.OpenDatabase("d:\Подшивка.dst", False)

'' Lock the Database
LockDatabase oSheetDb

'' СОЗДАТЬ СВОЙСТВА ПОДШИВКИ
SetCustomProperty oSheetDb, "Свойство подшивки 1", TextBox1
SetCustomProperty oSheetDb, "Свойство подшивки 2", TextBox2
'' СОЗДАТЬ СВОЙСТВА ЛИСТА
SetCustomProperty oSheetDb, "Свойство листа1", TextBox3, False
SetCustomProperty oSheetDb, "Свойство листа2", TextBox4, False

'' Unlock the database
UnlockDatabase oSheetDb

End Sub

'' Used to Lock the database (SheetSet)
Private Function LockDatabase(oSheetDb As AcSmDatabase) As Boolean
'' Check the status of the database
If oSheetDb.GetLockStatus = AcSmLockStatus_UnLocked Then
oSheetDb.LockDb oSheetDb
LockDatabase = True
Else
LockDatabase = False
End If
End Function
'' Used to Unlock the database (SheetSet)
Private Function UnlockDatabase(oSheetDb As AcSmDatabase) As Boolean
'' Check the status of the database
If oSheetDb.GetLockStatus = AcSmLockStatus_Locked_Local Then
oSheetDb.UnlockDb oSheetDb
UnlockDatabase = True
Else
UnlockDatabase = False
End If
End Function

'' Set/Create a Sheet Set Property
Private Sub SetCustomProperty(oSheetDb As AcSmDatabase, _
strName As String, _
strValue As String, _
Optional bSheetSetFlag As Boolean = True)
'' Create a Reference to the Custom Property Bag
Dim cBag As AcSmCustomPropertyBag
Set cBag = oSheetDb.GetSheetSet().GetCustomPropertyBag
'' Create a Reference to a Custom Property Value
Dim cBagVal As New AcSmCustomPropertyValue
cBagVal.InitNew oSheetDb.GetSheetSet() '' cBag
'' Set the Flag for Sheet Set or Sheet Property
If bSheetSetFlag = True Then
cBagVal.SetFlags CUSTOM_SHEETSET_PROP
Else
cBagVal.SetFlags CUSTOM_SHEET_PROP
End If
'' Set the value for the Bag
cBagVal.SetValue strValue
'' Create the property
cBag.SetProperty strName, cBagVal
'' Cleat variable
Set cBagVal = Nothing
End Sub
Где TextBox.., соответственно поля пользовательской формы.

ВОПРОС!!!

Как заполнить поля (TextBox1, TextBox2, TextBox3, TextBox4) пользовательской формы при ее инициализации?

Код:
[Выделить все]
Private Sub UserForm_Activate()
    TextBox1.Value = ??????????????????????????
    TextBox2.Value = ??????????????????????????
End Sub
И совсем интересно, свойства листа...

Код:
[Выделить все]
Private Sub UserForm_Activate()
    TextBox3.Value = ??????????????????????????
    TextBox4.Value = ??????????????????????????
End Sub
Спасибо!
Просмотров: 5270
 
Автор темы   Непрочитано 16.04.2014, 13:40
#2
Talion


 
Регистрация: 17.10.2011
Самара
Сообщений: 12
<phrase 1=


И тишина...
Talion вне форума  
 
Непрочитано 16.04.2014, 13:59
#3
Олег (jr.)

специалист по околачиванию грушевых деревьев
 
Регистрация: 14.09.2004
Pietari, Venäjä
Сообщений: 811


Цитата:
Сообщение от Talion Посмотреть сообщение
И тишина...
Для интересу, это самая сложная часть насчет подшивок в VBA,
неудивительно
Олег (jr.) вне форума  
 
Автор темы   Непрочитано 16.04.2014, 15:35
#4
Talion


 
Регистрация: 17.10.2011
Самара
Сообщений: 12
<phrase 1=


Ну вдруг кто нибудь разобрался с этим и сможет поделиться опытом
Talion вне форума  
 
Автор темы   Непрочитано 22.04.2014, 11:22
#5
Talion


 
Регистрация: 17.10.2011
Самара
Сообщений: 12
<phrase 1=


Предположим с этим я разобрался))) Может кто нибудь знает как заполнять пользовательские свойства листа)))
Talion вне форума  
 
Непрочитано 26.05.2014, 00:19
#6
Andryleon


 
Регистрация: 22.08.2012
Сообщений: 28


Цитата:
Сообщение от Talion Посмотреть сообщение
Предположим с этим я разобрался))) Может кто нибудь знает как заполнять пользовательские свойства листа)))
Что конкретно тебя интересует? Некоторое время разбираюсь с этим... могу подсказать если что...
ТЫ с подшивками разобрался?
Andryleon вне форума  
 
Автор темы   Непрочитано 09.06.2014, 08:35
#7
Talion


 
Регистрация: 17.10.2011
Самара
Сообщений: 12
<phrase 1=


Цитата:
Что конкретно тебя интересует? Некоторое время разбираюсь с этим... могу подсказать если что...
ТЫ с подшивками разобрался?
С подшивками разобрался. Конкретно меня интересует заполнение свойств листа программно. Пока получается только заполнить свойства листа в свойствах подшивки, а отдельно каждого листа ... не пойму как(
Talion вне форума  
 
Непрочитано 09.06.2014, 22:15
#8
Сергей812


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


Цитата:
Сообщение от Talion Посмотреть сообщение
Пока получается только заполнить свойства листа в свойствах подшивки, а отдельно каждого листа
Это разве не одно и тоже? Или речь уже идет об layouts?

P.S. обратите внимание на метод UpdateInMemoryDwgHints. Подозреваю, что дело в его отсутствии в коде)
Сергей812 вне форума  
 
Автор темы   Непрочитано 11.06.2014, 11:44
#9
Talion


 
Регистрация: 17.10.2011
Самара
Сообщений: 12
<phrase 1=


Цитата:
Это разве не одно и тоже? Или речь уже идет об layouts?
Я имею ввиду, что могу заполнить программно свойства листа в свойствах подшивки.


Потом могу программно заполнить свойства всех листов из свойств листа в свойствах подшивки. (Надеюсь понятно объяснил)))

А вот заполнять отдельно свойства каждого листа... Вот вопрос.



Цитата:
P.S. обратите внимание на метод UpdateInMemoryDwgHints. Подозреваю, что дело в его отсутствии в коде)
Не подскажете, что это за метод такой?
Talion вне форума  
 
Непрочитано 11.06.2014, 22:15
#10
Сергей812


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


Цитата:
Updates the hints in the open drawings referenced in the subset.
Т.е. поменяли свойства листов, потом в конце вызвали один раз этот метод AcSmDatabase.UpdateInMemoryDwgHints() перед разблокировкой подшивки. Насколько понимаю - поскольку файл подшивки в отличие от файлов чертежей не "захватывается" монопольно AutoCAD при открытии, то считали БД подшивки в память - и все программные изменения происходят в этой локальной копии. А метод UpdateInMemoryDwgHints позволяет синхронизировать локальную копию в памяти и реальный файл подшивки. Но еще раз повторюсь - это мое мнение, основанное на практическом опыте.
Сергей812 вне форума  
 
Автор темы   Непрочитано 18.06.2014, 09:23
#11
Talion


 
Регистрация: 17.10.2011
Самара
Сообщений: 12
<phrase 1=


Но мы так и не пришли к тому как задавать свойства каждого листа в отдельности(
Talion вне форума  
 
Непрочитано 19.06.2014, 11:40
#12
Сергей812


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


Из заблокированной БД подшивки получаете объекты AcSmSheet (отдельные листы), у этих объектов есть соответствующие методы получения значений свойств Get... и установки их значений Set... . Перед разблокировки БД подшивки методом UpdateInMemoryDwgHints обновили данные в самом файле подшивки.
Сергей812 вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Работа с подшивками (VBA). Заполнение формы при ее инициализации.



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нумерация листов из "менеджера подшивок" Peter AutoCAD 160 04.05.2025 11:29
Работа с подшивками. Ограничение в названии листа в подшивке. andery AutoCAD 30 22.03.2017 02:52
Акты скрытых работ Витос Прочее. Архитектура и строительство 324 05.03.2015 12:24
VBA: Заполнение TextBox в немодальном режиме формы shprot Программирование 4 01.08.2011 22:15
Работа с подшивками. Saha AutoCAD 1 06.10.2009 17:54