Visual Basic para Aplicaciones - Autocad desde Excel

Life is soft - evento anual de software empresarial
   
Vista:

Autocad desde Excel

Publicado por guihe (1 intervención) el 25/05/2010 10:07:23
Hola a todos, a ver si me podeis echar una mano con el codigo. Tengo una macro de Excel que llama a Autocad y dibuja una serie splines sobre una plantilla en que hay rectas. El caso es que, quiero sacar las coordenadas de la interseccion de las rectas con el spline y esto es lo que no me funciona. Desarrollando la macro desde Autocad si funciona, pero al meterla en excel no. La parte del codigo que tiene el apostrofo para que no se lea es la de autocad.
El codigo que no fucniona es la funcion 'IntersectWith'
aCaDaP es la aplicacion de Autoicad.
Espero haberme explicado y muchas gracias de antemano.
PD: pondre este post tambien en los foros de Autocad y Excel.

CODIGO
'Seleciona la recta de 0.05 mm de diametro
aCaDaP.ActiveDocument.Utility.GetEntity rectaLIMO, basePnt, "Selecciona la recta de 0.05 mm"
'ThisDrawing.Utility.GetEntity rectaLIMO, basePnt, "Selecciona la recta de 0.05 mm"
Set recta1 = rectaLIMO

'Seleciona la recta de 0.002 mm de diametro
aCaDaP.ActiveDocument.Utility.GetEntity rectaARCI, basePnt, "Selecciona la recta de 0.002 mm"
'ThisDrawing.Utility.GetEntity rectaARCI, basePnt, "Selecciona la recta de 0.002 mm"
Set recta2 = rectaARCI

'para simplificar llamamos a Excel para ir metiendo los datos
nombrearchivo = aCaDaP.ActiveDocument.Utility.GetString(False, "Nombre del archivo de resultados: ")
'nombrearchivo = ThisDrawing.Utility.GetString(False, "Nombre archivo de resultados: ")
Set ExcelAppObj = New Excel.Application
ExcelAppObj.Visible = True
Set ExcelWorkbook = Excel.Workbooks.Add
Set ExcelSheet = ExcelAppObj.ActiveSheet
aCaDaP.Visible = True

'ahora vamos encendiendolas poco a poco y seleccionamos las curvas
For cont = 2 To numcapas + 1
aCaDaP.ActiveDocument.ActiveLayer = aCaDaP.ActiveDocument.Layers(cont)
'ThisDrawing.ActiveLayer = ThisDrawing.Layers(cont)
Set capa = aCaDaP.ActiveDocument.Layers(cont)
'Set capa = ThisDrawing.Layers(cont)
capa.LayerOn = True
aCaDaP.ActiveDocument.Regen acActiveViewport
'ThisDrawing.Regen acActiveViewport

' Seleccionar que curva (spline)
aCaDaP.ActiveDocument.Utility.GetEntity returnObj, basePnt, "Seleciona la curva"
'ThisDrawing.Utility.GetEntity returnObj, basePnt, "Seleciona la curva"
Set curva = returnObj

'busca la interseccion de la curva (spline) y la recta de 0.005
'Dim interLIMO As Variant
interLIMO = aCaDaP.ActiveDocument.rectaLIMO.IntersectWith(curva, acExtendNone)
'interLIMO = recta1.IntersectWith(curva, acExtendNone)

'busca la interseccion de la curva (spline) con la recta de 0.002
'Dim interARCI As Variant
Set interARCI = aCaDaP.ActiveDocument.rectaARCI.IntersectWith(curva, acExtendNone)
'interARCI = recta2.IntersectWith(curva, acExtendNone)



capa.LayerOn = False
Next cont
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Autocad desde Excel

Publicado por Alma Evelia Romero (1 intervención) el 20/03/2011 06:57:10
me podrias mandar tu macro de excel para revisarlo , eh estado programando en vba para excel y autocad

saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Autocad desde Excel

Publicado por Zeus Alberto Paez Renteria (26 intervenciones) el 16/06/2010 11:43:17
Mira como dicen Zapateros a sus Zapatos, es mejor que los que realice autocad lo programes en Acad y lo de excel en excel. Yo he trabajado varios años con VBA Acad y Excel pero siempre he preferido programar en Autocad y mandar llamar a Excel en lugar de al reves. Y simplemente por la complejidad del codigo, es mas facil encontrar un error de condigo de excel que de acad.

Y bueno si tienes alguna restriccion especifica respecto a trabajar el programa en excel bueno pues solo simula que lo corres en excel aunque la rutina este en autocad. En lugar de intentar correr todo el codigo desde excel solo manda llamar y/o ejecutar la rutina que se encuentre en autocad. Visualmente es lo mismo a nivel usuario pero tecnicamente es muy diferente, es mas sencillo. Manda llamar los programas de autocad en excel.

Ahora una pregunta importante seria si cargargaste todas las librerias de Autocad en el modelo de Excel. Herramientas>>Referencias

Otro detalle es que no veo en tu codigo cuando mandas llamar al autocad, mas bien veo que mandas llamar a excel, lo que te comento seria algun codigo similar a este:

Dim objCad As AcadApplication
Dim objDwg As AcadDocument
Private Function Activar_AutoCAD() As Boolean
On Error Resume Next
Err.Clear
Set objCad = GetObject(, "AutoCAD.Application")
If Err.Number <> 0 Then
answ = MsgBox("Abra AutoCAD!", vbCritical, "Error")
Else
Set objDwg = objCad.ActiveDocument
If Err.Number <> 0 Then
answ = MsgBox("Active un DWG!", vbCritical, "Error")
End If
End If
If Err.Number = 0 Then Activar_AutoCAD = True
If Err.Number <> 0 Then Activar_AutoCAD = False
End Function

Bueno espero te sirva saludos

Ing. Zeus Alberto Paez Renteria
Triumph Aerospace Group
Mexicali B.C. Mx
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Autocad desde Excel

Publicado por Emilio (1 intervención) el 21/10/2014 04:23:30
Alguien que me pueda ayudar; tengo un codigo simple en el cual dibujo lineas y creo una capa desde excel hacia autocad pero me da un error al tratar de activar la capa para que las lineas se dibujen en la capa creada, por favor si me pueden ayudar a resolverlo mi codigo es el siguiente:

Sub dibujar_linea()

Dim PI(0 To 2) As Double
Dim Pj(0 To 2) As Double
Dim puntos As Integer
Dim n As Integer
Dim linea As AcadLine
Dim Capa As AcadLayer
puntos = InputBox("Ingrese la Cantidad de Tramos a Dibujar")
For n = 1 To puntos
PI(0) = Application.InputBox("Seleccione X Inicial del Tramo " & n, , ""): PI(1) = Application.InputBox("Seleccione Y Inicial del Tramo " & n, , "")
Pj(0) = Application.InputBox("Seleccione X Final del Tramo " & n, , ""): Pj(1) = Application.InputBox("Seleccione Y Final del Tramo " & n, , "")
'Capa.LayerOn = True
Set Capa = AutoCAD.ActiveDocument.Layers.Add("RedBT")
Set linea = AutoCAD.Application.ActiveDocument.ModelSpace.AddLine(PI, Pj)
ZoomAll
Next n
MsgBox ("Se Dibujaron Exitosamente " & puntos & " Tramos")
End Sub
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar