Форум » Прочие материалы VerZak.Ru » VBA » Ответить

VBA

Flash: Здравствуйте! Вы не могли бы подсказать/намекнуть как переменную VBA получить одно из полей основной надписи (например <материал наим.>)?

Ответов - 6

brigval: Не понятно о VBA для какой программы (автокад, офис...) идет речь. Тему сделал доступной всем, в связи с отсутствием в ней содержания личного характера.

Flash: Сложилась следующая ситуация: имеется трёхмерная сборка в autodesk inventor 2009 prof. Материалы деталей в моделях не указаны (по умолчанию, АВS plastic, углеродистая сталь...). Однако в проекте имеются 2d чертежи с заполненой основной надписью, где в числе прочего и проставлен материал (пруток, фанера, круг и т.п.). Внимательно изучив шаблон форматки я обнаружил, что материал хранится в полях <Материал ГОСТ>,<Материал Наим.>и <Материал Класс>. В настоящий момент мне необходимо экспортировать эти значения в текстовый файл на диске, но я не знаю, как к ним обратиться и что они из себя представляют. Кроме того, описание объктной модели 9 инвентора мне найти не удалось, хотя пообещали прислать от 10 версии. Так что очень надеюсь на помощь и советы более опытных пользователей автодесковской продукции... VBA, соответственно, инвенторовский, хотя это и не принципиально, подключиться к inventor я смогу

brigval: Flash Я бы порекомендовал Вам научиться пользовться хелпом в Инвенторе. Там есть и очень подробная объектная модель и очень много доступных примеров. Если текстовые поля в рамке, то сначала надо обратиться к TitleBlock.Definition, потом к эскизу Sketch, а в нем к текстовым полям TextBox. Перебором находите нужный TextBox и считываете из него текст.


Flash: Спасибо как за ответ, так и за совет, и хотя в предыдущем сообщении я писал об обстоятельствах заставивших меня обратиться на форум, придется ему (совету) последовать. Но это первая неделя знакомства с инвентором. А вот в процессе реализации совета вышла заминка - дело в том, что так я смог получить опять же только названия полей, а не их значения() Вот пример получившегося кода: Public Sub TitleBlockCopy() Dim i As Long Dim Inventor9 As Inventor.Application Set Inventor9 = GetObject(, "Inventor.Application") Dim oNewDocument As Inventor.DrawingDocument Set oNewDocument = Inventor9.Documents.Open("D:\Труба.idw") Dim oSourceDocument As DrawingDocument Set oSourceDocument = Inventor9.ActiveDocument Dim oSourceTitleBlockDef As TitleBlockDefinition Set oSourceTitleBlockDef = oSourceDocument.ActiveSheet.TitleBlock.Definition With oSourceTitleBlockDef 'For Each Item In .sketch.TextBoxes MsgBox (.sketch.TextBoxes.Item(26).Text + .sketch.TextBoxes.Item(27).Text + .sketch.TextBoxes.Item(28).Text) 'выдает "<Материал Класс><Материал Наим.><Материал ГОСТ>" 'Next End With End Sub Может быть, подскажете как быть, ведь где-то же эти поля хранятся???

brigval: Flash пишет: With oSourceTitleBlockDef 'For Each Item In .sketch.TextBoxes MsgBox (.sketch.TextBoxes.Item(26).Text + .sketch.TextBoxes.Item(27).Text + .sketch.TextBoxes.Item(28).Text) 'выдает "<Материал Класс><Материал Наим.><Материал ГОСТ>" 'Next End With Попробуйте воспользоваться функцией txt = oSourceDocument.ActiveSheet.TitleBlock.GetResultText(oTextBox)

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



полная версия страницы