Тема: Рисование в Акаде через Excel
Открыл Автокад через Эксель, далее требуется передать значения из него в автокад. Не получается даже линию нарисовать. Помогите кто может!
Информационный портал для профессионалов в области САПР
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Форумы CADUser → Программирование → VBA → Рисование в Акаде через Excel
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Открыл Автокад через Эксель, далее требуется передать значения из него в автокад. Не получается даже линию нарисовать. Помогите кто может!
> serg
Отправил повторно пару примеров
Fatty
>'J'<
Может быть лучше открыть Автокад и из него обращаться к Excel.
> [Re:] pol
Смотря какая задача. Если главное расчеты, то лучше из Excel
Все получилось. Огромное всем спасибо
А мне можно примеры на мыло
alexcam@ua.fm
> alex
Ёлы, я удалил уже
Спроси serg'a
~'J'~
Люди, а можете мне скинуть пример скинуть на sws_korp@mail.ru. Буду благодарен!
> Константин
Предлагаю создать новую тему, что нужно конкретно?
~'J'~
> Vasily
Это сделать несложно, но какие действия конкретно,
ведь можно рисовать в Автокаде из Экселя,
а можно наоборот из Автокада считывать данные
в Экселе и по ним что-то делать
Две большие разницы, плюс я не могу придумывать
за кого-то что написать в качестве примера
~'J'~
Вот накидал небольшой пример самый простой,
надеюсь все будет понятно
Блин, какой из меня учитель...
Инструкция
Для примера нужно создать книгу Эксель и заполнить
первые 2 столбца данными с 1 по 1201 строку
В первой строке наименования столбцов:
1- "X coordinate"
2- "Y coordinate"
остальные ячейки можно быстро заполнить вставив в них формулу:
=RAND()*1000
Затем на этом же листе заходишь в меню:
*View->Toolbars->Contol Toolbox* (только не Forms!)
На экране появится панель *Control Toolbox*
кликни верхнюю левую кнопку *"Design Mode"* (режим конструктора)
появится вспомогательная панелька *"Exit Design mode"* (выход из режима)
Затем выбери на панели *"Control Toolbox"* кнопку *"Command Button"*
обведи на листе прямоугольник для кнопки нужного размера
Затем сначала кликни на любой ячейке левой клавишей для сброса
а затем правой клавишей на вновь созданной кнопке
Появится всплывающее меню, в котором выбери *"Properties"* (Свойства)
В свойствах измени *"Caption"* (Заголовок) вместо CommandButton1 к примеру
напиши *"Показать форму"* (Show Form) или иное
Можно там же как обычно поменять шрифт, цвета и тд
Закрой эту менюшку
Опять теми же манипуляциями правой клавишей щелкни на новой кнопке
и выбери View Code (Показать код)
Откроется редактор и там будут следующие строки:
Private Sub CommandButton1_Click() End Sub
Добавь туда следующий код:
Private Sub CommandButton1_Click() Dim vbeObj As Object, check As Boolean Dim varRefs As Object, itmRef As Object check = False Set vbeObj = ThisWorkbook.VBProject.VBE Set varRefs = vbeObj.ActiveVBProject.References For Each itmRef In varRefs If itmRef.Description Like "AutoCAD 200*" Then check = True Exit For End If Next If check = False Then MsgBox "Must be set reference to" & vbCr & _ Chr(34) & "AutoCAD 200x Type Library" & Chr(34) & " before" & vbCr & _ "Go to VBEditor-Tools->References" & vbCr & _ "Set reference to this library", vbExclamation Exit Sub Else frmTest.Show End If End Sub
Закрываешь редактор и нажимаешь кнопку на панельке *"Exit Design mode"*
потом закрываешь панель *"Control Toolbox"*
Опять идешь в редактор VB форму и на нее 2 кнопки
CommandButton1 и CommandButton2, для первой заголовок
можно прописать такой *"Go To Acad"* а для второй *"Exit"* или *"OK"*
дело вкуса
В модуле формы пишем примерно такой код:
(Это вариант вычерчивания отверстий на радиотехнической
панели, на моей машине 1200 отв. вычерчивается за 3-4 сек.)
Option Explicit Dim ptColl As New Collection Dim itm As Variant Private Declare Function SetFocus Lib "user32" (ByVal hwnd As Long) As Long Private Sub CommandButton1_Click() On Error GoTo Err_Control Err.Clear Dim rng As Range Set rng = Sheets("Sheet1").Range("A2:B1201") rng.Select Dim lngRow As Long, _ lngCol As Long, _ dblPt(1) As Double, _ varPt(1) As Double For lngRow = 1 To rng.Rows.Count dblPt(0) = CDbl(Replace(rng.Cells(lngRow, 1), ".", ",")) dblPt(1) = CDbl(Replace(rng.Cells(lngRow, 2), ".", ",")) ptColl.Add dblPt Next lngRow ' ____________________________________ Dim oldFileName As String Dim acApp As AcadApplication Dim aDoc As AcadDocument Dim i As Long Dim ExcCap As String ExcCap = Application.Caption oldFileName = Application _ .GetOpenFilename("AutoCAD Drawings (*.dwg), *.dwg", 1, , , False) If oldFileName = "" Then Exit Sub ' ____________________________________ Set acApp = CreateObject("Autocad.Application") acApp.Visible = True acApp.WindowState = acMax Set aDoc = acApp.Documents.Open(oldFileName, False) Dim newFileName As String newFileName = ThisWorkbook.Path & "\Test_Copy.dwg" aDoc.Application.ZoomExtents aDoc.Activate SetFocus aDoc.hwnd ' ____________________________________ Dim cpt(2) As Double With aDoc.ModelSpace For Each itm In ptColl cpt(0) = CDbl(itm(0)) cpt(1) = CDbl(itm(1)) cpt(2) = 0# .AddCircle cpt, 0.25 Next End With ' ____________________________________ aDoc.Regen acActiveViewport aDoc.SaveAs newFileName, ac2004_dwg acApp.Quit Set aDoc = Nothing Set acApp = Nothing AppActivate ExcCap, True SetFocus Application.hwnd ' ____________________________________ newFileName = Left(newFileName, (Len(newFileName) - 4)) ActiveSheet.Cells(ActiveCell.Row, 3).Value = newFileName ActiveSheet.Cells(ActiveCell.Row, 3).Select CommandButton2.SetFocus CommandButton2.ForeColor = vbRed ' ____________________________________ Err_Control: If Err Then MsgBox "Error " & Err.Number acApp.Quit Set aDoc = Nothing Set acApp = Nothing Else MsgBox "Drawing " & newFileName & " was saved" & vbCr & _ "in the current folder", vbInformation, "Action Info" End If End Sub Private Sub CommandButton2_Click() Unload Me End Sub
Естественно, это не далеко эталон, поэтому
переделай на свой вкус
>'J'<
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Форумы CADUser → Программирование → VBA → Рисование в Акаде через Excel
Форум работает на PunBB, при поддержке Informer Technologies, Inc