doctorraz Posted November 20, 2018 Report Share Posted November 20, 2018 (edited) Собственно код ниже. Не получается получить элемент коллекции Layouts (Листов) по имени элемента. попытка приводит к зависанию и вылету Нано 10.1 Что интересно аналогичный код но с Layers (Слоями) работает. Посмотрите, кто понимает.. я недогоняю или ушу ActiveX Нано недостаточно хорош Sub Test() Set objApp = GetObject(, "NanoCAD.Application") Set ThisDraw = objApp.ActiveDocument Set Layouts = ThisDraw.Layouts ReDim arOld(Layouts.Count - 2, 1) For Each Layout In Layouts strTmpName = Layout.Name If strTmpName = "Model" Then GoTo SKIP ' Skip modelspace arOld(n, 0) = strTmpName strTmpOrder = Layout.taborder arOld(n, 1) = strTmpOrder n = n + 1 SKIP: Next Stop sLname = arOld(1, 0) Set tempLayout = Layouts(sLname) 'тут зависание и вылет нано End Sub Edited November 21, 2018 by doctorraz Quote Link to comment Share on other sites More sharing options...
Ivanco Posted November 20, 2018 Report Share Posted November 20, 2018 http://forum.nanocad...indpost&p=51295 переименование листов на Jscript 1 Quote Link to comment Share on other sites More sharing options...
doctorraz Posted November 20, 2018 Author Report Share Posted November 20, 2018 я видел эту тему, проходом по коллекции без проблем, но если нужно сделать еще и сортировку листов.... АК может так Set tempLayout = Layouts("A4") и нана может так со слоями, а с листами затык ((( на АК реализовал сортировку переименование листов и слоев... ткнулся на нане повторить, вигвам... такое впечатление, что разработчики прекратили развитие ActiveX((( Quote Link to comment Share on other sites More sharing options...
maratovich Posted November 20, 2018 Report Share Posted November 20, 2018 Без проверки.... Dim Layouts Dim Layout ThisDrawing.ActiveLayout = ThisDrawing.Layouts.Item("Initializacia") ThisDrawing.Layouts.Item(LayoutName).Name = NewLayoutName Set ActivniVkladka = ThisDrawing.Layouts(CStr("Model")) 1 Quote Link to comment Share on other sites More sharing options...
doctorraz Posted November 21, 2018 Author Report Share Posted November 21, 2018 точно!!! Set tempLayout = Layouts.Item(CStr(sLname)) так работает!!! ------------- ну и сразу новая трабла... после переименования или сортировки Нано не применяет изменения на чертеже пока не сменишь пространство... можно конечно передернуть листы из программы... переключить пространство, а потом вернуть назад, после переименования... типа так oldName = ThisDraw.ActiveLayout.Name If oldName <> "Model" Then ThisDraw.ActiveLayout = Layouts.Item("Model") Else ThisDraw.ActiveLayout = Layouts.Item(CStr(arrNew(0, 0))) End If ThisDraw.ActiveLayout = Layouts.Item(CStr(oldName)) коряво млин..((( но возможно есть способ поизящнее..??? Quote Link to comment Share on other sites More sharing options...
Robink Posted November 21, 2018 Report Share Posted November 21, 2018 _http://vbamodel.narod.ru/AutoCAD/idh_taborder.htm 1 Quote Link to comment Share on other sites More sharing options...
doctorraz Posted November 21, 2018 Author Report Share Posted November 21, 2018 спасибо. проблема была в том, что пока не ткнешь вкладку листа или модели (после сортировки или переименования листов) нана не менял имена и порядок. не очень изящно, но победил))) Quote Link to comment Share on other sites More sharing options...
Robink Posted November 21, 2018 Report Share Posted November 21, 2018 реген можно запустить Quote Link to comment Share on other sites More sharing options...
doctorraz Posted November 21, 2018 Author Report Share Posted November 21, 2018 нано 10.1 ни реген, ни обновить даже вручную на ситуацию не влияют... только тынц по неактивной вкладке листа или модели, тогда обновляет порядок и имена... пока сделал как в #5 (мне стыдно, но умнее ниче не придумал, в АК работало без этих танцев) ЗЫ неспроста в нане не реализовано прямое редактирование названий листов (только через ком строку))) (ядро само по себе у GUI своя жизнь) Quote Link to comment Share on other sites More sharing options...
Robink Posted November 21, 2018 Report Share Posted November 21, 2018 а если паузу поставить в коде перед регеном в секунду например Quote Link to comment Share on other sites More sharing options...
doctorraz Posted November 21, 2018 Author Report Share Posted November 21, 2018 а если паузу поставить в коде перед регеном в секунду например даже руками реген не влияет, он жэж обновляет поле чертежа, а не элементы интерфейса (имена вкладок листов) Quote Link to comment Share on other sites More sharing options...
doctorraz Posted November 21, 2018 Author Report Share Posted November 21, 2018 Разница в том, что в АК я сразу вижу результат выполнения ThisDrawing.Layout.Name = "ИмяЛиста" а в нане нужны доп движения в виде переключения вкладок листов или модели Quote Link to comment Share on other sites More sharing options...
Robink Posted November 21, 2018 Report Share Posted November 21, 2018 це дефект Quote Link to comment Share on other sites More sharing options...
doctorraz Posted November 21, 2018 Author Report Share Posted November 21, 2018 це дефект просить боязно, этот баг я знаю, как обойти... каким багом заменят при починке неизвестно Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.