III. To và ch nh sa Pull-down và Shorcut menus (1,5t) 1.T o m i Pull-down menu
2. Làm v ic vi module và macro (0.5t) Ch y macro t toolbar và menu
B n có th ch y macro t AutoCAD toolbar ho c menu b ng cách thay đ i menu Macro property cho toolbar ho c menu đó. Macro property có d ng :
-VBARUN filename.dvb!modulename.macroname
Trong đó :
- filename là tên c a project file.
- modulename là tên c a module ch a macro c n ch y. - macroname là tên c a macro.
Ví d : -VBARUN Project1.dvb!module1.thongkethep
T i Project m t cách t đ ng
Có 2 cách đ Load Project m t cách t đ ng :
1. Khi VBA đ c t i, nó s tìm ki m trong AutoCAD m t project có tên là acad.dvb. File này s đ c t i m t cách m c đnh nh m t default project
2. C ng gi ng nh VBA, Autolisp c ng có m t file có tên là acad.lsp c ng đ c t i m t cách t đ ng khi b n v m i xu t hi n. Dòng l nh sau trong file acad.lsp dùng đ t i project myproj.dvb vào trong b n v m i khi m t b n v m i đ c m
(defun S::STARTUP()
(command "_VBALOAD" "myproj.dvb") )
Ch y macro m t cách t đ ng
Có 2 cách đ chay macro m t cách t đ ng :
1. B n có th ch y các macro m t cách t đ ng, b ng cách so n th o AutoCAD startup c a acad.lsp. Ví d , đ t đ ng ch y Macro có tên drawline, đ u tiên b n copy đo n macro vào trong file project acad.dvb . Sau đó, m notepad.exe và so n đo n sau :
(defun S::STARTUP()
(command "_-vbarun" "drawline") )
2. Trong Project acad.dvb, macro có tên AcadStartup s t đ ng đ c chay khi VBA load. III. T ng tác v i các ng d ng và các c s d li u khác (0.5t) 1. T ng tác v i Visual Lisp T đ c 2. S d ng c s d li u DAO T đ c, gi ng VB 3. Giao ti p v i các ng d ng khác.
trao đ i thông tin gi a các Activex Model, ta làm theo các b c sau :
2. T o m t instance c a ng d ng
3. Vi t Code b ng cách s d ng c AutoCAD Object Model và Object Model c a ng d ng ngoài.
Tham chi u đ n ActiveX Object Library c a ng d ng khác
Vi c đ u tiên khi b n trao đ i thông tin v i các ng d ng ngoài là tham chi n đ n ActiveX Object Library, vì nó ch a t t c các đ i t ng, ph ng th c, thu c tính, h ng s và s ki n do ng d ng đó đnh ngh a
Thông th ng, đ k t n i v i các Activex Library, b n ch n Tools menu å References. , sau đó m t danh sách các object librarie VBA tìm th y trong h th ng c a b n s đ c hi n lên. Sau đó b n ch n nh ng Library mà b n c n trao đ i d li u t i nó. V d , b n thêm object library c a Microsoft Excel, ch n Microsoft Excel object library entry trong danh sách.
Khi b n đã t o tham chi u đ n object library c a ng d ng ngoài, b n có th s d ng VBA Object Browser đ xem danh sách các object c a ng d ng mà b n tham chi u đ n.
C th nh sau :
1. In the VBA IDE, open the Tools menu and select the References menu option.
2. Find and select the entry in the list of Available References for the application you want to access.
3. Select OK to close the dialog box with your changes.
T o m t Instance c a ng d ng ngoài
Sau khi tham chi u đ n Object library, b n ph i t o m t instance c a ng d ng đó. Các b c th c hi n nh sau :
1. B n khai báo m t bi n đ i di n cho application. Ví d , khai báo m t bi n đ i di n cho Excel.Application :
Dim ExcelAppObj as Excel.Application
2. sau đó b n t o m t instance cho application. Ví d :
Set ExcelAppObj = New Excel.Application Vi t Code cho Objects t ng d ng ngoài
Ví d sau đây đi u khi n s hi n h c a Excel sau khi đã tao Instance cho nó :
ExcelAppObj.Visible = TRUE
B n có th s d ng VBA Object Browser đ tìm các đ i t ng và s d ng help file đ đ c thêm v b t k m t Object Model mà b n tham chi n đ n.
Khi ng d ng ngoài ch y, nó chi m m t b nh nh t đnh trong máy tính. Sau khi không s d ng đ n ch ng trình đó n a, t t nh t b n nên t t t t c các ng d ng mà b n đã t o Instance cho nó. Ví d , thoát session Excel nh sau :
ExcelAppObj.Application.Quit List AutoCAD attributes on an Excel spreadsheet
Ví d : th t c sai tìm t t c các block references trong b n v hi n hành. Li t kê t t c các attributes c a các block references đó :
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 = _ Array1(Count).TagString
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
Excel.Application.Quit End Sub
S d ng GetObject, và NewObject
Nh đã trình bày tr ng I “Cách l p trình AutoCAD VBA trong Excel”, B n c ng th GetObject, và NewObject đ connect t i các ng d ng khác
B ng l p ng d ng
APPLICATION CLASS IDENTIFICATION
Excel Excel.Application.x (x là product version) Word Word.Application.x (x là version index)
Microsoft Product Versions
PRODUCT VERSION EXAMPLE
Office 95 7 Word.Application.7 Office 97 8 Excel.Application.8 Office 2000 9 Word.Application.9 Office XP 10 Powerpoint.Application.10 Office 2003 11 Outlook.Application.11 Ví d :
Public Sub StartExcel(App As Excel.Application, Visible As Boolean) 'handle errors inline
On Error Resume Next
Set App = GetObject(, "Excel.Application") 'depends on application 'check to see if application is running
If Err Then
'no, application will need to be started Err.Clear
Set App = CreateObject("Excel.Application") 'depends on application 'check to see if application was started
If Err Then
'no, application could not be started - exit Exit Sub
End If End If
'set the application visibility App.Visible = Visible
End Sub
Ki m tra xem đã connect đ c v i Excel hay ch a : Public Sub Start()
Dim oExcel As Excel.Application 'attempt to start Excel
StartExcel oExcel, True If Not oExcel Is Nothing Then MsgBox "Success"
Else
Exit Sub End If
End Sub
IV. Làm vi c v i Xdata (1 ti t) 1. Khái ni m v XData