Quit the Other Application

When you start an application programmatically it takes up memory in the computer. You should quit the application when you have finished using it so system resources can be freed up.

Although each Object Model is different, most have a Quit method from the Application object that can be used to close the application cleanly. For example, using the variable declarations from the previous section, the following line of code will quit Excel:

NoteDestroying or going beyond the scope of the object variable does not necessarily cause the application to terminate. You should always quit the application using the appropriate method to assure proper memory cleanup.

List AutoCAD attributes on an Excel spreadsheet

This subroutine finds all the block references in the current drawing. It then finds the attributes attached to those block references and lists them in an Excel spreadsheet. To run this example, do the following:

  1. Open a drawing containing block references with attributes. (The sample drawing sample/activeX/attrib.dwg contains such block references.)
  2. Open the VBA IDE using the AutoCAD VBAIDE command.
  3. Using the Tools References menu option in the VBA IDE, select Microsoft Excel 8.0 Object Model.
  4. Copy this subroutine into a VBA Code window and run it.
Sub Ch12_Extract()
	Dim Excel As Excel.Application
	Dim ExcelSheet As Object
	Dim ExcelWorkbook As Object

	Dim RowNum As Integer
	Dim Header As Boolean
	Dim elem As AcadEntity
	Dim Array1 As Variant
	Dim Count As Integer

	' Launch Excel.
	Set Excel = New Excel.Application

	' Create a new workbook and find the active sheet.
	Set ExcelWorkbook = Excel.Workbooks.Add
	Set ExcelSheet = Excel.ActiveSheet
	ExcelWorkbook.SaveAs "Attribute.xls"

	RowNum = 1
	Header = False
	' Iterate through model space finding
	' all block references.
	For Each elem In ThisDrawing.ModelSpace
		With elem
			' When a block reference has been found,
			' check it for attributes
			If StrComp(.EntityName, "AcDbBlockReference", 1) _
				= 0 Then
				If .HasAttributes Then
					' Get the attributes
					Array1 = .GetAttributes
					' Copy the Tagstrings for the
					' Attributes into Excel
					For Count = LBound(Array1) To UBound(Array1)
						If Header = False Then
							If StrComp(Array1(Count).EntityName, _
								"AcDbAttribute", 1) = 0 Then
								ExcelSheet.Cells(RowNum, _
									Count + 1).value = _
							End If
						End If
					Next Count
					RowNum = RowNum + 1
					For Count = LBound(Array1) To UBound(Array1)
						ExcelSheet.Cells(RowNum, Count + 1).value _
									= Array1(Count).textString
					Next Count
					Header = True
				End If
			End If
		End With
	Next elem
End Sub