Jump to content

Получение листа из коллекции по имени крушит Нанокад (VBA) (решено)


Recommended Posts

Собственно код ниже.

Не получается получить элемент коллекции 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 by doctorraz
Link to comment
Share on other sites

я видел эту тему, проходом по коллекции без проблем, но если нужно сделать еще и сортировку листов....

АК может так

Set tempLayout = Layouts("A4")

и нана может так со слоями, а с листами затык (((

на АК реализовал сортировку переименование листов и слоев... ткнулся на нане повторить, вигвам...

такое впечатление, что разработчики прекратили развитие ActiveX(((

Link to comment
Share on other sites

точно!!!

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))

коряво млин..((( :(

но возможно есть способ поизящнее..???

Link to comment
Share on other sites

спасибо.

проблема была в том, что пока не ткнешь вкладку листа или модели (после сортировки или переименования листов) нана не менял имена и порядок.

не очень изящно, но победил)))

Link to comment
Share on other sites

нано 10.1 ни реген, ни обновить даже вручную на ситуацию не влияют... только тынц по неактивной вкладке листа или модели, тогда обновляет порядок и имена...

пока сделал как в #5 (мне стыдно, но умнее ниче не придумал, в АК работало без этих танцев)

ЗЫ неспроста в нане не реализовано прямое редактирование названий листов (только через ком строку))) (ядро само по себе у GUI своя жизнь)

Link to comment
Share on other sites

а если паузу поставить в коде перед регеном в секунду например

даже руками реген не влияет, он жэж обновляет поле чертежа, а не элементы интерфейса (имена вкладок листов)

Link to comment
Share on other sites

Разница в том, что в АК я сразу вижу результат выполнения

ThisDrawing.Layout.Name = "ИмяЛиста"

а в нане нужны доп движения в виде переключения вкладок листов или модели

Link to comment
Share on other sites

це дефект

просить боязно, этот баг я знаю, как обойти... каким багом заменят при починке неизвестно :rolleyes:

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
 Share

  • Tell a friend

    Love Официальный форум компании Нанософт Разработка? Tell a friend!
×
×
  • Create New...