Построение выноски из excel

Здравствуйте Уважаемые программисты!

Подскажите пожалуйста, как через vba-excel обратиться к объектам “Позиционной выноски”: ?

  • точка позиционирования
  • 1строка
  • 2строка

Задача:

в Excel есть:

-столбцы A B - соответственно с координатами x y для точки выноски

-столбец C D - 1 и 2 строки выноски.

Нужно автоматизировать построение позиционной выноски.

както так надо)

Sub note()


Set SPDS = CreateObject("McCOM2.Server")

Set note1 = SPDS.CreateObject("McCOM2.SymSpdsNotePosition")

note1.ViewScale = SPDS.ViewScale

note1.Text = "Первая строка"

note1.Footer = "Вторая строка"
note1.Leaders.Add Array(100, 100)


note1.TextPosition = Array(20, 30)


note1.Place False, False
End Sub

upd отдельное “спасибо” за редактор сообщений форума

Ниже код для вставки блока с 2мя атрибутами, но хотелось бы Позиционной выноской?

И возможно ли в NanoCAD (не СПДС), т.к. в нем тоже есть объект Позиционная выноска?

Sub NANO_Block_2attrib()

Dim wrksht As Worksheet
Dim lastRow As Long
Dim firstRow As Long
Dim blockRefObj As AcadBlockReference
Dim Attr As Variant
Dim i As Long
Dim j As Long

On Error GoTo ERRORHANDLER
Set app = GetObject(, “nanoCAD.Application”)

ERRORHANDLER:
If Err.Description <> “” Then
Set app = CreateObject(“nanoCAD.Application”)
End If
app.Visible = True

app.Visible = True
Set ThisDrawing = app.ActiveDocument

Set wrksht = ActiveWorkbook.Worksheets(“5_Блок-с-Атр_2”)
wrksht.Activate
With wrksht
lastRow = .Cells(.Rows.Count, “A”).End(xlUp).Row
End With
firstRow = 2

Dim InsPoint(0 To 2) As Double
For i = firstRow To lastRow
InsPoint(0) = Range(“B” & i).Value: InsPoint(1) = Range(“C” & i).Value: InsPoint(2) = 0

On Error Resume Next
Set blockRefObj = ThisDrawing.ModelSpace.InsertBlock(InsPoint, Range(“A” & i).Value, Range(“D” & i).Value, Range(“D” & i).Value, Range(“D” & i).Value, Range(“E” & i).Value)

Attr = blockRefObj.GetAttributes
For j = 0 To UBound(Attr)
If Attr(j).TagString = “ТЕКСТ1” Then Attr(j).TextString = Range(“F” & i).Value
If Attr(j).TagString = “ТЕКСТ2” Then Attr(j).TextString = Range(“G” & i).Value
Next j
Next i

ThisDrawing.Regen acAllViewports
app.ZoomExtents

Set blockRefObj = Nothing
Set ThisDrawing = Nothing
Set app = Nothing
MsgBox “Блоки вставлены!”, vbInformation, “Finished”

End Sub

Ты код выше пробовала?

нет, ругается на SPDS

нужно переменные как-то объявить

нет, ругается на SPDS

нужно переменные как-то объявить

проверил все работает в платформе, кроме добавления лидера

может dll надо добавить в референс?

у меня добавлены только odax и ncauto

note.zip (408 байтов)

и без референсов все работает

====

но если хочется, то подключи

может dll надо добавить в референс?

у меня добавлены только odax и ncauto

поправил второй пост, теперь и лидер вставляется

Спасибо за помощь!

Получилось сделать в excel макрос для простановки множества позиц выносок (фрагмент ниже).

Dim SPDS As McCOM2.IServer
Dim note As McCOM2.Object
Set SPDS = CreateObject(“McCOM2.Server”)
For i = firstRow To lastRow
Set note = SPDS.CreateObject(“McCOM2.SymSpdsNotePosition”)
note.ViewScale = SPDS.ViewScale

note.Text = Range(“F” & i).Value
note.Footer = Range(“G” & i).Value
note.Leaders.Add Array(Range(“B” & i).Value, Range(“C” & i).Value) 'коорд точки вставки
note.TextPosition = Array(Range(“B” & i).Value - 30, Range(“C” & i).Value - 10) 'коорд точки полки
note.Place False, False
Next i

Можно еще вопрос:

Если на компьютере установлен только NanoCAD или NanoCAD СПДС, и нужно запустить макрос excel и требуется библиотека McCOM2.dll (из механики), то нужно устанавливаться саму механику или можно этот dll (dll с com) подключать из внешней папки при старте excel?

Если подключать из внешней папки, положив в нее этот dll, то как это сделать? (*просто добавить в референс нельзя, нужно как-то еще регистрировать)?

Можно еще вопрос:

Если на компьютере установлен только NanoCAD или NanoCAD СПДС, и нужно запустить макрос excel и требуется библиотека McCOM2.dll (из механики), то нужно устанавливаться саму механику или можно этот dll (dll с com) подключать из внешней папки при старте excel?

Если подключать из внешней папки, положив в нее этот dll, то как это сделать? (*просто добавить в референс нельзя, нужно как-то еще регистрировать)?

McCOM идет в составе голого нанокада

Нанотаблицы, нановыноски это все он

Можно вообще референсы не подключать

Больше скажу код из п. 2 будет работать даже из vbs

PS Просто это библиотека изначально была механикой, это уже потом из нее нанодевы сто шапок нашили

McCOM (McCOM2.dll) из голого нанокад- не добавляется в рефернс.

Может надо другой dll добавлять?

Если подключать из внешней папки, положив в нее этот dll, то как это сделать? (*просто добавить в референс нельзя, нужно как-то еще регистрировать)?

Из ком строки системы

Reqsvr32 “путь к длл”

С правами админа

Но имхо излишне, нана сам все регистрирует

Без McCOM2.dll из механики ошибка на “Dim SPDS As McCOM2.IServer”.

Механику ставить конечно не хотелось бы.

McCOM (McCOM2.dll) из голого нанокад- не добавляется в рефернс.

Емнип В Референс можно добавить только зарегистрированную библиотеку

Встречный вопрос:

Зачем ставить голую платформу? Лишая себя доступа к объектам механики и спдс через энаблер?

Согласна. Можно ставить “полный” нанокад.

Но можно ли как-то обойтись стандартными библиотеками голого нанокада, чтобы работал макрос excel?

судя по всему при установке голой платформы McCOM.server недоступен

сделано это умышленно или бага, я не знаю(((

при полной установке (возможно достаточно только СПДС, но лень проверять), при запуске голой платформы McCOM.server работает

**upd **таки проверил, если доставить СПДС (или механику), то внешний ActiveX работает

У меня смежный вопрос. А если установлена платформа +мех. + СПДС , но лицензия только на платформу работать будет?

Лицензия только та, что активирована. Объекты почти все.

https://rutube.ru/video/d2fc496f8dd332412c3be6540c1ba3d2/