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

Olga94
отредактировано 3 июл Раздел: API

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

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

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

Задача:

в Excel есть:

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

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

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

Теги темы:

Ответы

  • doctorRAZ
    отредактировано 3 июл

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

    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 отдельное "спасибо" за редактор сообщений форума

  • Olga94
    отредактировано 3 июл

    Ниже код для вставки блока с 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

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

  • Olga94
    отредактировано 3 июл

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

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

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

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

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

  • doctorRAZ
    отредактировано 3 июл

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

    ====

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

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

  • Olga94
    отредактировано 4 июл

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

    Получилось сделать в 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, то как это сделать? (*просто добавить в референс нельзя, нужно как-то еще регистрировать)?

  • doctorRAZ
    отредактировано 5 июл

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

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

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

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

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

  • Olga94
    отредактировано 5 июл

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

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

  • doctorRAZ
    отредактировано 5 июл

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

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

    Reqsvr32 "путь к длл"

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

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

  • Olga94
    отредактировано 5 июл

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

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

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

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

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

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

  • Olga94
    отредактировано 5 июл

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

  • doctorRAZ
    отредактировано 5 июл

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

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

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

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

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