|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
![]() |
#1 | |
Присвоение метки single text'у в автокаде.
Регистрация: 07.11.2011
Сообщений: 4
|
||
Просмотров: 3655
|
|
||||
Регистрация: 21.02.2009
Сообщений: 825
|
почитай тут
http://docs.autodesk.com/ACAD_E/2012...70276f77ea.htm PS А какая цель? Опиши общую задачу. Может быть обойтись без Xdata...
__________________
Я-проектировщик бывший проектировщик! |
|||
![]() |
|
||||
Регистрация: 07.11.2011
Сообщений: 4
|
Сергей, данную тему уже читал, неоднократно, но как реализовать её на практике приминительно к stext'y не совсем понимаю, а точнее совсем не понимаю
![]() p/s Цель такова... есть множество элементов stext в доке .dwg, в excele в определённую ячейку я вбиваю значение, ну опять таки пусть это будет фамилия автора, к этой ячейке, уже присвоена ссылка к примеру author. For Each currCell In Range("A11", "A20") If currCell.Value = "" Then Exit For If currCell.Hyperlinks.Item(1).Address Like "?:\*" Then strPath = currCell.Hyperlinks.Item(1).Address Else strPath = ActiveWorkbook.Path & "\" & currCell.Hyperlinks.Item(1).Address End If Я пытаюсь добиться следующего, чтобы вбивая значение в excele, запуская макрос, все значения заменялись в автокаде, на те, что я уже вбил в excel. И это работает, мои предшественники, которые являются собственно говоря авторами макроса, это реализовали, но они это реализовали к ограниченному количеству stext элементов. Я же хочу пойти дальше, и автоматизировать замену того, что они не автоматизировали. Вот собственно говоря и пытаюсь додуматься, как же они присвоили ID к конкретному элементу stext ![]() Последний раз редактировалось АртурМ, 07.11.2011 в 10:20. |
|||
![]() |
|
||||
Регистрация: 21.02.2009
Сообщений: 825
|
ну а из примеров в ХЕЛПе?
Код:
Ты делаешь что? Сначала обращаешься к определённым ТЕКСТам и ставишь на них Xdata - метку, а потом создаёшь экселевский файл с этими метками(1 столбец), руками заполняешь 2 столбец и хочешь чтобы значения этих ТЕКСТов с метками заменялись в соответствии с 2 столбцом? P.S. А не про заполнение-ли основных надписей мы говорим? P.P.S. Кстати было бы разумно предоставить код твоих "предшественников". Там и будет видно откуда они берут привязку
__________________
Я-проектировщик бывший проектировщик! Последний раз редактировалось Сергей Богатов, 07.11.2011 в 11:02. |
|||
![]() |
|
||||
Регистрация: 07.11.2011
Сообщений: 4
|
Цитата:
вот заполнение основных надписей они реализовали, я хочу реализовать замену всего, что мне может потребоваться. Цитата:
Dim objAcad As New AutoCAD.AcadApplication Dim objAcadDoc As AutoCAD.AcadDocument Dim strName As String Dim strVal As String Dim varVal As Variant Dim objTbl As Range, currCell As Range Dim objCell As Range Dim strInput As String Dim strPath As String 'Dim i As Integer Dim sstext As AcadSelectionSet Dim FilterType(0 To 0) As Integer Dim FilterData(0 To 0) As Variant Dim DataType(0 To 1) As Integer Dim Data(0 To 1) As Variant Dim i As Variant Set objTbl = ActiveCell.CurrentRegion For Each currCell In Range("A2", "A10") If currCell.Value = "" Then Exit For If currCell.Hyperlinks.Item(1).Address Like "?:\*" Then strPath = currCell.Hyperlinks.Item(1).Address Else strPath = ActiveWorkbook.Path & "\" & currCell.Hyperlinks.Item(1).Address End If 'открытие автокадовского документа With objAcad .Visible = True .WindowState = acMax Set objAcadDoc = .Documents.Open(strPath) End With objTbl.Offset(0, 1).Resize(objTbl.Rows.Count, 1).Select ' удаление selection On Error GoTo ErrorHandler1 objAcadDoc.SelectionSets.Item("SS1").Delete ErrorHandler1: 'Выбор об'ектов Set sstext = objAcadDoc.SelectionSets.Add("SS1") FilterType(0) = 1001: FilterData(0) = "XData_Set_App" Dim xdataOut As Variant Dim xtypeOut As Variant sstext.Select acSelectionSetAll, , , FilterType, FilterData 'редактирование 'цикл по выборке For Each i In sstext i.GetXData "XData_Set_App", xtypeOut, xdataOut 'цикл по ячейкам For Each objCell In Selection strName = objCell.Value varVal = objCell.Offset(0, 1).Value strVal = varVal If xdataOut(1) = strName Then i.TextString = strVal Next Next On Error GoTo ErrorHandler2 objAcadDoc.SelectionSets.Item("SS1").Delete ErrorHandler2: Set sstext = Nothing objAcadDoc.Save objAcadDoc.Close Next objAcad.Quit Set objAcad = Nothing End Sub Это то, что в excel VBA вот эту ступень я не понимаю как они реализовали. Проекта VBA в автокаде с этим кодом не имею, подозреваю, что в одном документе stextам присвоили метки и просто их скопировали в другой. |
|||
![]() |
|
||||
Регистрация: 21.02.2009
Сообщений: 825
|
Хм - а экселевский файл как выглядит? Вообще-то, похоже, что это какая-то неправильная штука. Логичнее использовать блоки с атрибутами. Нужно видеть код которым "они" задавали эти XData. Если вручную - то это бред...
PS Всё-таки полностью опиши что ты хочешь от программы. Конкретные действия. Без привязки к тому что сделали "предшественники"
__________________
Я-проектировщик бывший проектировщик! Последний раз редактировалось Сергей Богатов, 07.11.2011 в 12:02. |
|||
![]() |
|
||||
Регистрация: 07.11.2011
Сообщений: 4
|
Цитата:
Хочу я следующее... У меня есть 4 файла dwg, в каждом по 4 чертежа, в них есть множество текстовых полей, начиная со штампов (что они собственно реализовали), заканчивая различными значениями, которые от проекта к проекту меняются, перебивать в ручную не то, чтобы лень (хотя и это тоже), но такая перебивка ведёт за собой последствия, связанные с невнимательностью, хоть на одном чертеже из 16, но могу пропустить какое-либо значение перебить. Мне гораздо проще один раз, каждому из этих текстовых полей присвоить метки, и забивая их в excele осуществлять автозамену. Я готов позаморачиваться и сделать привязку в ручную, только объясните мне кто-нибудь как ![]() ![]() |
|||
![]() |
![]() |
|
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Why VBA interpol function doesn't work in this excel file... | romkeris | Программирование | 5 | 13.05.2008 12:03 |