Подниму-ка старую, но от этого не менее важную тему :)
Пытаюсь сделать суммирование пользовательских PropertySet'ов, но получаться отказывается (честно скачал все файлы, которые выкладывал Vitaly, за что ему огромное спасибо).
Пытаюсь вбивать формульную колонку напрямую в ScheduleTable со следующим кодом:
On Error Resume Next
CurSpaceObjID = [kpblc_SpaceObject:ObjectID]
CurSpaceArea = CDbl(Replace(CStr([kpblc_SpaceObject:SchedFloorArea]), ".", ","))
CurSpaceLevel = "[kpblc_SpaceObject:Этаж]"
CurSpaceSection = "[kpblc_SpaceObject:Секция]"
CurSpaceStyle = "[kpblc_SpaceObject:Style]"
CurSpacePropertySetName = "kpblc_SpaceObject"
CurSpacePropertySetFld = "SchedFloorArea"
CurSpaceObjectName = "AecDbSpace"
Set oAcad = GetObject(, "AutoCAD.Application")
totArea = 0
For Each objEnt In oAcad.ActiveDocument.ModelSpace
toggle = 0
objArea = 0
Select Case True
Case objEnt.ObjectID <> CurSpaceObjID And objEnt.ObjectName = CurSpaceObjectName
Set Dict = objEnt.GetExtensionDictionary.Item("AEC_PROPERTY_SETS")
For Each ObjPropertySet In Dict
If ObjPropertySet.Name = CurSpacePropertySetName Then
For Each PropertySetFld In ObjPropertySet.Properties
If PropertySetFld.Name = CurSpacePropertySetFld Then
objArea = CDbl(Replace(CStr(PropertySetFld.Value), ".", ","))
End If
If (LCase(PropertySetFld.Name) = "style" And PropertySetFld.Value = CurSpaceStyle) Or (LCase(PropertySetFld.Name) = "этаж" And (PropertySetFld.Value = CurSpaceLevel Or InStr(PropertySetFld.Value, CurSpaceLevel) <> 0)) Or (LCase(PropertySetFld.Name) = "секция" And (PropertySetFld.Value = CurSpaceSection Or InStr(PropertySetFld.Value, CurSpaceSection) <> 0)) Then
toggle = toggle + 1
End If
Next 'PropertySetFld
If toggle = 3 Then
totArea = totArea + objArea
toggle = 0
objArea = 0
Exit For
End If
End If
Next 'ObjPropertySet
End Select
Next 'objEnt
RESULT = totArea + CurSpaceArea
Проблема в том, что в какой-то момент "набивания" кода AA просто зависает вмертвую (при этом я еще не попытался входить внутрь блоков и внешних ссылок!). При этом если подставить вместо вычисляемых параметров их значения и код прогнать в VBA, то все вычисляется просто на ура.
Собственно вопросов несколько:
1. Можно ли заставить в таблицу собираться данные с объектных PropertySet'ов с фильтрацией по 2 (3, 4, 5 ...) параметрам, которые тоже являются данными из PropertySet'а?
2. В чем конкретно моя ошибка?
3. Возможно ли заставить VBS, работающий в коде таблиц АА (или полей PropertySet) использовать функции, написанные на VBA или VLISP? Если да, то как? Функции будут гарантированно подгружены.
4. Возможно ли в VBS получить интерфейс для IAecScheduleApplication для упрощения получения полей объектного PropertySet'a? Если да, то как? Очень не хочется по любому поводу лезть и реестр и там вычислять ссылку на CLSID (вдобавок я не уверен в успешности этого хода).
Файл с образцами данных и таблицей лежит по адресу http://depositfiles.com/files/bpeg899sr (210 кб)
P.S. На autodesk.com и на augi.com, скажу честно, особо тщательно не искал.