Pregunta: | 67332 - AUTOCAD CERRAR PLANOS CORRECTAMENTE |
Autor: | Enrique Larrosa |
Hola he creado una macro VBA en un plano autocad. Podria crear una aplicacion escritorio con Vb Studio y ejecutar desde esta los comandos Excel y Autocad. Adjunto codigo para mas informacion: Public ExcelApp As Excel.Application Dim FullaExcel As String Public Wrkbook As Excel.Workbooks Dim llistaDWG As AcadDocuments Dim dwg As AcadDocument Dim rutaFitxerDWG As String Dim nomFixerDWG As String Dim rutaNomDWG As String Dim StrnumDWG As String Dim IntnumDWG As Integer Dim numTotalDWG As Integer Dim StrNumPagNomemclatures As String Dim StrIndexBlocksEnDWG As String Dim indexBlocksDWGArray() As String Dim contadorFullesExcel As Variant Dim acEntidad As AcadEntity Dim acadBlkRef As AcadBlockReference Dim varAttributes As Variant '============================================ Public Sub CreanomBlockArray() 'convertimos contenido string a Array siendo el valor de cada posición el que hay entre el separador / StrIndexBlocksEnDWG = "2/1/4/5/6/7/8/9/10/11/12/13/14/15/16/17/18/19/20/21/22/23/24/25/26/" StrIndexBlocksEnDWG = StrIndexBlocksEnDWG + "27/28/29/30/31/32/33/34/35/36/37/38/39/40/41/42/43/44/45/46/47/48/49/50" indexBlocksDWGArray = Split(StrIndexBlocksEnDWG, "/") End Sub '================================================= Function ExcelConnect() ' This function connects excel with autocad On Error Resume Next Set ExcelApp = GetObject(, "Excel.Application") If Err Then Err.Clear Set ExcelApp = CreateObject("Excel.Application") ExcelApp.Visible = True If Err Then MsgBox Err.Description Exit Function End If End If End Function '================================================== Function ExcelClose() 'cerramos fichero Excel ' Application.DisplayAlerts = False Application.Quit ' cierra conexion entre Autocad y excel Set ExcelApp = Nothing End Function '=================================================== Public Sub CreaStocklist() rutaFitxerDWG = ThisDrawing.Path nomFixerDWG = AutoCAD.ActiveDocument.Name rutaNomDWG = rutaFitxerDWG & "/" & nomFitxerDWG CreanomBlockArray ExcelConnect Workbooks.Open FileName:="C:dwgStocklist_N.xlsx" contadorFullesExcel = ActiveWorkbook.Worksheets.Count For numFullaExcel = 1 To contadorFullesExcel FullaExcel = "hoja" & CStr(numFullaExcel) Excel.Worksheets(FullaExcel).Activate If numFullaExcel = 1 Then IntnumDWG = CInt(Excel.Worksheets(FullaExcel).Cells(1, 9).Value) numTotalDWG = CInt(Excel.Worksheets(FullaExcel).Cells(1, 9).Value) + (contadorFullesExcel - 1) Else IntnumDWG = (IntnumDWG + 1) End If If IntnumDWG < 100 Then StrnumDWG = "0" & CStr(IntnumDWG) Else StrnumDWG = CStr(IntnumDWG) End If StrNumPagNomemclatures = Excel.Worksheets(FullaExcel).Cells(1, 3).Value 'recorremos el array de todos los bloques que hay en el dibujo For recorrer = LBound(indexBlocksDWGArray) To UBound(indexBlocksDWGArray) 'guardamos el bloque en un objeto entidad Set acEntidad = ThisDrawing.ModelSpace.Item(CInt(indexBlocksDWGArray(recorrer))) Set acadBlkRef = acEntidad 'como estoy modificando atributos hago una funcion 'acadBlkRef = OmplirBlock(acadBlkRef, recorrer) varAttributes = acadBlkRef.GetAttributes varAttributes(0).TextString = CStr(ExcelApp.ActiveSheet.Cells(recorrer + 1, 1)) varAttributes(1).TextString = CStr(ExcelApp.ActiveSheet.Cells(recorrer + 1, 2)) varAttributes(2).TextString = CStr(ExcelApp.ActiveSheet.Cells(recorrer + 1, 3)) varAttributes(3).TextString = CStr(ExcelApp.ActiveSheet.Cells(recorrer + 1, 4)) varAttributes(4).TextString = CStr(ExcelApp.ActiveSheet.Cells(recorrer + 1, 5)) varAttributes(5).TextString = CStr(ExcelApp.ActiveSheet.Cells(recorrer + 1, 6)) varAttributes(6).TextString = CStr(ExcelApp.ActiveSheet.Cells(recorrer + 1, 7)) varAttributes(7).TextString = CStr(ExcelApp.ActiveSheet.Cells(recorrer + 1, 8)) Next recorrer ThisDrawing.Regen (acActiveViewport) AutoCAD.AcadApplication.ZoomExtents ThisDrawing.SaveAs (StrnumDWG) If numFullaExcel > contadorFullesExcel Then Set dwg = acad.ActiveDocument dwg.Open rutaNomDWG End If Next numFullaExcel ActiveWindow.Close Workbooks.Close Set llistaDWG = AutoCAD.Application.Documents For Each dwg In llistaDWG dwg.Close Next AutoCAD.AcadApplication.Quit End Sub la intención de todo esto es que todo el codigo este en la aplicacion y las plantillas de autocad de y excel no tengan codigo VBA. que es como las enttrega el cliente. |