Перейти к содержанию
doctorraz

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

Рекомендуемые сообщения

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

Не получается получить элемент коллекции 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

Изменено пользователем doctorraz

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

АК может так

Set tempLayout = Layouts("A4")

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Без проверки....

Dim Layouts

Dim Layout

ThisDrawing.ActiveLayout = ThisDrawing.Layouts.Item("Initializacia")

ThisDrawing.Layouts.Item(LayoutName).Name = NewLayoutName

Set ActivniVkladka = ThisDrawing.Layouts(CStr("Model"))

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

точно!!!

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

_http://vbamodel.narod.ru/AutoCAD/idh_taborder.htm

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

спасибо.

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

це дефект

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...

×
×
  • Создать...