vba for autocad
DESCRIPTION
seft study Visual basic for autocadTRANSCRIPT
Designing Team-Engineering Department Đinh Văn Tráng
Basic VBA for AutoCad Page 1
PHỤ LỤC
Chương 1 ................................................................................................................................... 8
TỔNG QUAN VỀ VBA TRONG AUTOCAD ......................................................................... 8
1.1. Khái niệm dự án nhúng và dự án độc lập .................................................................. 8
1.2. Trình quản lý dự án VBA ........................................................................................... 8
1.3. Định nghĩa lệnh mới bằng Autolisp ............................................................................ 9
Chương 2 ..................................................................................................................................11
HỆ THỒNG ĐỐI TƯỢNG VÀ MỘT SỐ THAO TÁC CƠ BẢN TRONG AUTOCAD ......11
2.1. Mô hình đối tượng trong AutoCad........................................................................... 11
2.2. Một số đối tượng chính trong AutoCad ................................................................... 12
2.1.1. Đối tượng Application ....................................................................................... 12
2.1.2. Khái niệm tập đối tượng .................................................................................... 12
2.1.3. Tập đối tượng Documents và đối tượng Document .......................................... 12
2.2. Các thao tác cơ bản trong AutoCad ......................................................................... 13
2.2.1. Mở bản vẽ - Phương thức Open ........................................................................ 13
2.2.2. Tạo bản vẽ mới – Phương thức Add ................................................................. 13
2.2.3. Lưu bản vẽ -Phương thức Save, SaveAs ........................................................... 14
2.2.4. Đóng bản vẽ - Phương thức Close ..................................................................... 15
2.2.5. Thoát khỏi chương trình AutoCad – Phương thức Quit .................................. 16
Chương 3 ..................................................................................................................................17
CÁC KIỂU DỮ LIỆU VÀ CÁCH KHAI BÁO BIẾN TRONG VBA ...................................17
3.1. Những quy đinh về cú pháp trong VBA ................................................................... 17
3.2. Khai báo biến trong VBA ......................................................................................... 18
3.2.1. Tổng Quát .......................................................................................................... 18
3.2.2. Cách thức khai báo biến .................................................................................... 18
Designing Team-Engineering Department Đinh Văn Tráng
Basic VBA for AutoCad Page 2
3.3. Các kiểu dữ liệu cơ bản trong VBA ......................................................................... 19
3.3.1. Kiểu Logic – Boolean ......................................................................................... 19
3.3.2. Kiểu số nguyên – Byte/Integer/Long ................................................................. 20
3.3.3. Kiểu số thực – Single/Double ............................................................................. 20
3.3.4. Kiểu Chuỗi – String ........................................................................................... 21
3.3.5. Kiểu Mảng .......................................................................................................... 21
3.3.6. Kiểu Variant....................................................................................................... 23
Chương 4 ..................................................................................................................................24
TOÁN TỬ VÀ CÁC HÀM THÔNG DỤNG ...........................................................................24
4.1. Các hàm số học trong VBA ...................................................................................... 25
4.2. Các toán tử so sánh thường sử dụng trong VBA ..................................................... 26
4.3. Toán tử Logic thường dùng trong VBA ................................................................... 27
4.3.1. Toán tử AND ...................................................................................................... 27
4.3.2. Toán tử OR ........................................................................................................ 28
4.3.3. Toán tử NOT ...................................................................................................... 29
4.4. Các hàm chuyển đồi dữ liệu ..................................................................................... 29
4.5. Các hàm xử lý chuỗi.................................................................................................. 30
4.5.1. Hàm LEFT ......................................................................................................... 30
4.5.2. Hàm RIGHT ...................................................................................................... 30
4.5.3. Hàm MID ........................................................................................................... 30
4.5.4. Hàm LEN ........................................................................................................... 31
4.5.5. Hàm UCase ........................................................................................................ 31
4.5.6. Hàm LCase ......................................................................................................... 32
4.5.7. Hàm InStr .......................................................................................................... 32
4.5.8. Hàm InStrRev .................................................................................................... 34
Designing Team-Engineering Department Đinh Văn Tráng
Basic VBA for AutoCad Page 3
4.5.9. Hàm Ltrim, RTrim ............................................................................................ 35
4.5.10. Hàm Space ...................................................................................................... 36
4.5.11. Hàm Split ........................................................................................................ 36
4.5.12. Hàm Replace................................................................................................... 38
4.5.13. Hàm StrComp ................................................................................................ 39
Chương 5 ..................................................................................................................................41
CẤU TRÚC ĐIỀU KIỆN VÀ VÒNG LẶP .............................................................................41
5.1. Cấu Trúc Điều Kiện .................................................................................................. 41
5.1.1. Cấu trúc : “If … Then …”................................................................................. 41
5.1.2. Cấu trúc : “If … Then… Else … End If” ......................................................... 42
5.1.3. Cấu trúc : “If … Then… Else … End If” mở rộng .......................................... 43
5.1.4. Cấu trúc: “Select Case … Case…End Select” .................................................. 44
5.2. Cấu Trúc Vòng Lặp .................................................................................................. 45
5.2.1. Cấu trúc: “For … Next” .................................................................................... 45
5.2.2. Cấu trúc : “For Each … Next” .......................................................................... 47
5.2.3. Cấu trúc : “Do While … Loop” ......................................................................... 48
5.2.4. Cấu trúc : “Do … Loop While” ......................................................................... 48
5.2.5. Cấu trúc : “Do Until … Loop” .......................................................................... 49
5.2.6. Cấu trúc : “Do … Loop Until ” ......................................................................... 49
Chương 6 ..................................................................................................................................50
CÁC HÀM NHẬP LIỆU .........................................................................................................50
6.1. Phương thức : Prompt .............................................................................................. 51
6.2. Phương thức: GetString ........................................................................................... 52
6.3. Phương thức : GetPoint ............................................................................................ 53
6.4. Phương thức : GetInteger và GetReal ..................................................................... 54
Designing Team-Engineering Department Đinh Văn Tráng
Basic VBA for AutoCad Page 4
6.5. Phương thức : GetDistance....................................................................................... 55
6.6. Phương thức : GetKeyWord .................................................................................... 56
6.7. Phương thức GetEntity ............................................................................................. 57
6.8. Phương thức: GetCorner .......................................................................................... 58
6.9. Phương thức : InitializeUserInput ........................................................................... 59
Chương 7 ..................................................................................................................................61
TẠO MỚI ĐỐI TƯỢNG TRONG AUTOCAD ......................................................................61
7.1. Xác định nơi chứa đối tượng .................................................................................... 62
7.2. Khai báo và phương thức tạo đối tượng hình học ................................................... 63
7.2.1. Tạo đường thẳng –Phương thức AddLine ........................................................ 63
7.2.2. Tạo đối tượng LWPolyline - Phương thức AddLightWeightPolyline.............. 64
7.2.3. Tạo đối tượng đường tròn – Phương thức AddCircle ...................................... 65
7.2.4. Tạo đối tượng cung tròn –Phương thức AddArc.............................................. 66
7.2.5. Tạo đối tượng văn bản đơn - phương thức AddText ........................................ 67
7.2.6. Tạo đối tượng văn bản nhiều dòng-Phương thức AddMtext ........................... 68
Chương 8 ..................................................................................................................................69
LÀM VIỆC VỚI ĐỐI TƯỢNG SELECTIONSET ................................................................69
8.1. Quy trình làm việc với đối tượng SelectionSet ......................................................... 70
8.2. Khai báo và khởi tạo đối tượng SelectionSet ........................................................... 70
8.3. Thêm đối tượng vào trong một SelectionSet ............................................................ 71
8.3.1. Phương thức AddItems...................................................................................... 72
8.3.2. Phương thức Select ............................................................................................ 73
8.3.3. Phương Thức SelectOnScreen ........................................................................... 75
8.3.4. Thao tác với các đối tượng trong SelectionSet .................................................. 76
8.4. Bộ lọc cho đối tượng SelectionSet ............................................................................. 76
Designing Team-Engineering Department Đinh Văn Tráng
Basic VBA for AutoCad Page 5
8.4.1. Lọc theo một điều kiện ........................................................................................ 77
8.4.2. Lọc theo nhiều điều kiện ..................................................................................... 78
8.5. Một số phương thức khác của đối tượng SelectionSet ............................................. 80
8.5.1. Phương thức RemoveItems ................................................................................. 80
8.5.2. Phương thức Clear ............................................................................................. 82
8.5.3. Phương thức Eraser ........................................................................................... 82
8.5.4. Phương thức Delete ............................................................................................ 82
Chương 9 ..................................................................................................................................84
HIỆU CHỈNH CÁC ĐỐI TƯỢNG HÌNH HỌC .....................................................................84
9.1. Tổng quan về việc hiệu chỉnh các đối tượng hình học bằng VBA ........................... 85
9.2. Sao chép đối tượng – Phương thức Copy ................................................................. 85
9.3. Xóa đối tượng –Phương thức Delete ........................................................................ 86
9.4. Di chuyển đối tượng – Phương thức Move .............................................................. 86
9.5. Lấy đối xứng – Phương thức Mirror........................................................................ 88
9.6. Phương thức OffSet .................................................................................................. 89
9.7. Xoay đối tượng – Phương thức Rotate ..................................................................... 90
9.8. Thay đổi tỉ lệ đối tượng – Phương thức ScaleEntity ................................................ 92
9.9. Thay đổi màu đối tượng – Thuộc tính Color ........................................................... 93
9.10. Thay đổi Layer cho đối tượng – Thuộc tính Layer .............................................. 95
9.11. Thay đổi kiểu đường cho đối tượng – Thuộc tính LineType ............................... 96
9.12. Thay đổi bề rộng nét vẽ của đối tượng – Thuộc tính LineWeight ....................... 98
Chương 10 .............................................................................................................................. 100
LÀM VIỆC VỚI ĐỐI TƯỢNG LAYER .............................................................................. 100
10.1. Duyệt qua tập đối tượng Layers ..........................................................................101
10.2. Khai báo và khởi tạo một Layer mới – Phương thức Add..................................101
Designing Team-Engineering Department Đinh Văn Tráng
Basic VBA for AutoCad Page 6
10.3. Đổi tên của Layer – Thuộc tính Name .................................................................102
10.4. Thiết lập một Layer hiện hành ............................................................................103
10.5. Gán màu cho một Layer – Thuộc tính Color ......................................................103
10.6. Gán kiểu đường cho một Layer – Thuộc tính LineType ....................................105
10.7. Gán LineWeight cho một Layer – Thuộc tính LineWeight ................................107
10.8. Một số thuộc tính khác của đối tượng Layer.......................................................109
10.8.1. Bật, Tắt Layer – Thuộc tính LayOn .............................................................109
10.8.2. Đông cứng, Làm tan Layer – Thuộc tính Freeze, UnFreeze ........................110
10.8.3. Khóa, Mở Khóa Layer – Thuộc tính Lock, UnLock ....................................110
10.8.4. Xóa Layer – Thuộc tính Delete .....................................................................111
Chương 11 .............................................................................................................................. 112
LÀM VIỆC VỚI ĐỐI TƯỢNG BLOCK .............................................................................. 112
11.1. Duyệt qua tập đối tượng Block ............................................................................113
11.2. Khai báo và khởi tạo một Block...........................................................................113
11.3. Đổi tên Block – Thuộc tính NAME ......................................................................114
11.4. Xóa một Block – Thuộc tinh Delete .....................................................................115
11.5. Chèn Block vào trong bản vẽ - Phương thức InsertBlock ..................................117
11.6. Phá vỡ một Block – Phương thức Explode ..........................................................120
11.7. Block chứa thuộc tính – Attributes ......................................................................122
11.7.1. Tạo thuộc tính cho Block –Phương thức AddAttribute ...............................122
11.7.2. Thao tác với thuộc tính – Phương thức GetAttributes ................................125
11.8. Làm việc với bản vẽ tham khảo ngoài – External References ............................127
11.8.1. Gắn một tham chiếu ngoài vào bản vẽ – Phương thức
AddExternalReference ...................................................................................................127
11.8.2. Gỡ bỏ tham chiếu ngoài ra khỏi bản vẽ - Phương thức Detach ...................130
Designing Team-Engineering Department Đinh Văn Tráng
Basic VBA for AutoCad Page 7
11.8.3. Tải lại tham chiếu ngoài – Phương thức Reload ..........................................130
11.8.4. Loại bỏ tham chiếu ngoài ra khỏi bản vẽ - Phương thức Unload ................131
11.8.5. Ràng buộc tham chiếu ngoài – Phương thức Bind .......................................132
TÀI LIỆU THAM KHẢO ..................................................................................................... 133
Designing Team-Engineering Department Đinh Văn Tráng
Basic VBA for AutoCad Page 8
Chương 1
TỔNG QUAN VỀ VBA TRONG AUTOCAD
1.1. Khái niệm dự án nhúng và dự án độc lập
1.1.1. Dự án nhúng
Dự án nhúng là dự án đính kèm với bản vẽ.
Đặc điểm dự án nhúng là :
Không cần phải nhớ nơi lưu trử dự án, không phải tải dự án vào Autocad mỗi khi sử dụng
một chức năng nào đó có sẵn trong dự án, bởi vì nó được tự động tải vào mỗi khi bản vẽ
được mở.
Những chức năng được lập trình trong dự án VBA nhúng chỉ có hiệu lực đối với bản vẽ
chứa nó do đó muốn sử dụng những chứa năng này cho những bản vẽ khác người dùng
buộc phải sao chép dự án VBA đó.
1.1.2. Dự án độc lập
Dự án độc lập là dự án tách biệt trong một tệp tin có phần mở rộng là *.dvb và không phụ
thuộc vào bản vẽ nào cả.
Đặc điểm của dự án độc lập :
Muốn sử dụng dự án độc lập người dùng phải tải dự án đó vào trong Autocad.
Dự án độc lập có thể tác động lên tất cả các bản vẽ đang mở .
Khi cần chia sẽ những chức năng trong dự án chỉ cần mang theo tệp “.dvb” là đủ.
1.2. Trình quản lý dự án VBA
Trong Autocad việc quản lý dự án VBA được thực hiện dễ dàng = thông qua trình quản lý dự
án – VBA Manager.Để hiển thị VBA Manager chọn Tool ---> Macros ---> VBA Manager
(Hoặc đánh lệnh VBAMAN)
Designing Team-Engineering Department Đinh Văn Tráng
Basic VBA for AutoCad Page 9
Ý nghĩa một số thành phần trong trình quản lý dự án
New : Tạo mới dự án VBA (Mặc định là dự án độc lập)
Save As : Lưu dự án VBA.
Load : Tải dự án VBA vào trong VBAIDE.Người dùng được yêu cầu chọn tệp dự án
VBA (*.dvb) để Load vào.
Macros : Hiển thị trình quản lý Macros.
Visual Basic Editor : Hiển thị môi trường VBAIDE, đây là môi trường thực hiện viết mã
lệnh và thiết kế giao diện chương trình.
1.3. Định nghĩa lệnh mới bằng Autolisp
Việc định nghĩa lệnh mới bằng Autolisp sẽ làm cho quá trình thực thi Macro đơn giản đi rất
nhiều..Autolisp chính là chiếc cầu nối tạo sự liên kết giữa dòng lệnh của AutoCad với các
Macro trong dự án VBA.
Để các lệnh mới có hiệu lực ngay khi AutoCad khởi động thì người lập trình cần lưu dự án
VBA thành tệp có tên là ACAD.DVB và tệp Autolisp có tên là ACAD.LSP và cả hai tệp này
phải được lưu vào thư mục Support của AutoCad.Hai tệp này sẽ tự động được tải lên ngay
sau khi AutoCad khởi động và người dùng có thể sử dụng các lệnh tự định nghĩa.
Designing Team-Engineering Department Đinh Văn Tráng
Basic VBA for AutoCad Page 10
Cách tạo file Autolisp
Tại một thư mục bất kỳ, nhấn chuột phải, chọn New -> Text Document.
Đổi tên file vừa tạo thành tên file ta muốn với phần mở rộng LSP (thay vì txt)
Trong trường hợp Window của bạn đang bỏ chế độ hiển thị đuôi mở rộng, hãy Open
file Text vừa tạo, Save As file thành dạng “Tên_file.LSP” .Chú ý2 dấu “” để đảm
bảo file sẽ chuyển thành đuôi mở rộng LSP.
Cách thức định nghĩa lệnh mới bằng AutoLisp
Designing Team-Engineering Department Đinh Văn Tráng
Basic VBA for AutoCad Page 11
Chương 2
HỆ THỒNG ĐỐI TƯỢNG VÀ MỘT SỐ THAO TÁC CƠ BẢN TRONG AUTOCAD
2.1. Mô hình đối tượng trong AutoCad
Trong AutoCad có rất nhiều đối tượng khác nhau như:
- Các đối tượng hình học như Line, Circle, Mtext, Text…
- Các đối tượng phi hình học như: Layer, Linetype, Dimension …
- Và ngay cả bản vẽ, bản thân chương trình AutoCad cũng là một đối tượng (Đối tượng
Application)
Mỗi đối tượng trong Autocad đều có những thuộc tính và các phương thức đặc trưng của nó.
Designing Team-Engineering Department Đinh Văn Tráng
Basic VBA for AutoCad Page 12
2.2. Một số đối tượng chính trong AutoCad
2.1.1. Đối tượng Application
Đối tượng Application là đối tượng gốc trong mô hình đối tượng của AutoCad.Từ đối tượng
này ta có thể truy xuất đến bất kỳ đối tượng nào.Đối tượng Application là một đối tượng
toàn cục nghiã là mọi phương thức và thuộc tính của nó đều có hiệu lực trong môi trương
VBAIDE.
Một số phương thức thường dùng của đối tượng Application:
Phương thức Update – Phương thức này cập nhật lại các thay đổi.
Phương thức Zoom như ZoomAll, ZoomExtents…
Phương thức Quit – Thoát khỏi chương trình AutoCad.
2.1.2. Khái niệm tập đối tượng
Trong Autocad các đôi tượng được tổ chức hầu hết trong Tập đối tượng.Ví dụ các đối
tượng hình học được quản lý trong tập đối tượng ModelSpace, PaperSpace hoặc
Blocks.Các đối tượng phi hình học như Layer, DimStyle, TextStyle được quản lý trong các
tập đối tượng tương ứng như Layers, DimStyles, TextStyles…
2.1.3. Tập đối tượng Documents và đối tượng Document
Tập đối tượng Documents là một tập chứa tất cả các bản vẽ đang được mở.
Một số phương thức của tập đối tượng Documents :
Phương thức Add : Sử dụng để tạo một bản vẽ mới.
Phương thức Open : Sử dụng để mở một bản vẽ có sẵn.
Phương thức Close : Sử dụng để đóng tất cả các bản vẽ đang được mở
Đối tượng Document, thực chất là một bản vẽ AutoCAD đang được mở thuộc tập đối
tượng Documents.Đối tượng này chứa tất cả các đối tượng hình học và phi hình học trong
một bản vẽ AutoCAD cũng như chứa hầu hết các đối tượng khác của bản vẽ như
Viewports.
Trong VBA, đối tượng Thisdrawing tham chiếu đến bản vẽ hiện hành, những tác động lên
đối tượng này cũng chính là tác động lên bản vẽ hiện hành.
Designing Team-Engineering Department Đinh Văn Tráng
Basic VBA for AutoCad Page 13
2.2. Các thao tác cơ bản trong AutoCad
2.2.1. Mở bản vẽ - Phương thức Open
Để mở một bản vẽ ta sử dụng phương thức OPEN có trong tập đối tượng Documents.Bản
vẽ vừa được mở sẽ trở thành bản vẽ hiện hành.
Cú pháp
Documents.Open (FileName)
Giải thích
Tham số Giải thích
FileName Kiểu String – Chuỗi thể hiện tên bản vẽ bao (gồm đường dẫn và
phần mở rộng)
Ví dụ
2.2.2. Tạo bản vẽ mới – Phương thức Add
Để tạo bản vẽ mới sử dụng phương thức ADD có trong tập đối tượng Documents.
Cú pháp
Set DocObj = Documents.Add ([TemplateName])
Designing Team-Engineering Department Đinh Văn Tráng
Basic VBA for AutoCad Page 14
Giải thích
Tham số Giải thích
DocObj Kiểu acadDocument – Biến chứa bản vẽ được tạo
TemplateName
Tham số tùy chọ, kiểu String – Chuỗi chứa đường dẫn đầy đủ đến bản vẽ mẫu (tệp *.dwt).Nếu không có tham số này, AutoCad sẽ tạo bản vẽ mới dựa trên tệp bản vẽ mẫu mặc định (Thường là tệp Acad.dwt)
Ví dụ
2.2.3. Lưu bản vẽ -Phương thức Save, SaveAs
Để lưu bản bản vẽ ta dùng phương thức SAVE (lưu với tên hiện hành) hoặc phương thức
SAVEAS (lưu với tên khác) có trong đối tượng Thisdrawing.
Cú pháp
Thisdrawing.Save
Thisdrawing.SaveAs FileName [, FileType]
Giải thích
Tham số Giải thích
FileName
Kiểu String – Chuỗi chứa tên cần lưu (bao gồm cả đường dẫn và phần mở rộng).Nếu không chỉ rõ bản vẽ sẽ được lưu vào thư mục hoạt động của AutoCad (thông thường C:\Program Files\AutoCAD 20xx)
FileType
Tham số tùy chọn – Xác định kiểu bản vẽ sẽ được lưu. acR14_DWG : Tệp AutoCAD Release14/LT97 DWG (*.dwg) acR14_DXF : Tệp AutoCAD Release14/LT97 DXF (*.dxf) acR15_DWG: Tệp AutoCAD 2000 DWG (*.dwg) acR15_DXF: Tệp AutoCAD 2000 DXF (*.dxf) acR15_Template : Tệp AutoCAD 2000 Drawing Template File (*.dwt) acNative : Tệp bản vẽ được lưu với kiểu tệp mới nhất ứng với phiên bản AutoCAD hiện hành.
Designing Team-Engineering Department Đinh Văn Tráng
Basic VBA for AutoCad Page 15
Ví dụ
2.2.4. Đóng bản vẽ - Phương thức Close
Để đóng bản vẽ sử dụng phương thức CLOSE có trong đối tượng Thisdrawing.
Cú pháp
Thisdrawing.Close ([SaveChange] [, FileName])
Giải thích
Tham số Giải thích
SaveChange
Tham số tùy chọn
SaveChange =True : Lưu bản vẽ trước khi đóng
SaveChange =False : Không lưu bản vẽ trước khi đóng
FileName
Tham số tùy chọn, kiểu String –Chuỗi thể hiện tên bản vẽ (bao gồm
đường dẫn và phần mở rộng) trong trường hợp bản vẽ chưa lưu lần
nào
Ví dụ
Designing Team-Engineering Department Đinh Văn Tráng
Basic VBA for AutoCad Page 16
2.2.5. Thoát khỏi chương trình AutoCad – Phương thức Quit
Để thoát khỏi AutoCad chúng ta sử dụng phương thức Quit có trong đối tượng
Application.Nếu có bản vẽ hoặc dự án nào chưa được lưu AutoCad sẽ nhắc người dùng lưu
sau đó mới thoát.
Cú pháp
Application.Quit
Designing Team-Engineering Department Đinh Văn Tráng
Basic VBA for AutoCad Page 17
Chương 3
CÁC KIỂU DỮ LIỆU VÀ CÁCH KHAI BÁO BIẾN TRONG VBA
3.1. Những quy đinh về cú pháp trong VBA
- Những câu lệnh là những dòng riêng biệt.Nếu có nhiều câu lệnh trên cùng một dòng thì các
câu lệnh ngăn cách nhau bằng dấu hai chấm (:),nếu dòng lệnh quá dài thì muốn ngắt xuống
dòng thì ta dùng “khoảng trắng + _” .
- Nếu muốn chèn thêm dòng chú thích thì ta dùng dấu nháy đơn (‘)
- Quy tắc đặt tên biến
Ký tự đầu tiên bắt buộc phải là chữ cái.
Không chứa khoảng trắng, dấu chấm (.), dấu chấm than(!), hoặc các ký tự đặc biệt như
@, #, &, $
Tên biến không dài quá 255 ký tự
Tên biến không trùng với các từ khóa trong VBA (Xem danh sách một số từ khóa
thường sử dụng trong VBA)
Trong một SUB không được đặt tên biến trùng nhau
- Một số từ khóa thường sử dụng trong VBA
As Empty Input Mid Option Public String
Binary Error Is New Optional Resume Then
ByRef False Len Next ParamArray Seek Time
ByVal For Let Nothing Print Set To
Date Friend Lock Null Private Static True
Else Get Me On Property Step WithEvents
Designing Team-Engineering Department Đinh Văn Tráng
Basic VBA for AutoCad Page 18
3.2. Khai báo biến trong VBA
3.2.1. Tổng Quát
Một biến khi sử dụng trong VBA có thể không cần khai báo, nhưng cách này chỉ nên áp
dụng khi viết các chương trình nhỏ.Khi làm việc với một dự án có nhiều Modul,
UserForm… cần khai báo biến một cách tường minh để chương trình dễ đọc, chạy nhanh
hơn và tận dụng được sự trợ giúp của môi trường VBAIDE.
Biến cục bộ : Là biến khai báo trong một chương trình con và phạm vi hoạt động của nó
được giới hạn trong chính chương trình con đó thôi.
Biến toàn cục : Phạm vi hoạt động của biến là toàn bộ dự án, bất kỳ nơi đâu trong dự án
(bất kể Modul, UserForm..) cũng có thể sử dụng được biến này.
Nếu một biến được khai báo với từ khóa DIM thì mặc định biến đó là biến cục bộ.Phạm
vi hoạt động của biến này được giới hạn trong SUB.
Nếu một biến được khai báo với từ khóa PRIVATE thì phạm vi hoạt động của biến là
trong nội bộ Modul đó thôi, tất cả các SUB thuộc Modul đó đều sử dụng được nhưng
không thể truy cập từ một Modul hay UserForm khác.
Nếu một biến được khai báo với từ khóa PUBLIC thì phạm vi hoạt động của biến là
trong toàn bộ dự án nghĩa là bất kỳ trong Modul, UserForm nào cũng có thể sử dụng
được biến này.
Chú ý : Không dùng từ khóa PRIVATE, PUBLIC cho việc khai báo biến nằm bên trong
một SUB.
3.2.2. Cách thức khai báo biến
Khai báo hằng số
Hằng số là một loại biến đặc biệt mà giá trị của nó được xác định ngay lúc khai báo và luôn
không thay đổi.Cách này thường được sử dụng cho những hằng số hay dùng trong chương
trình như π = 3.141596254.
Designing Team-Engineering Department Đinh Văn Tráng
Basic VBA for AutoCad Page 19
Cú pháp
[Public/Private] Const <Tên_Hằng> = <Giá trị hằng số>
Ví dụ
Public Const Pi = 3.141592654
Khai báo biến
[Dim/Public/Private] <Tên_biến> As <Kiểu dữ liệu>
Khai báo mảng tĩnh
[Dim/Public/Private] <Tên mảng> (thông số về chiều) As <Kiểu dữ liệu>
Khai báo mảng động
[Dim/Public/Private] <Tên mảng> () As <Kiểu dữ liệu>
3.3. Các kiểu dữ liệu cơ bản trong VBA
3.3.1. Kiểu Logic – Boolean
Biến kiểu Boolean chỉ chứa hai giá trị TRUE và FALSE. Giá trị mặc định ban đầu của
biến kiểu Boolean là FALSE
Cú pháp
[Dim/Public/Private] <Tên_Biến> As Boolean
Ví dụ
Dim blnA as Boolean
Public blnB as Boolean
Private blnC as Boolean
Designing Team-Engineering Department Đinh Văn Tráng
Basic VBA for AutoCad Page 20
3.3.2. Kiểu số nguyên – Byte/Integer/Long
Cú pháp
[Dim/Public/Private] <Tên_Biến> As [Byte/Integer/Long]
Byte, Integer, Long đều là các từ khóa khai báo kiểu số nguyên nhưngchúng chỉ khác nhau
về giới hạn giá trị mà biến có thể nhận được.
Kiểu số nguyên Kích thước Phạm Vi
Byte 1 Byte 0 – 255
Integer 2 Bytes -32,768 – 32767
Long 4 Bytes -2,147,486,648 – 2,147,483,647
Ví dụ
Dim lngA as Long
Dim intB as Integer
3.3.3. Kiểu số thực – Single/Double
[Dim/Public/Private] <Tên_Biến> As [Single/Double]
Ví dụ
Dim dblA as Double
Public Pi as Double
Chú ý :
Các biến kiểu SỐ NGUYÊN và SỐ THỰC nếu không gán giá trị ban đầu cho biến thì giá
trị mặc định ban đầu sẽ bằng 0
Designing Team-Engineering Department Đinh Văn Tráng
Basic VBA for AutoCad Page 21
3.3.4. Kiểu Chuỗi – String
Chuỗi là một hàng các ký tự liên tục nhau, số lượng ký tự trong chuỗi rất lớn.Trong VBA
chuỗi được đặt trong dấu ngoặc kép “”.Giá trị mặc định ban đầu cho biến kiểu chuỗi là một
chuỗi rỗng.
Cú pháp
[Dim/Public/Private] <Tên_Biến> As String
Ví dụ
Dim strA as String
strA = “VBA for AutoCad”
3.3.5. Kiểu Mảng
Khi gặp trường hợp phải xử lý một loạt các biến tương tự như nhau, ví dụ các phần tử của
một ma trận, nếu ta phải đặt tên khác nhau cho tất cảcác biến này thì rất bất tiện, vì vậy ta
có thể dùng kiểu mảng để đặt tên chung cho cả nhóm các phần tử đó và khi nào cần sử
dụng từng phần tử ta sẽ gọi tên theo chỉ số của chúng trong mảng.
- Mảng Tĩnh
Đây là loại mảng có số phần tử không thay đổi trong suốt quá trình hoạt động của
mảng.Mảng này thường được sử dụng khi biết trước số lượng phần tử của mảng.
Cú pháp
Dim <Tên_Mảng>(Thông số mảng) As <Kiểu dữ liệu>
Ví dụ
Dim Myarray(10) as Double ‘Mảng có 11 phần tử (Từ 0 tới 10)
Dim MyArray(1 to 10) as Double ‘Mảng có 10 phần tử.
Dim MyArray(1 to 5,1 to 5) as Double ‘Mảng có 25 phần tử
Dim MyArray(1 to n,1 to m) as Variant ‘Mảng có n hàng và m cột
Designing Team-Engineering Department Đinh Văn Tráng
Basic VBA for AutoCad Page 22
- Mảng Động
Đây là mảng có số lượng phần tử có thể thay đổi được trong lúc chương trình hoạt
động.Với mảng động người lập trình không cần biết số lượng phần tử của mảng nó sẽ được
thiết lại tùy theo yêu cầu cụ thể của bài toán
Cú pháp
Dim <Tên_Mảng>() As <Kiểu dữ liệu>
Để thay đổi số lượng phần tử của mảng chúng ta sử dụng từ khóa REDIM
Cú pháp
ReDim <Tên_Mảng> (Thông số mảng) As <Kiểu dữ liệu>
Ví dụ
Dim MyArray () as Long ‘Khai báo mảng MyArray là mảng động
ReDim MyArray(1 to 4) as Long ---->Xác định lại kích thước cho mảng
Với một mảng động mà các phần tử đã được gán giá trị khi thay đổi số lượng phần tử sẽ có
hai trường hợp xảy ra.
Toàn bộ giá trị của các phần tử (thuộc mảng trước khi thay đổi) sẽ bị xóa bỏ và các
phần tử của mảng mới sẽ nhận giá trị mặc định.
Toàn bộ giá trị của các phần tử (thuộc mảng trước khi thay đổi) sẽ được giữ lại nếu
thỏa mãn 2 điều kiện sau
o Sử dụng từ khóa ReDim Preserve
o Sự thay đổi kích thước của mảng chỉ được thực hiện ở biên trên của chiều cuối
cùng của mảng nghĩa là các phần tử cần giữa lại giá trị có chỉ số không đổi khi mảng
được thiết lập lại.
Designing Team-Engineering Department Đinh Văn Tráng
Basic VBA for AutoCad Page 23
Ví dụ
Dim MyArray () as Long ‘Khai báo mảng MyArray là mảng động
ReDim MyArray(1 to 4) as Long ‘Xác định lại kích thước cho mảng
MyArray(1) = 10: MyArray(2) = 20 ‘Gán giá trị cho các phần tử mảng
MyArray(3) = 30: MyArray(4) = 40
ReDim Preserve MyArray(1 to 5) as Long ‘Thay đổi kích thước mảng
MyArray(5) = 50 ‘Gán giá trị cho phần tử mới.
3.3.6. Kiểu Variant.
Kiểu Variant là một kiểu đặc biệt có thể chứa tất cả các kiểu dữ liệu khác.
Cú pháp
Dim <Tên_Biến> As Variant
Ví dụ
Dim varA as Variant
Designing Team-Engineering Department Đinh Văn Tráng
Basic VBA for AutoCad Page 24
Chương 4
TOÁN TỬ VÀ CÁC HÀM THÔNG DỤNG
Nội dung chương :
- Các hàm số học trong VBA
- Các toán tử so sánh thường dùng trong VBA
- Các tóa tử Logic thường dùng trong VBA
- Các hàm chuyển đổi thườngdùng trong VBA
- Các hàm xử lý chuỗi thường dùng trong VBA
Designing Team-Engineering Department Đinh Văn Tráng
Basic VBA for AutoCad Page 25
4.1. Các hàm số học trong VBA
Toán Tử Ý Nghĩa Ví dụ Kết quả
+ Cộng 10+5 15
- Trừ 10-5 5
* Nhân 10*5 50
/ Chia 10/5 2
\ Chia Lấy phần nguyên 11\2 5
^ Hàm mũ 10^2 100
Mod Chi lấy phần dư 11 Mod 5 1
Abs(x) Lấy giá trị tuyệt đối Abs(-12) 12
Fix(x) Lấy phần nguyên trước dấu phẩy
Fix(99.8)
Fix(-99.2)
Fix(-99.8)
99
-99
-99
Int(x) Lấy phần nguyên đã được làm
tròn
Int(99.2)
Int(-99.2)
Int(-99.8)
99
-100
-100
Round(x,m) Làm tròn số thực x đến m số sau
dấu phẩy Round(2.4554,2) 2.45
Sqr(x)
(x>=0) Hàm căn bậc 2 của x Sqr(4) 2
Atn(x) Hàm lượng giác ngược của
Tan(x) Atn(1) π/4
Sin(x)
Cos(x)
Tan(x)
Các hàm lượng giác
của x tính bằng đơn vị Radian
Sin(π/6)
Cos(π/3)
Tan(π/4)
½
½
1
Designing Team-Engineering Department Đinh Văn Tráng
Basic VBA for AutoCad Page 26
Ví dụ : Dùng hàm Atn để tính giá trị của số Pi
Dim Pi as double
Pi = 4*Atn(1)
Ví dụ : Ví dụ này sẽ tạo một hàm dùng để chuyển đổi đơn vị Degree ra Radian
4.2. Các toán tử so sánh thường sử dụng trong VBA
Sử dụng toán tử so sánh trong biểu thức để so sánh hai hoặc nhiều số, chuỗi Text, các biến
hoặc kết quả của các hàm
- Nếu câu lệnh Đúng -> Kết quả của công thức được trả về giá trị True
- Nếu câu lệnh Sai -> Kết quả của công thức được trả về giá trị False
Toán Tử Ý Nghĩa Ví Dụ Kết quả
= Bằng a=b True
> Lớn hơn 10<5 False
>= Lớn hơn hoặc bằng 10>=8 True
< Nhỏ hơn 5<7 True
<= Nhỏ hơn hoặc bằng 10<=20 True
< > Khác “a” <> “b” True
Ví dụ
Dim A, B as integer
Dim Mycheck as Boolean
A = 8 :B = 2
Mycheck = A > B -----> Mycheck = True
Mycheck = A < B -----> Mycheck = False
Designing Team-Engineering Department Đinh Văn Tráng
Basic VBA for AutoCad Page 27
4.3. Toán tử Logic thường dùng trong VBA
4.3.1. Toán tử AND
Sử dụng toán tử And để kiểm tra xem hai toán hạng kiểu Boolean có là True hoặc False hay
không.
Bảng giá trị của toán tử AND
Toán hạng 1 Toán hạng 2 Kết quả
True True True
True False False
True Null Null
False True False
False False False
False Null False
Null True Null
Null False False
Null Null Null
Chú ý
Toán tử AND trả về giá trị TRUE khi cả hai toán tử cùng là TRUE, các trường hợp khác cho
kết quả là FALSE
Ví dụ
‘Khai báo các biến
Dim A, B, C as integer
Dim Mycheck as Boolean
A = 10:B=8:C=6
Mycheck = (A>B) And (B > C) -----> Mycheck = True
Mycheck = (A>B) And (B < C) -----> Mycheck = False
Mycheck = (A<B) And (B < C) -----> Mycheck = False
Designing Team-Engineering Department Đinh Văn Tráng
Basic VBA for AutoCad Page 28
4.3.2. Toán tử OR
Sử dụng toán tử OR để kiểm tra hai toán hạng kiểu Boolean xem một trong hai toán hạng là
True hoặc là False.
Bảng giá trị của toán tử OR
Toán hạng 1 Toán hạng 2 Kết quả
True True True
True False True
True Null True
False True True
False False False
False Null False
Null True True
Null False Null
Null Null Null
Chú ý
Toán tử OR trả về kết quả TRUE khi một trong hai toán hạng hoặc cả hai toán hạng là
TRUE, các giá trị còn lại cho giá trị FALSE.
Ví dụ
‘Khai báo các biến
Dim A, B, C as integer
Dim Mycheck as Boolean
‘Gán giá trị ban đầu cho các biến
A = 10:B=8:C=6
Mycheck = (A>B) Or (B > C) -----> Mycheck = True
Mycheck = (A>B) Or (B < C) -----> Mycheck = True
Mycheck = (A<B) Or (B < C) -----> Mycheck = False
Designing Team-Engineering Department Đinh Văn Tráng
Basic VBA for AutoCad Page 29
4.3.3. Toán tử NOT
Toán tử NOT sẽ trả về giá trị phủ định của một toán hạng
Bảng giá trị của toán tử NOT
Biểu thức Kết quả
True False
False True
Ví dụ
Dim A, B, C as Integer
Dim Mycheck as Boolean
A = 10:B=8:C=6
Mycheck = Not(A > B) -----> Mycheck = False
Mycheck = Not(B < C) -----> Mycheck = True
4.4. Các hàm chuyển đồi dữ liệu
Chuyển đổi dữ liệu là một nhu cầu cần thiết trong khi lập trình,điều này làm cho các biến có
kiểu dữ liệu rõ ràng,tránh được việc phát sinh lỗi sau này.
Một số hàm chuyển đổi thông dụng
CBool(Expression) Chuyển đổi dữ liệu sang kiểu Logic (Boolean)
Cbyte(Expression) Chuyển đổi dữ liệu sang kiểu Byte
CInt(Expression) Chuyển đổi dữ liệu sang kiểu Integer
CLng(Expression) Chuyển đổi dữ liệu sang kiểu Long
CDblxpression) Chuyển đổi dữ liệu sang kiểu Double
CSng(Expression) Chuyển đổi dữ liệu sang kiểu Single
CStr(Expression) Chuyển đổi dữ liệu sang kiểu String
Val(String) Chuyển đổi dữ liệu String sang kiểu Double
Designing Team-Engineering Department Đinh Văn Tráng
Basic VBA for AutoCad Page 30
4.5. Các hàm xử lý chuỗi
4.5.1. Hàm LEFT
Cú pháp
Left(String, Number as Long)
Công dụng
Hàm này trích Number ký tự bên trái của chuỗi String
Ví dụ
Dim strA, strB as String
strA = “VBA for AutoCad”
strB = Left(strA, 7) ----->strB = “VBA for”
4.5.2. Hàm RIGHT
Cú pháp
Right(String, Number as Long)
Công dụng
Hàm này trích Number ký tự bên phải của chuỗi String
Ví dụ
Dim strA, strB as String
strA = “VBA for AutoCad”
strB = Right(strA, 7) ----->strB = “AutoCad”
4.5.3. Hàm MID
Cú pháp
Mid(String, Start As Long, [Number as Long])
Designing Team-Engineering Department Đinh Văn Tráng
Basic VBA for AutoCad Page 31
Công dụng
Hàm này trích Number ký tự bắt đầu từ ký tự Start của chuỗi String.Nếu không có giá
trị Number thì sẽ trích một chuỗi bắt đầu từ ký tự Start đến ký tự cuối cùng.
Ví dụ
Dim strA, strB as String
strA = “VBA for AutoCad”
strB = Mid(strA, 4,3) ----->strB = “for”
strB = Mid(strA, 4) ----->strB = “for AutoCad”
4.5.4. Hàm LEN
Cú pháp
Len(String)
Công dụng
Hàm này trả về một số NGUYÊN - Là số lượng ký tự trong một chuỗi (Bao gồm cả
khoảng trắng)
Ví dụ
Dim strA as String
Dim lngB as Long
strA = “VBA for AutoCad”
lngB = Len(strA) ----->lngB = 15
4.5.5. Hàm UCase
Cú pháp
UCase(String)
Công dụng
Hàm này chuyển các ký tự trong một chuỗi thành chữ HOA
Designing Team-Engineering Department Đinh Văn Tráng
Basic VBA for AutoCad Page 32
Ví dụ
Dim strA, strB as String
strA = “VBA for AutoCad”
strB = UCase(strA) ----->strB = “VBA FOR AUTOCAD”
4.5.6. Hàm LCase
Cú pháp
LCase(String)
Công dụng
Hàm này chuyển các ký tự trong một chuỗi thành chữ THƯỜNG
Ví dụ
Dim strA, strB as String
strA = “VBA for AutoCad”
strB = UCase(strA) ----->strB = “vba for autocad”
4.5.7. Hàm InStr
Cú pháp
InStr([Start, ]String_1, String_2 [, compare])
Công dụng
Hàm này trả về một số NGUYÊN – Là vị trí bắt đầu của chuỗi String_2 trong chuỗi
String_1 bắt đầu từ vị trí Start.Nếu chuỗi String_2 không được tìm thấy hàm sẽ trả về
giá trị 0.
Designing Team-Engineering Department Đinh Văn Tráng
Basic VBA for AutoCad Page 33
Giải thích
Tham số Giải thích
Start
Kiểu Integer/Long – Tham số tùy chọn, là vị trí bắt đầu tìm
kiếm.Giá trị mặc định bằng 1.Nếu tham số Compare được sử dụng
thì tham số Start bắt buộc phải được sử dụng
String_1 Kiểu String – “Chuỗi bị tìm kiếm”
String_2 Kiểu String – “Chuỗi tìm kiếm”
Compare Tham số tùy chọn - Hằng số so sánh
Hằng số so sánh (Chúng ta quan tâm 2 hằng số sau)
Hằng số Ý nghĩa
vbBinaryCompare Kiểu so sánh này phân biệt chữ hoa và chữ thường (Đây là giá trị
mặc định của hàm InStr)
vbTextCompare Kiểu so sánh này không phân biệt chữ hoa và chữ thường
Ví dụ
Dim strA, strB as String
Dim intC as Integer
strA = “VBA for AutoCad”
strB = “a”
intC = InStr(1 ,strA ,strB,vbTextCompare) ----->intC = 3
intC = InStr(1 ,strA ,strB,vbBinaryCompare) ----->intC = 14
intC = InStr(strA ,strB) ----->intC = 14
Designing Team-Engineering Department Đinh Văn Tráng
Basic VBA for AutoCad Page 34
4.5.8. Hàm InStrRev
Cú pháp
InStrRev(String_1, String_2 [,Start] [, compare])
Công dụng
Hàm này trả về một số NGUYÊN – Là vị trí bắt đầu của chuỗi String_2 trong chuỗi
String_1 bắt đầu từ vị trí Start.Hàm này ngược với hàm InStr, nó sẽ tìm ngược từ vị trí
Start trở về trước.Nếu chuỗi String_2 không tìm thấy hàm sẽ trả về giá trị 0
Giải thích
Tham số Giải thích
String_1 Kiểu String – “Chuỗi bị tìm kiếm”
String_2 Kiểu String – “Chuỗi tìm kiếm”
Compare Tham số tùy chọn - Hằng số so sánh (Xem bảng hằng số so sánh)
Start Tham số tùy chọn ,Kiểu Integer/Long – Là vị trí bắt đầu tìm
kiếm.Giá trị mặc định của tham số là bắt đầu từ cuối chuỗi String_1.
Hằng số so sánh (Chúng ta quan tâm 2 hằng số sau)
Hằng số Ý nghĩa
vbBinaryCompare Kiểu so sánh này phân biệt chữ hoa và chữ thường (Đây là giá trị
mặc định của hàm InStrRev)
vbTextCompare Kiểu so sánh này không phân biệt chữ hoa và chữ thường
Designing Team-Engineering Department Đinh Văn Tráng
Basic VBA for AutoCad Page 35
Ví dụ
Dim strA, strB as String
Dim intC as Integer
strA = “VBA for AutoCad”
strB = “a”
intC = InStr(1 ,strA ,strB,vbTextCompare) ----->intC = 3
intC = InStr(1 ,strA ,strB,vbBinaryCompare) ----->intC = 14
intC = InStr(strA ,strB) ----->intC = 14
4.5.9. Hàm Ltrim, RTrim
Cú pháp
LTrim(String)
RTrim(String)
Trim(String)
Công dụng
Hàm LTrim xóa các khoảng trắng ở đầu một chuỗi, hàm RTrim xóa các khoảng trắng ở
cuối chuỗi, hàm Trim xóa khoảng trắng ở cả đầu và cuỗi chuỗi.
Ví dụ
Dim strA, strB as String
strA = “ VBA for AutoCad”
strB = LTrim(strA) ----->strB = “VBA for AutoCad”
strA = “ VBA for AutoCad ”
strB = RTrim(strA) ----->strB = “VBA for AutoCad”
strA = “ VBA for AutoCad ”
strB = Trim(strA) ----->strB = “VBA for AutoCad”
Designing Team-Engineering Department Đinh Văn Tráng
Basic VBA for AutoCad Page 36
4.5.10. Hàm Space
Cú pháp
Space(Number as Integer)
Công dụng
Hàm này tạo ra một chuỗi chứa Number khoảng trắng
Ví dụ
Dim strA, strB, strC as String
strA = “VBA for AutoCad”
strB = “Example Space function”
strC = strA & Space(3) & strB ----> strC “VBA for AutoCad Example Space function”
4.5.11. Hàm Split
Cú pháp
Split(String [, Delimiter] [, limit] [, Compare])
Công dụng
Hàm này tách một chuỗi dài thành một mảng gồm nhiều chuỗi nhỏ bằng ký tự khóa
Delimiter. Nếu ký tự khóa Delimiter là một chuỗi rỗng thì mảng trả về là toàn bộ chuỗi
String
Chú ý : Hàm này sẽ trả về một MẢNG gồm nhiều chuỗi nhỏ nên kiểu của biến trả về sẽ
là Mảng Động kiểu String hoặc Mảng Tĩnh kiểu String nếu tham số Limit được xác
định hoặc kiểu Variant.
Designing Team-Engineering Department Đinh Văn Tráng
Basic VBA for AutoCad Page 37
Giải thích
Tham số Ý Nghĩa
String Kiểu String – Chuỗi sẽ được tách
Delimiter Tham số tùy chọn, kiểu String – Chuỗi chứa giá trị làm giới hạn
chia (Mặc định sử dụng khoảng trắng làm giới hạn chia)
Limit Tham số tùy chọn - Số lượng chuỗi cho phép trả về.Mặc định giá trị
này sẽ trả về tất cả các chuỗi được chia.
Compare
Tham số tùy chọn – Xác đinh kiểu so sánh
vbBinaryCompare – Phân biệt chữ Hoa và chữ Thường (Giá
trị mặc định)
vbTextCompare – Không phân biệt chữ Hoa và chữ Thường
Ví dụ
Dim strA as String
Dim varB as Variant
strA = “VBA for AutoCad”
varB = Split(strA) ---> varB(0) = “VBA”:varB(1) = “for” : varB(2) = “AutoCad”
varB = Split(strA,“A”) ---> varB(0) = “VB”:varB(1) = “ for ” : varB(2) = “utoCad”
varB = Split(strA,“A”, ,vbTextCompare) ---> varB(0) = “VB”:varB(1) = “ for ” :
varB(2) = “utoC”:varB(3) = “d”
varB = Split(strA,“A”,2) ---> varB(0) = “VB”:varB(1) = “ for AutoCad”
Designing Team-Engineering Department Đinh Văn Tráng
Basic VBA for AutoCad Page 38
4.5.12. Hàm Replace
Cú pháp
Replace(String, Find, Replace[, start ] [, count] [, compare])
Công dụng
Hàm này trả về một chuỗi mới với việc thay thế chuỗi Find trong chuỗi String bằng
chuỗi Replace.
Giải thích
Tham số Ý Nghĩa
String Kiểu String – Chuỗi chứa ký tự thay thế
Find Kiểu String – Chuỗi chứa giá trị được thay thế
Replace Kiểu String –Chuỗi chứa giá trị thay thế.
Start Tham số tùy chọn, kiểu Integer/Long – Vị trí bắt đầu thay thế, chuỗi
mới sẽ bắt đầu từ vị trí này.Giá trị mặc định bằng 1
Count Tham số tùy chọn, kiểu Integer/Long – Số lần thay thế.Giá trị mặc
định là tất cả các vị trí sẽ được thay thế.
Compare
Tham số tùy chọn – Xác đinh kiểu so sánh
vbBinaryCompare – Phân biệt chữ Hoa và chữ Thường (Giá trị
mặc định)
vbTextCompare – Không phân biệt chữ Hoa và chữ Thường
Designing Team-Engineering Department Đinh Văn Tráng
Basic VBA for AutoCad Page 39
Ví dụ
Dim strA, strB as String
strA = “VBA for AutoCad”
strB = Replace(strA, “AutoCad”, “Excel”) ---> strB = “VBA for Excel”
strB = Repleca(strA,“A”, “B”, 5) ---> strB = “for ButoCad”
strB = Split(strA,“A”, “B”, 5, 3 ,vbTextCompare) ---> var = “for ButoCbd”
varB = Split(strA,“A”,2) ---> varB(0) = “VB”:varB(1) = “ for AutoCad”
4.5.13. Hàm StrComp
Cú pháp
StrComp(String_1, String_2 [, compare])
Công dụng
Hàm này dùng để so sánh hai chuỗi String_1 và String_2 với nhau.
Giải thích
Tham số Ý Nghĩa
String_1,
String_2 Kiểu String – Hai chuỗi dùng để so sánh với nhau
Compare
Tham số tùy chọn – Xác đinh kiểu so sánh
vbBinaryCompare – Phân biệt chữ Hoa và chữ Thường (Giá trị
mặc định)
vbTextCompare – Không phân biệt chữ Hoa và chữ Thường
Designing Team-Engineering Department Đinh Văn Tráng
Basic VBA for AutoCad Page 40
Giá trị trả về của hàm StrComp
String_1 < String_2 -1
String_1 =String_2 0
String_1 > String_2 1
Ví dụ
Dim strA, strB,StrC as String
strA = “VBA for AutoCad”
strB = “VBA for AutoCad”
strC = “VBA for Autocad”
Dim returnValue as Integer
returnValue = StrComp(strA, strB) ----> returnValue = 0
returnValue = StrComp(strA, strC) ----> returnValue = -1
returnValue = StrComp(strA, strC, vbTextCompare) ----> returnValue = 0
Designing Team-Engineering Department Đinh Văn Tráng
Basic VBA for AutoCad Page 41
Chương 5
CẤU TRÚC ĐIỀU KIỆN VÀ VÒNG LẶP
5.1. Cấu Trúc Điều Kiện
5.1.1. Cấu trúc : “If … Then …”
Trong trường hợp một dòng lệnh
If <Biểu thức điều kiện> Then <Khối lệnh>
Chú ý : Trong trường hợp một dòng lệnh thì không có từ khóa “End If ”
Trong trường hợp nhiều dòng lệnh
If <Biểu thức điều kiện> Then
<Khối lệnh>
End If
Sơ đồ khối
Diễn giải
Nếu <Biểu thức điều kiện> là ĐÚNG thì chương trình sẽ thực hiện <Khối Lệnh>, nếu
SAI sẽ thoát khỏi cấu trúc lệnh.
Designing Team-Engineering Department Đinh Văn Tráng
Basic VBA for AutoCad Page 42
Ví dụ
5.1.2. Cấu trúc : “If … Then… Else … End If”
Khi ta muốn xử lý trong trường hợp <Biểu thức điều kiện> trả về giá trị SAI thì ta sử dụng
cấu trúc điều kiện sau.
Cấu trúc
If <Biểu thức điều kiện> Then
<Khối lệnh_1>
Else
<Khối lệnh_2>
End If
Sơ đồ khối
Diễn giải
Nếu <Biểu thức điều kiện> là ĐÚNG thì chương trình sẽ thực hiện <Khối Lệnh_1>,
nếu SAI chương trình sẽ thực hiện <Khối Lệnh_2>.
Designing Team-Engineering Department Đinh Văn Tráng
Basic VBA for AutoCad Page 43
Ví dụ
5.1.3. Cấu trúc : “If … Then… Else … End If” mở rộng
Khi có nhiều <Biểu thức điều kiện> thì chúng ta sử dụng cấu trúc điều kiện mở rộng sau.
Cấu trúc
If <Biểu thức điều kiện_1> Then
<Khối Lệnh_1>
ElseIf <Biểu thức điều kiện_2> Then
<Khối Lệnh_2>
………………..
ElseIf <Biểu thức điều kiện_n-1> Then
<Khối Lệnh_n-1>
Else
<Khối Lệnh_n>
End If
Diễn giải cấu trúc :
Nếu <Biểu thức điều kiện_1> là ĐÚNG thì chương trình sẽ thực hiện <Khối Lệnh_1>,
nếu SAI chương trình sẽ kiểm tra lần lượt điều kiện từ <Biểu thức điều kiện_2> đến
<Biểu thức điều kiện_n-1>, nếu điều kiện nào ĐÚNG sẽ thực hiện <Khối Lệnh> tương
ứng đó và thoát khỏi cấu trúc này.Nếu không có <Biểu thức điều kiện> nào thỏa mãn
chương trình sẽ thực hiện <Khối Lệnh_n> sau từ khóa Else và thoát khỏi cấu trúc này.
Designing Team-Engineering Department Đinh Văn Tráng
Basic VBA for AutoCad Page 44
Ví dụ
5.1.4. Cấu trúc: “Select Case … Case…End Select”
Cấu trúc
Select Case <Biểu thức kiểm tra>
Case <Điều kiện_1>
<Khối Lệnh_1>
Case <Điều kiện_2>
<Khối Lệnh_2>
…………………
Case <Điều kiện_n>
<Khối Lệnh_n>
Case Else
<Khối Lệnh_Else>
End Select
Diễn giải
<Biểu thức kiểm tra> sẽ được so sánh từ <Điều kiện_1> đến <Điều kiện_n>, nếu
<Điều kiện_1> thỏa mãn <Biểu thức kiểm tra> thì <Khối Lệnh_i> đó được thực
hiện.Nếu tất cả các điều kiện không thỏa mãn thì <Khối Lệnh_Else> sẽ được thực
hiện.Từ khóa Case Else có thể có hoặc có thể không
Designing Team-Engineering Department Đinh Văn Tráng
Basic VBA for AutoCad Page 45
Ví dụ
5.2. Cấu Trúc Vòng Lặp
5.2.1. Cấu trúc: “For … Next”
Đây là vòng lặp thông thường nhất được sử dụng khi chúng ta đã biết chính xác số lần lặp.
Cấu trúc
For <Biến đếm>=<Giá trị đầu> To <Giá trị cuối> [Step <Bước nhảy>]
<Khối Lệnh>
Next
Một số chú ý
- For, To, Step, Next đây là các từ khóa mặc định của chương trình.
- <Biến đếm>, <Giá trị đầu>, <Giá trị cuối> phải là các giá trị số.
- Giá trị của <Bước nhảy> có thể Âm hoặc Dương
Nếu <Bước nhảy> là Dương thì <Giá trị đầu> phải nhỏ hơn hoặc bằng <Giá trị cuối>.
Nếu <Bước nhảy> là Âm thì <Giá trị đầu> phải lớn hơn hoặc bằng <Giá trị cuối>.
Nếu không chỉ ra giá trị cụ thể của <Bước nhảy> (Không có từ khóa Step) thì giá trị mặc định của <Bước nhảy> là 1
- Muốn thoát khỏi vòng lặp ta sử dụng từ khóa Exit For
Designing Team-Engineering Department Đinh Văn Tráng
Basic VBA for AutoCad Page 46
Cách làm việc của cấu trúc
- Ban đầu gán <Biến đếm> bằng với <Giá trị bắt đầu>
- So sánh <Biến đếm> với <Giá trị cuối>
Nếu <Bước nhảy> là Dương
Nếu <Biến đếm> nhỏ hơn hoặc bằng <Giá trị cuối> thì thực hiện <Khối
Lệnh> và tự động cộng thêm một giá trị bằng <Bước nhảy> nếu có từ khóa
Step còn không sẽ cộng thêm 1 và quay lại bước so sánh <Biến đếm> với <Giá
trị cuối>.
Nếu <Biến đếm> lớn hơn <Giá trị cuối> sẽ kết thúc vòng lặp.
Nếu <Bước nhảy> là Âm
Nếu <Biến đếm> lớn hơn hoặc bằng <Giá trị cuối> thì thực hiện <Khối Lệnh>
và tự động cộng thêm vào <biến đếm> một giá trị bằng <Bước nhảy> nếu có
từ khóa Step còn không sẽ cộng thêm 1 và quay lại bước so sánh <Biến đếm>
với <Giá trị cuối>.
Nếu <Biến đếm> nhỏ hơn <Giá trị cuối> sẽ kết thúc vòng lặp.
Ví dụ : Ví dụ này sẽ tính tổng của các số từ 1 đển 50
Ví dụ Ví dụ này sẽ tính tổng các số chẵn từ 0 đến 50
Designing Team-Engineering Department Đinh Văn Tráng
Basic VBA for AutoCad Page 47
5.2.2. Cấu trúc : “For Each … Next”
Đối với một tập hợp các phần tử hoặc một mảng chúng ta không thể xác định cụ thể số
phần tử của nó thì việc lặp một khối lệnh nào đó sẽ trở nên khó khăn.Để giải quyết vấn đề
này chúng ta sử dụng cấu trúc For Each … Next.
Cấu trúc :
For Each <Phần Tử> In <Tập hợp>
<Khối Lệnh>
Next
Một số chú ý :
- For Each, In, Next là các từ khóa mặc định của chương trình.
- <Biến chạy> sẽ nhận giá trị từ phần tử đầu tiên đến phần tử cuối cùng trong <Tập
hợp>.Ứng với mỗi giá trị của biến chạy thì <Khối Lệnh> sẽ được thực hiện một lần.
- Nếu <Tập hợp> là một “Tập các đối tượng” thì kiểu dữ liệu của <Biến chạy> có thể
là Variant hoặc cùng kiểu với kiểu của các đối tượng trong tập hợp đó.Nếu <Tập
hợp> là Mảng thì kiểu dữ liệu của <Biến chạy> chỉ có thể là Variant.
- Để thoát khỏi vòng lặp chúng ta sử dụng từ khóa Exit For.
Ví dụ
Ví dụ này sẽ duyệt qua tập đối tượng Blocks trong bản vẽ, nếu tìm thấy Block có tên
“Section” thì giá trị TF_Section sẽ bằng True và thoát khỏi vòng lặp
Designing Team-Engineering Department Đinh Văn Tráng
Basic VBA for AutoCad Page 48
5.2.3. Cấu trúc : “Do While … Loop”
Cấu trúc
Do While <Điều kiện>
<Khối Lệnh>
Loop
Chú ý
- Với cấu trúc này <Điều kiện> sẽ được kiểm tra trước khi vào vòng lặp, <Khối Lệnh>
chỉ được thực hiện khi <Điều kiện> là ĐÚNG.
- Muốn thoát khỏi vòng lặp này ta sử dụng từ khóa Exit Do
Ví dụ
5.2.4. Cấu trúc : “Do … Loop While”
Cấu trúc
Do
<Khối Lệnh>
Loop While <Điều kiện>
Chú ý
- Với cấu trúc này <Điều kiện> được kiểm tra sau khi <Khối lệnh> được thực hiện, do đó
<Khối lệnh> có ít nhất 1 lần được thực thi.Khi <Điều kiện> là ĐÚNG sẽ tiếp tục thực
hiện vòng lặp.
- Để thoát khỏi vòng lặp ta sử dụng từ khóa Exit Do
Designing Team-Engineering Department Đinh Văn Tráng
Basic VBA for AutoCad Page 49
5.2.5. Cấu trúc : “Do Until … Loop”
Cấu trúc
Do Until <Điều kiện>
<Khối Lệnh>
Loop
Chú ý
Với cấu trúc này thì <Điều kiện> sẽ được kiểm tra ở đầu vòng lặp và <Khối Lệnh> sẽ
được thực hiện khi <Điều kiện> là SAI.
- Để thoát khỏi vòng lặp ta sử dụng từ khóa Exit Do
Ví dụ
5.2.6. Cấu trúc : “Do … Loop Until ”
Cấu trúc
Do
<Khối Lệnh>
Loop Until <Điều kiện>
Chú ý
- Tương tự như cấu trúc “Do … Loop While” cấu trúc này cũng sẽ kiểm tra <Điều kiện>
sau khi thực hiện <Khối Lệnh>, do đó <Khối Lệnh> có ít nhất 1 lần được thực thi.Nếu
<Điều kiện> là SAI thì sẽ tiếp tục vòng lặp.
- Để thoát khỏi vòng lặp ta sử dụng từ khóa Exit Do
Designing Team-Engineering Department Đinh Văn Tráng
Basic VBA for AutoCad Page 50
Chương 6
CÁC HÀM NHẬP LIỆU
Nội dung chương :
- Giới thiệu về đối tượng Utility và các phương thức có trong đối tượng này
- Giới thiệu về phương thức Prompt
- Giới thiệu về phương thức GetString
- Giới thiệu về phương thức GetPoint
- Giới thiệu về phương thức GetInteger, GetReal
- Giới thiệu về phương thức GetDistance
- Giới thiệu về phương thức GetKeyWord
- Giới thiệu về phương thức GetCorner
- Giới thiệu về phương thức GetEntity
- Giới thiệu về phương thức InitializeUserInput
Trong lập trình VBA cho Autocad tương tác giữa người dùng và chương trình là một yếu tố
thiết yếu.Thông qua sự tương tác này người sử dụng có thể nhập dữ liệu và điều khiển chương
trình hoạt động.Trong VBA việc nhập dữ liệu được hỗ trợ thông qua đối tượng Utility – một
thuộc tính của đối tượng Thisdrawing.
Mỗi phương thức nhập liệu từ người dùng đều hiển thị dấu nhắc trên dòng lệnh của Autocad
cho phép người dùng nhập dữ liệu từ Dòng Lệnh hoặc từ Màn Hình Đồ Họa của Autocad và
trả về giá trị phù hợp với kiểu giá trị cần nhập vào.Ví dụ phương thức GetString trả về kiểu
String, phương thức GetInteger trả về kiểu Integer, phương thức GetPoint trả về kiểu
Variant (sẽ là mảng 1 chiều 3 phần tử kiểu Double)…Ta có thể kiểm soát việc nhập dữ liệu từ
người dùng bằng cách sử dụng phương thức InitializeUserInput, với phương thức này cho
phép ta điều khiển nhiều thứ như :không thể nhập vào số âm, không thể nhập vào giá trị
Null…
Dưới đây là một số hàm nhập liệu thường dùng.
Designing Team-Engineering Department Đinh Văn Tráng
Basic VBA for AutoCad Page 51
6.1. Phương thức : Prompt
Công dụng
Phương thức Prompt được dùng để gửi một thông báo đến người dùng trước khi hoặc sau
khi một nội dung nào đó đã đuợc thực hiện thông qua dòng lệnh của AutoCad.
Cú pháp
Thisdrawing.Utility.Prompt Mesage
Với Message là chuỗi thông báo sẽ được hiển thị tại dòng lệnh của AutoCad
Ví dụ
Sau khi chạy ví dụ trên, màn hình Autocad hiện kết quả như sau:
Để dòng thông báo xuất hiện trên một dòng ta thêm vào hằng số vbCrLf như sau
Lúc này kết quả như sau:
Designing Team-Engineering Department Đinh Văn Tráng
Basic VBA for AutoCad Page 52
6.2. Phương thức: GetString
Công dụng
Yêu cầu người dùng nhập vào một chuỗi tại dòng lệnh của Autocad
Cú pháp
StrObj = Thisdrawing.Utility.GetString (HasSpaces [, Prompt])
Giải thích
Tham số Giải thích
StrObj Kiểu String - ThôBiến chứa giá trị chuỗi do người dùng nhập vào
HasSpaces
Kiểu Boolean, điều khiển việc nhập “dấu cách”
Nếu HasSpaces = TRUE người dùng có thể nhập “dấu cách” trong
chuỗi, chỉ có thể nhấn Enter để kết thúc lệnh.
Nếu HasSpaces =FALSE người dùng không thể nhập “dấu cách”
trong chuỗi,nhấn Space hoặc Enter đều có thể kết thúc lệnh
Prompt Tham số tùy chọn kiểu String - Là chuỗi sẽ hiển thị trên dòng lệnh
của Autocad nhắc người dùng nhập dữ liệu.
Ví dụ
Designing Team-Engineering Department Đinh Văn Tráng
Basic VBA for AutoCad Page 53
6.3. Phương thức : GetPoint
Công dụng
Phương thức này sẽ yêu cầu người dùng nhập vào một điểm bằng cách nhập tọa độ trực
tiếp từ dòng lệnh hoặc chọn điểm trên màn hình.
Cú pháp
PointObj = Thisdrawing.Utility.GetPoint ([Base Point] [, Prompt ])
Giải thích
Tham số Giải thích
PointObj Kiểu Variant – Là mảng 1 chiều 3 phần tử chứa tọa độ điểm được
nhập vào
Base Point
Tham số tùy chọn – Điểm tham chiếu đến điểm được nhập vào.Nếu
có tham số Base Point sẽ xuất hiện “sợi dây thun” nối từ điểm Base
Point đến vị trí con trỏ chuột.
Prompt Tham số tùy chọn kiểu String- Là chuỗi sẽ hiển thị trên dòng lệnh
của Autocad nhắc người dùng nhập dữ liệu.
Ví dụ
Designing Team-Engineering Department Đinh Văn Tráng
Basic VBA for AutoCad Page 54
6.4. Phương thức : GetInteger và GetReal
Công dụng
Phương thức GetInteger sẽ yêu cầu người sử dụng nhập vào một số nguyên, còn phương
thức GetReal sẽ yên cầu người dùng nhập vào một số thực
Cú pháp
IntValue = Thisdrawing.Utitlity.GetInteger ([Prompt])
DblValue = Thisdrawing.Utitlity.GetReal ([Prompt])
Giải thích
Tham số Giải thích
IntValue Kiểu Integer - Biến chứa giá trị số nguyên do người dùng nhập vào
DblValue Kiểu Double - Biến chứa giá trị số thực do người dùng nhập vào
Prompt Tham số tùy chọn, kiểu String– Chuỗi ký tự hiện trên dòng lệnh của
AutoCad yêu cầu người dùng nhập dữ liệu vào
Ví dụ
Designing Team-Engineering Department Đinh Văn Tráng
Basic VBA for AutoCad Page 55
6.5. Phương thức : GetDistance
Công dụng
Phương thức này sẽ yêu cầu người dùng nhập vào giá trị khoảng cách, giá trị này có thể
được nhập từ dòng lệnh hoặc có thể được chọn 2 điểm trên màn hình bản vẽ.
Cú pháp
DistValue = Thisdrawing.Utility.GetDistance ([Point] [,Prompt])
Giải thích
Tham số Giải thích
DistValue Kiểu Double – Biến chứa giá trị khoảng cách do người dùng nhập
vào.
Point
Tham số tùy chọn, kiểu Variant/Double – mảng 1 chiều có 3 phần
tử thể hiện tọa độ của điểm cơ sở để tính khoảng cách.
Nếu tham số này CÓ thì người dùng có thể nhập khoảng cách
hoặc chọn thêm một điểm để xác định khoảng cách.
Nếu tham số này KHÔNG CÓ thì người dùng có thể nhập giá trị
khoảng cách hoặc chọn 2 điểm để xác định khoảng cách.
Prompt Tham số tùy chọn,kiểu String– Là chuỗi hiện trên dòng lệnh của
Autocad nhắc người dùng nhập dữ liệu
Chú ý
Phương thức GetDistance cho phép người dùng nhập vào một số âm và sẽ trả về một số
âm tương ứng.Khi người dùng chọn điểm trên màn hình thì phương thức này luôn trả về giá
trị tuyệt đối của khoảng cách giữa hai điểm.
Designing Team-Engineering Department Đinh Văn Tráng
Basic VBA for AutoCad Page 56
Ví dụ
6.6. Phương thức : GetKeyWord
Công dụng
Phương thức này sẽ yêu cầu người dùng nhập vào từ khóa ở dòng lệnh của AutoCad
Cú pháp
StrKeyword = Thisdrawing.Utility.GetKeyWord ([Prompt])
Giải thích
Tham số Giải thích
StrKeyword Kiểu String – Biến chứa giá trị do người dùng nhập vào
Prompt Tham số tùy chọn kiểu String – Là chuỗi hiện trên dòng lệnh của
Autocad nhắc người dùng nhập dữ liệu
Designing Team-Engineering Department Đinh Văn Tráng
Basic VBA for AutoCad Page 57
Ví dụ
6.7. Phương thức GetEntity
Công dụng
Phương thức này được sử dụng để lấy MỘT ĐỐI TƯỢNG của Autocad bằng cách yêu
cầu người dùng chọn trực tiếp trên màn hình bản vẽ.
Cú pháp
Thisdrawing.Utility.GetEntity PickedEntity, PickPoint [, Prompt]
Giải thích
Tham số Giải thích
PickedEntity Biến chứa đối tượng được chọn.
PickedPoint Kiểu Variant – Mảng 3 phần tử thể hiện tọa độ điểm mà người dùng
kích chuột chọn đối tượng.
Prompt Tham số tùy chọn, kiểu String – Là chuỗi hiện trên dòng lệnh của
Autocad nhắc người dùng nhập dữ liệu
Designing Team-Engineering Department Đinh Văn Tráng
Basic VBA for AutoCad Page 58
Ví dụ
Ví dụ này sẽ yêu cầu người dùng chọn một đối tượng trên màn hình bản vẽ, sau đó sẽ
thông báo về loại đối tượng đã được chọn và tọa độ điểm chọn đó.
6.8. Phương thức: GetCorner
Công dụng
Phương thức này yêu cầu người dùng nhập một điểm trên dòng lệnh hoặc chọn một điểm
trên màn hình bản vẽ - điểm này chính là một góc của một hình chữ nhật.
Cú pháp
VarPoint =Thisdrawing.Utility.GetCorner (BasePoint [,Prompt])
Giải thích
Tham số Giải thích
VarPoint Kiểu Variant – Thực chất là mảng 1 chiều 3 phần tử thể hiện tọa độ
góc của hình chữ nhật
BasePoint Mảng 1 chiều 3 phần tử - Thể hiện góc thứ nhất của hình chữ nhật
Prompt Tham số tùy chọn kiểu String – Là chuỗi hiện trên dòng lệnh của
Autocad nhắc người dùng nhập dữ liệu
Designing Team-Engineering Department Đinh Văn Tráng
Basic VBA for AutoCad Page 59
Ví dụ
6.9. Phương thức : InitializeUserInput
Công dụng
Phương thức InitializeUserInput dùng để định nghĩa các từ khóa hoặc hạn chế việc nhập
dữ liệu trong các phương thức như GetDistance, GetInteger, GetKeyword, GetPoint,
GetReal, GetCorner…
Cú pháp
Thisdrawing.Utility. InitializeUserInput Bits [,Keyword]
Giải thích
Tham số Giải thích
Bits Kiểu Integer - Giá trị tham số này bằng tổng các Bit Code tương
ứng với các chế độ kiểm soát mà ta mong muốn
Keyword Tham số tùy chọn kiểu String chứa danh sách các từ khóa
Designing Team-Engineering Department Đinh Văn Tráng
Basic VBA for AutoCad Page 60
Một số giá trị Bit Code và chế độ kiểm soát tương ứng thường dùng
Bit Code Chế độ kiểm soát
1 Giá trị PHẢI được nhập vào, không chấp nhận giá trị Null (Chỉ
nhấn phím Enter mà không nhập giá trị)
2 Giá trị nhập phải khác 0
4 Giá trị nhập không được là số âm
64
Dùng cho hàm GetDistance, bit code này sẽ loại bỏ tọa độ Z của hai
điểm cần tính khoảng cách (tương tự như việc chiếu 2 điểm này lên
mặt phẳng XY, sau đó tính khoảng cách giữa hai điểm chiếu này)
128
Cho phép nhập chuỗi ký tự không có trong danh sách các từ
khóa.Các Bit Code khác sẽ được ưu tiên trước nhưng nếu Bit Code
1 và Bit Code 128 được sử dụng cùng lúc với nhau (BITS=129) thì
giá trị Null nhập vào sẽ được chuyển thành chuỗi rỗng
Ví dụ
Ví dụ này sẽ thông báo dữ liệu nhập vào phải khác rỗng, khác không và không âm
Designing Team-Engineering Department Đinh Văn Tráng
Basic VBA for AutoCad Page 61
Chương 7
TẠO MỚI ĐỐI TƯỢNG TRONG AUTOCAD
Nội dung chương :
- Khái niệm về ModelSpace và PaperSpace
- Cách tạo mới một số đối tượng chính trong AutoCad như Line, Circle, Arc, Text,
Mtext…
Designing Team-Engineering Department Đinh Văn Tráng
Basic VBA for AutoCad Page 62
7.1. Xác định nơi chứa đối tượng
Trong AutoCad tất cả các đối tượng đồ họa đều được tạo trong tập đối tượng ModelSpace
(Không gian mô hình), tập đối tượng PaperSpace (Không gian in) hoặc trong đối tượng
Block.Tuy nhiên được sử dụng nhiều nhất là hai tập đối tượng ModelSpace và PaperSpace.
ModelSpace :Đây là nơi chủ yếu các đối tượng đồ họa cấu thành nên bản vẽ sẽ được thực
hiện.Trong AutoCad chỉ có một không gian mô hình tương ứng với nó chính là thẻ Model
nằm ở góc dưới màn hình bản vẽ.
PaperSpace : PaperSpace cũng cho phép chứa các đối tượng đồ họa, nhưng mục đích
chính của PaperSpace là để bố trí và in ấn bản vẽ.PaperSpace thường chứa các khung nhìn
theo một tỉ lệ định trước thể hiện một phần bản vẽ bên ModelSpace.Trong AutoCad người
dùng có thể tạo nhiều không gian in khác nhau, mỗi không gian in tương ứng với một thẻ
Layout nằm ở góc dưới màn hình bản vẽ.Để truy cập đến các không gian in ta sử dụng tập
đối tượng Layouts.
Tại một thời điểm hoặc ModelSpace hoặc PaperSpace là hiện hành.Chúng ta dùng thuộc tính
ActiveSpace có trong đối tượng Thisdrawing để thiết lập sự hiện hành của một không gian.
Ví dụ
Ví dụ này sẽ thông báo ModelSpace hay PaperSpace là hiện hành
Ví dụ
Ví dụ này sẽ chuyển đổi qua lại giữa ModelSpace và PaperSpace
Designing Team-Engineering Department Đinh Văn Tráng
Basic VBA for AutoCad Page 63
7.2. Khai báo và phương thức tạo đối tượng hình học
7.2.1. Tạo đường thẳng –Phương thức AddLine
Cú pháp
Set LineObj = Thisdrawing.SPACE.AddLine (StartPoint, EndPoint)
Giải thích
Tham số Giải thích
LineObj Kiểu acadLine – Biến chứa đoạn thẳng được trả về
SPACE Không gian chứa đối tượng Line : ModelSpace hoặc PaperSpace
StartPoint,
EndPoint
Kiểu Variant hoặc mảng 1 chiều 3 phần tử kiểu Double chứa tọa độ
điểm đầu và điểm cuối của đoạn thẳng được tạo
Ví dụ
Designing Team-Engineering Department Đinh Văn Tráng
Basic VBA for AutoCad Page 64
7.2.2. Tạo đối tượng LWPolyline - Phương thức AddLightWeightPolyline
Để tạo một đối tượng gồm nhiều đoạn thẳng liên tiếp đi qua các điểm chúng ta sử dụng
phương thức AddLightWeightPolyline
Cú pháp
Set LWPolylineObj = Thisdrawing.SPACE.AddLightWeightPolyline (Points)
Giải thích
Tham số Giải thích
LWPolylineObj Kiểu acadLWPolyline –Biến chứa đối tượng LightWeightPolyline
SPACE Không gian chứa đối tượng Line : ModelSpace hoặc PaperSpace
Points
Tham số kiểu Double chứa tọa độ đỉnh của đa tuyến.Mỗi đỉnh chỉ
có 2 thành phần x và y.Vì vậy số phần tử của tham số Points luôn là
số chẵn.
Ví dụ Ví dụ này sẽ tạo ra một đa tuyến gồm nhiều đoạn thẳng liên tiếp đi qua các điểm,
khi muốn kết thúc thì nhấn phím Enter hoặc nhấn ESC
Designing Team-Engineering Department Đinh Văn Tráng
Basic VBA for AutoCad Page 65
7.2.3. Tạo đối tượng đường tròn – Phương thức AddCircle
Cú pháp
Set CircleObj = Thisdrawing.SPACE.AddCircle (CenterPoint, Radius)
Giải thích
Tham số Giải thích
CircleObj Kiểu acadCircle –Biến chứa đường tròn được tạo.
SPACE Không gian chứa đối tượng Line : ModelSpace hoặc PaperSpace
CenterPoint Kiểu Variant hoặc mảng 3 phần tử kiểu Double –Thể hiện tọa độ tâm
của đường tròn
Radius Kiểu Double – Bán kính của đường tròn nhập vào
Ví dụ
Ví dụ
Designing Team-Engineering Department Đinh Văn Tráng
Basic VBA for AutoCad Page 66
7.2.4. Tạo đối tượng cung tròn –Phương thức AddArc
Cú pháp
Set ArcObj = Thisdrawing.SPACE.AddArc (CenterPoint, Radius, StartAngle, EndAngle)
Giải thích
Tham số Giải thích
ArcObj Kiểu acadArc - Biến chứa đối tượng Arc được tạo
SPACE Không gian chứa đối tượng Line : ModelSpace hoặc PaperSpace
CenterPoint Kiểu Variant hoặc mảng 3 phần tử kiểu Double – chứa tọa độ tâm của cung tròn
Radius Kiểu Double – Bán kính của cung tròn được tạo
StartAngle,EndAngle Kiểu Double – Góc bắt đầu và kết thúc của cung tròn (Tính bằng Radian).Phương thức này sẽ vẽ cung tròn theo chiều ngược chiều kim đồng hồ từ góc StartAngle đến góc EndAngle.
Ví dụ
Designing Team-Engineering Department Đinh Văn Tráng
Basic VBA for AutoCad Page 67
7.2.5. Tạo đối tượng văn bản đơn - phương thức AddText
Cú pháp
Set TextObj = thisdrawing.SPACE.AddText (TextString, InsertPoint,Height)
Giải thích
Tham số Giải thích
TextObj Kiểu acadText – Biến chứa đối tượng Text được tạo
SPACE Không gian chứa đối tượng Line : ModelSpace hoặc PaperSpace
TextString Kiểu String – Là chuỗi hiển thị trên bản vẽ
InsertPoint Kiểu Variant hoặc mảng 3 phần tử kiểu Double xác định điểm chèn chuỗi văn bản.
Height Kiểu Double – Xác định chiều cao chữ được tạo
Chú ý: Văn bản được tạo sẽ sử dụng kiểu chữ hiện hành với những thiết lập mặc định về
phông chữ và định dạng
Ví dụ
Designing Team-Engineering Department Đinh Văn Tráng
Basic VBA for AutoCad Page 68
7.2.6. Tạo đối tượng văn bản nhiều dòng-Phương thức AddMtext
Cú pháp
Set MtextObj = Thisdrawing.SPACE.AddMText (InsertPoint, Width, TextString)
Giải thích
Tham số Giải thích
MtextObj Kiểu acadMtext – Biến chứa đối tượng MText được tạo
SPACE Không gian chứa đối tượng Line : ModelSpace hoặc PaperSpace
InsertPoint Kiểu Variant hoặc mảng 3 phần tử kiểu Double xác định điểm chèn
chuỗi văn bản.
Width Kiểu Double – Xác định bề rộng của văn bản được hiển thị
TextString Kiểu String – Là chuỗi hiển thị trên bản vẽ
Ví dụ Ví dụ này sẽ tạo một đối tượng Mtext trong ModelSpace, sau đó tiến hành đổi
màu thành Magenta đồng thời thiết lập chế độ căn lề là “Middle Center” cho đối tượng
MText này.
Designing Team-Engineering Department Đinh Văn Tráng
Basic VBA for AutoCad Page 69
Chương 8
LÀM VIỆC VỚI ĐỐI TƯỢNG SELECTIONSET
Nội dung chương :
- Khai báo và khởi tạo một đối tượng SelectionSet
- Giới thiệu một số phương thức chọn đối tượng thường dùng
- Kết hợp bộ lọc đối tượng vào các phương thức chọn đối tượng
Designing Team-Engineering Department Đinh Văn Tráng
Basic VBA for AutoCad Page 70
8.1. Quy trình làm việc với đối tượng SelectionSet
Đôi tượng SelectionSet được sử dụng để chứa các đối tượng được chọn trong bản vẽ.Mỗi đối
tượng SlectionSet có nhiều phương thức để thêm đối tượng vào nó như AddItems,
SelectOnScreen…
Mỗi bản vẽ Autocad đều có một tập đối tượng SelectionSets chứa các đối tượng SelectionSet
trong bản vẽ.Người dùng có thể tạo ra nhiều đối tượng SelectionSet bằng cách dùng phương
thức Add có trong tập đối tượng SelectionSets.
Đối tượng SelectionSet chỉ có tính chất tạm thời nghĩa là khi đóng bản vẽ lại thì mọi đối tượng
SelectionSet sẽ là một tập rỗng.
Quá trình làm việc với đối tượng SelectionSet gồm các bước sau:
- Khai báo đối tượng SelectionSet
- Khởi tạo đối tượng SelectionSet.
- Thêm các đối tượng vào SelectionSet
- Thực hiện các thao tác cần thiết trên các đối tượng trong SelectionSet
8.2. Khai báo và khởi tạo đối tượng SelectionSet
Cú pháp
Set SelectionSetObj = Thisdrawing.SelectionSets.Add (SelectionSetName)
Giải thích
Tham số Giải thích
SelectionSetObj Kiểu acadSelectionSet – Biến chứa đối tượng SelectionSet
được tạo
SelectionSetName Kiểu String – Chuỗi xác định tên SelectionSet được tạo
Designing Team-Engineering Department Đinh Văn Tráng
Basic VBA for AutoCad Page 71
Ví dụ
Giải thích dòng lệnh
- Dòng mã lệnh số 1: Tắt các thông báo lỗi khi xuất hiện
- Dòng mã lệnh số 2: Khai báo đối tượng SelectionSet
- Dòng mã lệnh số 3: Nếu đối tượng SelectionSet có tên “Kira” tồn tại thì sẽ được gán cho
đối tượng SelectionSetObj.
- Dòng mã lệnh số 4: Nếu đối tượng SelectionSet có tên “Kira” chưa tồn tại thì sẽ xuất
hiện lỗi.
- Dòng mã lệnh số 5: Xóa lỗi xảy ra.
- Dòng mã lệnh số 6: Khởi tạo đối tượng SelectionSet có tên “Kira”
- Dòng mã lệnh số 7: Nếu đã tồn tại đối tượng SelectionSet có tên “Kira” thì sẽ xóa bỏ nội
dung bên trong đối tượng này.
8.3. Thêm đối tượng vào trong một SelectionSet
Để thêm các đối tượng hình học vào trong một SelectionSet chúng ta sử dụng phương thức có
sẵn trong đối tượng SelectionSet như AddItems, Select, SelectAtPoint, SelectionOnScreen,
SelectByPolygon…
Tùy thuộc vào mỗi phương thức được sử dụng mà có các tham số tương ứng đi kèm khác
nhau.Sau đây là một số phương thức thường được sử dụng.
Designing Team-Engineering Department Đinh Văn Tráng
Basic VBA for AutoCad Page 72
8.3.1. Phương thức AddItems
Phương thức này dùng để thêm TỪNG ĐỐI TƯỢNG hình học vào trong đối tượng
SelectionSet.
Cú pháp
SelectionSetObj.AddItems ArrayObj
Giải thích
Tham số Giải thích
SelectionSetObj ểu acadSelectionSet – Biến chứa đối tượng SelectionSet được tạo
ArrayObj ểu Variant, là mảng chứa các đối tượng được thêm vào SelectionSet
Ví dụ
Designing Team-Engineering Department Đinh Văn Tráng
Basic VBA for AutoCad Page 73
8.3.2. Phương thức Select
Phương thức Select là một phương thức cơ bản của đối tượng SelectionSet.Với phương
thức này thì người dùng sẽ có nhiều lựa chọn khác nhau để thêm đối tượng vào trong đối
tượng SelectionSet tùy thuộc vào việc sử dụng các tham số của phương thức.
Cú pháp
SelectionSetObj.Select Mode [, Point_1] [, Point_2] [, FilterType] [, FilterData]
Giải thích
Tham số Giải thích
SelectionSetObj Kiểu acadSelectionSet – Biến chứa đối tượng SelectionSet được
tạo
Mode Kiểu InteGer - Tham số xác định chế độ chọn đối tượng.
Point_1
Tham số tùy chọn, kiểu Variant /Double - Mảng 3 phần tử chứa
tọa độ điểm thứ nhất của cửa sổ lựa chọn, sử dụng kết hợp với tham
số Point_2
Point_2
Tham số tùy chọn, kiểu Variant/ Double - Mảng 3 phần tử chứa tọa
độ điểm thứ hai của cửa sổ lựa chọn, sử dụng kết hợp với tham số
Point_1
FilterType,
FilterData
Tham số tùy chọn xác định bộ lọc đối tượng (Xem chi tiết tại “Bộ
lọc đối tượng”)
Giới thiệu tham số Mode
Tham số Mode sẽ xác định cách thức lựa chọn đối tượng khi sử dụng phương thức Select.
Designing Team-Engineering Department Đinh Văn Tráng
Basic VBA for AutoCad Page 74
Bảng giá trị và ý nghĩa của tham số Mode
Mode Giá trị Ý nghĩa
acSelectionSetWindow 0
Chọn tất cả các đối tượng nằm trong hình chữ nhật
giới hạn bởi hai điểm Point_1, Point_2.Hai tham số
Point_1, Point_2 bắt buộc phải được sử dụng
acSelectionSetCrossing 1
Chọn tất cả các đối tượng nằm trong hoặc bị cắt
bởi hình chữ nhật giới hạn bởi hai điểm Point_1,
Point_2.Hai tham số Point_1, Point_2 bắt buộc
phải được sử dụng
acSelectionSetPrevious 3 Chọn các đối tượng đã được chọn gần nhất.Hai
tham số Point_1, Point_2 được bỏ qua.
acSelectionSetLast 4 Chọn đối tượng cuối cùng được tạo ra.Hai tham số
Point_1, Point_2 được bỏ qua
acSelectionSetAll 5 Chọn tất cả các đối tượng trong bản vẽ.Hai tham số
Point_1, Point_2 được bỏ qua
Ví dụ
Designing Team-Engineering Department Đinh Văn Tráng
Basic VBA for AutoCad Page 75
8.3.3. Phương Thức SelectOnScreen
Phương thức này sẽ hiện thị dòng nhắc “Select Object:” tại dòng lệnh và cho phép người
dùng chọn đối tượng trực tiếp trên màn hình bản vẽ bằng nhiều cách.Cách thao tác này
giống như một số lệnh thông thường của AutoCad như Copy, Move, Delete…
Với phương thức này thì hai tham số Point_1 và Point_2 không được sử dụng, hai tham số
xác đinh chế độ lọc FilterType và FilterData có thể được sử dụng.
Cú pháp
SelectionSetObj.SelectOnScreen [FilterType] [, FilterData]
Giải thích
Tham số Giải thích
SelectionSetObj Kiểu acadSelectionSet – Biến chứa đối tượng SelectionSet được
tạo ra
FilterType,
FilterData
Tham số tùy chọn xác định bộ lọc đối tượng (Xem chi tiết tại “Bộ
lọc đối tượng”)
Ví dụ
Designing Team-Engineering Department Đinh Văn Tráng
Basic VBA for AutoCad Page 76
8.3.4. Thao tác với các đối tượng trong SelectionSet
Mục đích chính của đối tượng SelectionSet là nhóm các đối tượng hình học lại để hiệu
chỉnh các đối tượng trong đó một cách dễ dàng hơn.Do vậy để truy cập đến các đối tượng
trong nằm trong SelectionSet ta sử dụng cấu trúc “For Each….Next”
Ví dụ
Ví dụ này sẽ yêu cầu người dùng chọn các đối tượng trên màn hình bản vẽ, sau đó đổi màu
các đối tượng được chọn thành màu đỏ.
8.4. Bộ lọc cho đối tượng SelectionSet
Trong quá trình thao tác với đối tượng SelectionSet, đôi khi ta muốn giới hạn việc chọn đối
tượng theo một điều kiện nào đó như chỉ chọn các đối tượng Line, Circle… hoặc đơn giản
chọn các đối tượng thuộc một Layer nào đó hoặc đối tượng có màu nào đó….Để thực hiện
điều này cần xác định “Kiểu bộ lọc” và “Đối tượng lọc”.Kiểu bộ lọc chính là tham số
FilterType và Đối tượng lọc chính là FilterData.
- FilterType : Kiểu Integer, là mảng 1 chiều chứa mã Dxf xác định “Kiểu lọc đối tượng”.
- FilterData : Kiểu Variant, là mảng một chiều chứa “Đối tượng lọc”.
Chú ý : Quan hệ giữa FilterType và FilterData là quan hệ 1:1 nên số phần tử trong mảng
FilterType và FilterData phải bằng nhau.
Designing Team-Engineering Department Đinh Văn Tráng
Basic VBA for AutoCad Page 77
Danh sách các mã Dxf thường được sử dụng
Mã Dxf Ý nghĩa
0 Kiểu String – Thể hiện loại đối tượng như: Line, PolyLine, LWPolyline,
Spline, Circle, Arc, Text, Mtext,Dimension…
1 Chuỗi văn bản chứa trong đối tượng Text, Mtext.
2 Kiểu String – Thể hiện tên của Block.
6 Kiểu String – Thể hiện LineType của các đối tượng.
7 Kiểu String – Tên TextStyle
8 Kiểu String – Thể hiện tên của Layer
10 Tọa độ chính của một đối tượng như: StartPoint của Line, điểm chèn của Text,
CenterPoint của Circle…
62 Kiểu Integer – Xác định màu của đối tượng: 0=ByBlock, 1=Red,
2=Yellow….256=ByLayer.
67 Kiểu Integer – Xác định không gian (0 = ModelSpace ; 1 = PaperSpace)
-4 Các toán tử điều kiện (Sử dụng khi kết hợp nhiều điều kiện lọc).
8.4.1. Lọc theo một điều kiện
Khi lọc theo một điều kiện thì hai tham số FilterType và FilterData là mảng một chiều 1
phần tử.
Designing Team-Engineering Department Đinh Văn Tráng
Basic VBA for AutoCad Page 78
Ví dụ Đoạn mã sau sẽ chọn duy nhất đối tượng Line trong bản vẽ sau đó sẽ đổi tất cả các
Line được chọn này thành màu đỏ.
8.4.2. Lọc theo nhiều điều kiện
Khi cần lọc đối tượng theo nhiều điều kiện kết hợp ta sử dụng “Toán tử điều kiện” vào
trong bộ lọc, lúc này các điều kiện lọc sẽ được đặt giữa các “Toán tử điều kiện”.
Toán tử Giá trị
bắt đầu
Giá trị
kết thúc
Số lượng điều
kiện loc Ý nghĩa
AND “<And” “And>” >=1 Đối tượng nào thỏa mãn tất cả các điều kiện lọc sẽ được chọn
OR “<Or” “Or>” >=1 Đối tượng nào thỏa mãn một trong các điều kiện sẽ được chọn.
XOR “<Xor” “Xor>” 2 Đối tượng nào thỏa mãn một điều kiện và không thỏa mãn điều kiện còn lại sẽ được chọn.
NOT “<Not” “Not>” 1 Đối tượng nào không thỏa mãn điều kiện lọc sẽ được chọn
Designing Team-Engineering Department Đinh Văn Tráng
Basic VBA for AutoCad Page 79
Ví dụ
Đoạn mã sau sau sẽ lọc theo nhiều điều kiện, những đối tượng nào là đường thẳng hoặc
đường tròn sẽ được chọn, sau đó sẽ đổi màu chúng thành màu đỏ.
Tóm lược điều kiện
“<Or” (Line, Circle) “Or>”
Triểu khai dạng code
Ví dụ
Đoạn mã sau sẽ chọn những đối tượng nào là Text hoặc Mtext nhưng không thuộc Layer có
tên “DefPoints”, sau đó đổi chúng về Layer có tên “Text_3”
Tóm tắt điều kiện
“<And”(”<Or”(Text, Mtext)”Or>),”<Not”(Defpoints)”Not>”)”And>”
Designing Team-Engineering Department Đinh Văn Tráng
Basic VBA for AutoCad Page 80
Triển khai dạng code
8.5. Một số phương thức khác của đối tượng SelectionSet
8.5.1. Phương thức RemoveItems
Phương thức này sẽ loại bỏ một hoặc nhiều đối tượng ra khỏi SelectionSet.Các đối tượng
này sẽ không nằm trong SelectionSet nữa NHƯNG vẫn tồn tại trong bản vẽ.
Cú pháp
SelectionSetObj.RemoveItems ArrayObj
Giải thích
Tham số Giải thích
SelectionSetObj Kiểu acadSelectionSet – Biến chứa đối tượng SelectionSet được tạo ra
ArrayObj Kiểu Variant - mảng chứa các đối tượng được thêm vào SelectionSet
Designing Team-Engineering Department Đinh Văn Tráng
Basic VBA for AutoCad Page 81
Ví dụ
Đoạn code sau sẽ thực hiện việc tạo đối Circle và đối tượng Ellipse trong ModelSpace, sau
đó sẽ thêm tất cả các đối tượng trong ModelSpace vào SelectionSetObj (Kể cả 2 đối tượng
Circle và Ellipse vừa mới tạo) tiếp theo đó sẽ Remove 2 đối tượng Cirle và Ellipse này ra
khỏi SelectionSet.
Designing Team-Engineering Department Đinh Văn Tráng
Basic VBA for AutoCad Page 82
8.5.2. Phương thức Clear
Khi phương thức Clear được thực thi nó sẽ loại bỏ tất cả các đối tượng ra khỏi SelectionSet
NHƯNG bản thân đối tượng SelectionSet và các đối tượng đó vẫn tồn tại trong bản vẽ.Đối
tượng SelectionSet lúc này trở thành một tập rỗng.
Cú pháp
SelectionSetObj.Clear
8.5.3. Phương thức Eraser
Khi phương thức Eraser được thực thi nó sẽ loại bỏ tất cả các đối tượng ra khỏi SelectionSet
đồng thời xóa luôn các đối tượng này khỏi bản vẽ NHƯNG đối tượng SelectionSet vẫn còn
tồn tại.Đối tượng SelectionSet lúc này là một tập rỗng.
Cú pháp
SelectionSetObj.Eraser
8.5.4. Phương thức Delete
Khi phương thức Delete được thực thi nó sẽ xóa đối tượng SelectionSet ra khỏi bản vẽ
NHƯNG các đối tượng nằm trong SelectionSet vẫn còn tồn tại trong bản vẽ.
Cú pháp
SelectionSetObj.Delete
Designing Team-Engineering Department Đinh Văn Tráng
Basic VBA for AutoCad Page 83
Bài Tập chủ đề: Làm việc với đối tượng SelectionSet
Bài 1:
Khai báo và khởi tạo đối tượng SelectionSetObj có tên “PTSCMC”,đồng thời sử dụng bộ lọc 1
điều kiện để chọn tất cả các Block có tên do người dùng nhập vào.
Bài 2:
Khai báo và khởi tạo đối tượng SelectionSet có tên “Design_Team”, đồng thời sử dụng bộ lọc
nhiều điều kiện kết hợp để chọn đối tượng Line có màu Xanh Lá và không thuộc Layer có tên
“Defpoints”.Sau đó thực hiện thao tác Delete tất cả các Line vuông góc với trục Ox.
Bài 3:
Thông thường các kích thước nằm rải rác ở các Layer khác nhau.Hãy viết chương trình tạo ra
một đối tượng SelectionSet có tên “Dimension” và chuyển chúng sang một Layer
mới.Chương trình sẽ hỏi người sử dụng tên Layer mới này.
Designing Team-Engineering Department Đinh Văn Tráng
Basic VBA for AutoCad Page 84
Chương 9
HIỆU CHỈNH CÁC ĐỐI TƯỢNG HÌNH HỌC
Nội dung chuyên đề :
- Tổng quan về hiệu chỉnh các đối tượng hình học trong VBA
- Giới thiệu về phương thức Copy
- Giới thiệu về phương thức Delete
- Giới thiệu về phương thức Move
- Giới thiệu về phương thức Mirror
- Giới thiệu về phương thức Offset
- Giới thiệu về phương thức Rotate
- Giới thiệu về phương thức Phương thức ScaleEntity
- Giới thiệu về thuộc tính Color
- Giới thiệu về thuộc tính Layer
- Giới thiệu về thuộc tính LineType
- Giới thiệu về thuộc tính LineWeight
Designing Team-Engineering Department Đinh Văn Tráng
Basic VBA for AutoCad Page 85
9.1. Tổng quan về việc hiệu chỉnh các đối tượng hình học bằng VBA
Trong VBA việc hiệu chỉnh các đối tượng hình học có thể thực hiện thông qua các phương
thức hoặc thuộc tính của đối tượng
Phương thức dùng để thay đổi về hình dáng, kích thước vị trí của đối tượng…Thông
thường mỗi phương thức đều có các tham số riêng.
Thuộc tính thường dùng để thay đổi tính chất liên quan đến sự hiển thị đối tượng đó trên
màn hình hoặc khi in như màu sắc, kiểu đường..
Khi hiệu chỉnh đối tượng bẳng VBA có thể những hiệu chỉnh sẽ chưa được cập nhật ngay trên
màn hình bản vẽ.Do đó để cập nhật những thay đổi trong bản vẽ ta dùng phương thức Update
có trong đối tượng đó hoặc trong đối tượng Application
9.2. Sao chép đối tượng – Phương thức Copy
Với phương thức này đối tượng mới tạo ra sẽ giống hệt đối tượng gốc và có vị trí trùng với đối
tượng gốc, tuy nhiên đối tượng mới sẽ nằm bên trên đối tượng gốc
Cú pháp
Set CopyObj = OriginalObj.Copy
Giải thích
Tham số Giải thích
OriginalObj Đối tượng hình học – đối tượng gốc sẽ được sao chép
CopyObj Đối tượng hình học, có kiểu giống với kiểu của đối tượng gốc
Ví dụ
Trong ví dụ này sẽ tạo một đường tròn bên ModelSpace, sau đó sẽ copy đối tượng này (Chú ý
đường tròn được copy sau đó sẽ nằm chồng lên đường tròn cũ)
Designing Team-Engineering Department Đinh Văn Tráng
Basic VBA for AutoCad Page 86
9.3. Xóa đối tượng –Phương thức Delete
Cú pháp
OriginalObj.Delete
Ví dụ
Ví dụ này sẽ yêu cầu người dùng chọn đối tượng cần xóa đi trên màn hình bản vẽ
9.4. Di chuyển đối tượng – Phương thức Move
Cú pháp
OriginalObj.Move Point_1, Point_2
Designing Team-Engineering Department Đinh Văn Tráng
Basic VBA for AutoCad Page 87
Giải thích
Tham số Giải thích
OriginalObj ối tượng hình học – Là đối tượng sẽ bị di chuyển
Point_1, Point_2
ểu Variant hoặc Double – Là mảng 3 phần tử chứa tọa độ điểm thứ
nhất và điểm thứ hai.Hai điểm này sẽ xác định vector chuyển vị
(Vector xác định khoảng cách và hướng di chuyển đối tượng)
Ví dụ
Ví dụ này sẽ tạo ra một đường tròn và di chuyển vòng tròn này dọc theo trục X một khoảng
2 đơn vị.
Ví dụ
Ví dụ này sẽ yêu cầu người dùng chọn đối tượng trên màn hình bản vẽ, sau đó thực hiện
phương thức Move với các đối tượng này.
Designing Team-Engineering Department Đinh Văn Tráng
Basic VBA for AutoCad Page 88
9.5. Lấy đối xứng – Phương thức Mirror
Cú pháp
Set MirrorObj = OriginalObj.Mirror (Point_1, Point_2)
Giải thích
Tham số Giải thích
MirrorObj Biến chứa đối tượng trả về của phương thức Mirror – có kiểu giống
với kiểu của đối tượng gốc
OriginalObj Đối tượng gốc được lấy đối xứng
Point_1,
Point_2
Kiểu Variant hoặc Double – Mảng 3 phần tử chứa tọa độ của điểm
thứ nhất và thứ 2 tạo nên trục đối xứng
Designing Team-Engineering Department Đinh Văn Tráng
Basic VBA for AutoCad Page 89
Ví dụ
Trong ví dụ này yêu cầu người dùng chọn các đối tượng trên màn hình để lấy đối xứng.Chú ý
biến hệ thống “MIRRTEXT”, biến này có hai giá trị là 0 và 1 và chỉ có tác dụng với đối
tượng văn bản (Hãy thử để thấy sự khác biệt !)
9.6. Phương thức OffSet
Công dụng
Phương thức Offset sẽ tạo ra một đối tượng mới có đường biên cách đường biên của đối
tượng gốc một khoảng định trước.Phương thức này chỉ áp dụng cho các đối tượng như Arc,
Circle, Ellipse, Line, LightweightPolyline, Polyline, Spline, và Xline.Phương thức này
sẽ trả về một mảng chứa đối tượng vừa mới tạo NHƯNG thông thường chỉ chứa một đối
tượng.
Cú pháp
varArrayObj = OriginalObj.Offset (OffsetDistance)
Designing Team-Engineering Department Đinh Văn Tráng
Basic VBA for AutoCad Page 90
Giải thích
Tham số Giải thích
varArrayObj Kiểu Variant – Mảng chứa đối tượng mới được tạo thành
OriginalObj Đối tượng gốc được lấy OffSet
OffsetDistance
Kiểu Double – Khoảng cách Offset, có thể âm hoặc dương.
Nếu là số âm, phương thức này sẽ tạo ra đối tượng có “bán kính nhỏ
hơn” đối tượng gốc, khi “bán kính nhỏ hơn” không có ý nghĩa (Đối
với đối tượng Line, Xline …) thì phương thức này sẽ tạo ra đối
tượng có toạ độ X, Y và Z nhỏ hơn đối tượng gốc.
Ví dụ
9.7. Xoay đối tượng – Phương thức Rotate
Công dụng
Phương thức này dùng để xoay một đối tượng quanh một điểm cố định với một góc quay
định trước
Cú pháp
Object.Rotate BasePoint, RotationAngle
Designing Team-Engineering Department Đinh Văn Tráng
Basic VBA for AutoCad Page 91
Giải thích
Tham số Giải thích
Object Đối tượng sẽ được xoay
BasePoint Kiểu Variant hoặc Double – Mảng 3 phần tử chứa tọa độ điểm xoay
RotationAngle Kiểu Double – Góc quay đối tượng ( đơn vị : Radian)
Ví dụ
Trong ví dụ này sẽ yêu cầu người dùng chọn một đối tượng trên màn hình để xoay, góc nhập
vào dưới dạng đơn vị “Degree” sẽ được chuyển sang đơn vị “Radian”
Designing Team-Engineering Department Đinh Văn Tráng
Basic VBA for AutoCad Page 92
9.8. Thay đổi tỉ lệ đối tượng – Phương thức ScaleEntity
Công dụng
Phương thức này dùng để thay đổi tỉ lệ đối tượng giống nhau theo các phương X, Y, Z quanh
một điểm.
Cú pháp
Object.ScaleEntity BasePoint, ScaleFactor
Giải thích
Tham số Giải thích Object Đối tượng sẽ được Scale
BasePoint Kiểu Variant hoặc Double – Mảng 3 phần tử chứa tọa độ điểm
Scale, đối tượng sẽ được Scale quanh điểm này
ScaleFactor
Kiểu Double – Xác đinh hệ số Scale.Tham số này phải lớn hơn 0 nếu không chương trình sẽ báo lỗi.
Nếu ScaleFactor > 1 : Đối tượng được phóng to lên
Nếu ScaleFactor < 1 : Đối tượng bị thu nhỏ lại
Ví dụ
Designing Team-Engineering Department Đinh Văn Tráng
Basic VBA for AutoCad Page 93
9.9. Thay đổi màu đối tượng – Thuộc tính Color
Công dụng
Thuộc tính Color dùng để LẤY hoặc GÁN màu cho một đối tượng.
Cú pháp
Object.Color = ColorName/ColorIndex
Giải thích
Tham số Giải thích
Object ối tượng hình học được thay đổi màu
ColorName/ColorIndex Tên màu hoặc chỉ số của màu cần gán cho Layer
Chỉ số màu là các số nguyên nằm trong khoảng từ đến 256.Trong AutoCad có 9 màu được
định nghĩa bằng hằng số màu acColor.Chúng ta có thể dùng chỉ số màu hoặc hằng số màu đều
được.
Bảng tương ứng giữa hằng số màu và chỉ số màu
Hằng số màu Chỉ số màu Ý nghĩa
acByBlock 0 ByBlock
acRed 1 Red
acYellow 2 Yellow
acGreen 3 Green
acCyan 4 Cyan
acBlue 5 Blue
acMagenta 6 Magenta
acWhite 7 White or Black phụ thuộc vào màu nền
acByLayer 256 ByLayer
Designing Team-Engineering Department Đinh Văn Tráng
Basic VBA for AutoCad Page 94
Ví dụ
Trong ví dụ này sẽ yêu cầu người dùng chọn các đối tượng trên màn hình bản vẽ, sau đó sẽ
đổi màu các đối tượng này thành màu đỏ.
Ví dụ
Trong ví dụ này sẽ tạo các đường tròn với các bán kính khác nhau đồng thời các đường tròn
đó sẽ được gán màu từ 0 đến 256
Designing Team-Engineering Department Đinh Văn Tráng
Basic VBA for AutoCad Page 95
9.10. Thay đổi Layer cho đối tượng – Thuộc tính Layer
Công dụng
Sử dụng thuộc tính Layer để LẤY hoặc GÁN Layer cho một đối tượng
Cú pháp
Object.Layer = strLayerName
Giải thích
Tham số Giải thích
Object ối tượng hình học sẽ đuợc gán Layer
strLayerName ểu String – Tên Layer gán cho đối tượng
Ví dụ 11
Designing Team-Engineering Department Đinh Văn Tráng
Basic VBA for AutoCad Page 96
9.11. Thay đổi kiểu đường cho đối tượng – Thuộc tính LineType
Công dụng
Thuộc tính này được sử dụng để thay đổi kiểu hiển thị NÉT VẼ của các đối tượng hình học
trên màn hình
Cú pháp
Object.Linetype = strLineTypeName
Giải thích
Tham số Giải thích
Object Đối tượng hình học sẽ được thay đổi LineType
strLineTypeName Kiểu String –Tên kiểu đường cần gán cho đối tượng
Chú ý
Khi một bản vẽ mới được tạo thì chỉ có 3 kiểu đường là ByBlock, ByLayer, Continuous là
mặc định có sẵn.Do đó, ngoài 3 kiểu đường này để sử dụng một kiểu đường nào đó ta cần
NẠP kiểu đường đó vào trong bản vẽ và kiểu đường đó phải tồn tại trong file “Acad.lin”.
Để tải một kiểu đường vào trong bản vẽ chúng ta sử dụng phương thức Load có trong tập đối
tượng LineTypes.
Cú pháp:
Thisdrawing.LineTypes.Load LineTypeName,”acad.lin”
Giải thích :
Tham số Giải thích
strLineTypeName Kiểu String - Tên kiểu đường cần gán cho Layer.
Designing Team-Engineering Department Đinh Văn Tráng
Basic VBA for AutoCad Page 97
Một số kiểu đường thông dụng
STT LineTypeName
01 Continuous
02 Center
03 Center2
04 DashDot
05 Dashdot2
06 Hidden
07 Hidden2
08 Phantom
09 PhanTom2
Ví dụ
Trong ví dụ này sẽ yêu cầu người dùng chọn đối tượng trên màn hình , sau đó đổi kiểu đường
của các đối tượng thành “Phantom”
Designing Team-Engineering Department Đinh Văn Tráng
Basic VBA for AutoCad Page 98
9.12. Thay đổi bề rộng nét vẽ của đối tượng – Thuộc tính LineWeight
Công dụng
Thuộc tính này dùng để thay đổi bề rộng nét khi in của các đối tượng hình học
Cú pháp
Object.Lineweight = acLineweight
Giải thích
Tham số Giải thích
Object Đối tượng hình học được gán thuộc tính LineWeight
acLineWeight Hằng số thể hiện bề rộng của nét (Xem bảng hằng số acLineWeight)
Bảng giá trị hằng số acLineWeight
acLineWeight Giá trị (mm) acLineWeight Giá trị(mm)
acLnWtByLayer ByLayer acLnWt050 0.50
acLnWtByBlock ByBlock acLnWt053 0.53
acLnWtByLwDefault Mặc định acLnWt060 0.60
acLnWt000 0.00 acLnWt070 0.70
acLnWt005 0.05 acLnWt080 0.80
acLnWt009 0.09 acLnWt090 0.90
acLnWt013 0.13 acLnWt100 1.00
acLnWt015 0.15 acLnWt106 1.06
acLnWt018 0.18 acLnWt120 1.20
acLnWt020 0.20 acLnWt140 1.40
acLnWt025 0.25 acLnWt158 1.58
acLnWt030 0.30 acLnWt200 2.00
acLnWt035 0.35 acLnWt211 2.11
acLnWt040 0.40
Designing Team-Engineering Department Đinh Văn Tráng
Basic VBA for AutoCad Page 99
Chú ý
Khi một đối tượng hình học mới được tạo ra thì thuộc tính Lineweight sẽ là
acLnWtByLayer.Nếu không được gán một giá trị nét in cụ thể thì giá trị Lineweight sẽ được
lấy bằng chiều dày mặc định (acLnWtDefault) của Autocad.Giá trị acLnWtDefault được
thiết lập thông qua biến hệ thống LWDEFAULT (Thông thường giá trị này là 0,25mm)
Ví dụ
Trong ví dụ này sẽ tạo ra một đường tròn, sau đó sẽ gán LineWeight cho nó.
Designing Team-Engineering Department Đinh Văn Tráng
Basic VBA for AutoCad Page 100
Chương 10
LÀM VIỆC VỚI ĐỐI TƯỢNG LAYER
Nội dung chuyên đề :
- Duyệt qua tập đối tượng Layer
- Khai báo và khởi tạo một Layer mới – Phương thức Add
- Đổi tên Layer – Thuộc tính Name
- Thiết lập một Layer hiện hành
- Gán màu cho một Layer – Thuộc tính Color
- Gán kiểu đường cho Layer – Thuộc tính LineType
- Gán bề rộng nét cho Layer – Thuộc tính LineWeight
Designing Team-Engineering Department Đinh Văn Tráng
Basic VBA for AutoCad Page 101
10.1. Duyệt qua tập đối tượng Layers
Mọi Layer đều nằm trong tập đối tượng Layers.Vì thế ta có thể duyệt tập đối tượng Layers để
tìm các Layer có trong bản vẽ.
Chúng ta sử dụng cấu trúc “For Each…Next” để duyệt qua tất cả các Layer có trong bản vẽ.
Ví dụ
Ví dụ sau sẽ duyệt qua tập đối tượng Layers và hiện tên tất cả các Layer có trong bản vẽ.
10.2. Khai báo và khởi tạo một Layer mới – Phương thức Add
Quy định tên Layer
Tên Layer tối đa là 31 ký tự bao gồm các chữ cái, số, các ký tự đặc biệt NHƯNG không có
dấu cách, nên đặt tên Layer sao cho ý nghĩa và dễ nhớ.
Trong mỗi bản vẽ thì Layer 0 là Layer mặc định và người dùng không thể xóa Layer này.
Để tạo một Layer mới ta sử dụng phương thức Add có trong tập đối tượng Layers
Cú pháp
Set LayerObj = Thisdrawing.Layers.Add (LayerName)
Giải thích
Tham số Giải thích
LayerObj Kiểu AcadLayer – Đây là biến sẽ chứa Layer được tạo ra.
LayerName Kiểu String – Tên của Layer được tạo
Designing Team-Engineering Department Đinh Văn Tráng
Basic VBA for AutoCad Page 102
Ví dụ
Ví dụ này sẽ khai báo và khởi tạo một Layer có tên do người dùng nhập vào.Nếu Layer này
đã tồn tại thì sẽ tự động thoát khỏi thủ tục.
10.3. Đổi tên của Layer – Thuộc tính Name
Ví dụ
Designing Team-Engineering Department Đinh Văn Tráng
Basic VBA for AutoCad Page 103
10.4. Thiết lập một Layer hiện hành
Quá trình vẽ luôn thực hiện trên lớp hiện hành.Tất cả các đối tượng tạo mới đều được đặt trên
Layer hiện hành này và nó sẽ sử dụng kiểu màu, kiểu đường,bề rộng đường nét của Layer hiện
hành đó.
Chú ý: Không thể thiết lập chế độ hiện hành cho một lớp đã bị đóng băng (Freeze)
Để thiết lập chế độ hiện hành cho một Layer ta sử dụng thuộc tính ActiveLayer của đối tượng
Thisdrawing.
Cú pháp
Thisdrawing.ActiveLayer = LayerObj
Ví dụ
Ví dụ sau sẽ tạo một Layer có tên “Layer_1”, sau đó sẽ thiết lập Layer này thành hiện hành.
10.5. Gán màu cho một Layer – Thuộc tính Color
Để dễ dàng quản lý các đối tượng trong bản vẽ người dùng nên thiết lập màu cho các
Layer.Để gán màu cho một Layer ta sử dụng thuộc tính Color có trong đối tượng LayerObj.
Cú pháp
LayerObj.Color = ColorName/ColorIndex
Designing Team-Engineering Department Đinh Văn Tráng
Basic VBA for AutoCad Page 104
Giải thích
Tham số Giải thích
LayerObj Đối tượng Layer muốn gán màu
ColorName/ColorIndex Tên màu hoặc chỉ số của màu cần gán cho Layer
Chỉ số màu là các số nguyên nằm trong khoảng từ đến 256.Trong AutoCad có 9 màu được
định nghĩa bằng hằng số màu acColor.Chúng ta có thể dùng chỉ số màu hoặc hằng số màu đều
được.
Bảng tương ứng giữa Hằng số màu và chỉ số màu
Hằng số màu Chỉ số màu Ý nghĩa
acByBlock 0 ByBlock
acRed 1 Red
acYellow 2 Yellow
acGreen 3 Green
acCyan 4 Cyan
acBlue 5 Blue
acMagenta 6 Magenta
acWhite 7 White hay Black phụ thuộc vào màu nền
acBylayer 256 Bylayer
Designing Team-Engineering Department Đinh Văn Tráng
Basic VBA for AutoCad Page 105
Ví dụ
Ví dụ sau sẽ tạo một Layer có tên “ChangeColor”, sau đó sẽ gán màu vàng cho Layer này và
thiết lập Layer này thành Layer hiện hành.
10.6. Gán kiểu đường cho một Layer – Thuộc tính LineType
Kiểu đường là sự lặp lại của mẫu nét đứt, điểm, khoảng trống mục đích là thể hiện thông tin
một cách trực quan.Tất cả kiểu đường trong Autocad được đặt trong một file có tên
“Acad.lin”.
Để gán kiểu đường cho một Layer thì ta sử dụng thuộc tính LineType có trong đối tượng
LayerObj.
Cú pháp
LayerObj.LineType = LineTypeName
Giải thích
Tham số Giải thích
LayerObj Đối tượng Layer muốn gán kiểu đường
LineTypeName Kiểu String - Tên kiểu đường cần gán cho Layer.
Designing Team-Engineering Department Đinh Văn Tráng
Basic VBA for AutoCad Page 106
STT Tên kiểu đường thông dụng
01 Continuous
02 Center
03 Center2
04 DashDot
05 Dashdot2
06 Hidden
07 Hidden2
08 Phantom
09 PhanTom2
Chú ý
Khi một bản vẽ mới được tạo thì chỉ có 3 kiểu đường là ByBlock, ByLayer, Continuous là
mặc định có sẵn.Do đó, ngoài 3 kiểu đường này để sử dụng một kiểu đường nào đó ta cần
NẠP kiểu đường đó vào trong bản vẽ và kiểu đường đó phải tồn tại trong file “Acad.lin”.
Để tải một kiểu đường vào trong bản vẽ chúng ta sử dụng phương thức Load có trong tập đối
tượng LineTypes.
Cú pháp
Thisdrawing.LineTypes.Load LineTypeName,”acad.lin”
Giải thích
Tham số Giải thích
LineTypeName Kiểu String - Tên kiểu đường cần gán cho Layer.
Designing Team-Engineering Department Đinh Văn Tráng
Basic VBA for AutoCad Page 107
Ví dụ
Ví dụ này sẽ tạo một Layer có tên “SetLineType”, sau đó sẽ Load kiểu đường “Phantom”
trong tập “Acad.lin” và gán cho Layer này.Layer này sẽ được dùng làm hiện hành.
10.7. Gán LineWeight cho một Layer – Thuộc tính LineWeight
Chúng ta thường “In theo màu” nghĩa là bề rộng của nét in sẽ được thiết lập trong bảng “Plot
Style Table”, lúc này chúng ta không quan tâm đến bề rộng được thiết lập cho các Layer.
Khi “In theo Layer” chúng ta mới quan tâm đến việc thiết lập bề rộng nét cho các Layer.Tùy
thuộc vào cách thể hiện của mỗi người mà bề rộng nét của mỗi Layer sẽ được thiết lập khác
nhau.
Để thay đổi bề rộng nét của một Layer ta sử dụng thuộc tính Lineweight có trong đối tượng
LayerObj.
Cú pháp
LayerObj.Lineweight = acLineweight
Designing Team-Engineering Department Đinh Văn Tráng
Basic VBA for AutoCad Page 108
Bảng hằng số acLineweight
acLineWeight Giá trị (mm) acLineWeight Giá trị(mm)
acLnWtByLayer ByLayer acLnWt050 0.50
acLnWtByBlock ByBlock acLnWt053 0.53
acLnWtByLwDefault Mặc định acLnWt060 0.60
acLnWt000 0.00 acLnWt070 0.70
acLnWt005 0.05 acLnWt080 0.80
acLnWt009 0.09 acLnWt090 0.90
acLnWt013 0.13 acLnWt100 1.00
acLnWt015 0.15 acLnWt106 1.06
acLnWt018 0.18 acLnWt120 1.20
acLnWt020 0.20 acLnWt140 1.40
acLnWt025 0.25 acLnWt158 1.58
acLnWt030 0.30 acLnWt200 2.00
acLnWt035 0.35 acLnWt211 2.11
acLnWt040 0.40
Chú ý
Khi một đối tượng hình học mới được tạo ra thì thuộc tính Lineweight sẽ là
acLnWtByLayer.Nếu không được gán một giá trị nét in cụ thể thì giá trị Lineweight sẽ được
lấy bằng chiều dày mặc định (acLnWtDefault) của Autocad.Giá trị acLnWtDefault được
thiết lập thông qua biến hệ thống LWDEFAULT.Thông thường giá trị này là 0,25mm.
Designing Team-Engineering Department Đinh Văn Tráng
Basic VBA for AutoCad Page 109
Ví dụ
Ví dụ này sẽ thiết lập một Layer có tên “SetLineWeight”, sau đó Layer này sẽ được gán màu
đỏ, kiểu đường là “Center”, chiều dày đường nét là 0,15mm.
10.8. Một số thuộc tính khác của đối tượng Layer
10.8.1. Bật, Tắt Layer – Thuộc tính LayOn
Các đối tượng nằm trên Layer đã tắt sẽ không được hiển thị hay in ra.Để bật hoặc tắt sự
hiển thị của Layer ta sử dụng thuộc tính LayOn có trong đối tượng LayerObj.Ứng với giá
trị True Layer được Bật, giá trị False Layer bị Tắt.
Cú pháp
LayerObj.LayOn = True/False
Ví dụ
Trong ví dụ này sẽ tạo ra một Layer có tên “Test_Layon” đồng thời sẽ tắt Layer này.
Designing Team-Engineering Department Đinh Văn Tráng
Basic VBA for AutoCad Page 110
10.8.2. Đông cứng, Làm tan Layer – Thuộc tính Freeze, UnFreeze
Các đối tượng nằm trên Layer bị đóng băng (Freeze) sẽ không được hiển thị hay in ra.Để
đông cứng (Freeze) hay làm tan (UnFreeze) một Layer chúng ta sử dụng thuộc tính Freeze
trong đối tượng LayerObj. Giá trị True Layer bị Đóng Băng, giá trị False Layer được Làm
Tan
Cú pháp
LayerObj.Freeze = True/False
Ví dụ
10.8.3. Khóa, Mở Khóa Layer – Thuộc tính Lock, UnLock
Khi một Layer bị khóa (Lock) thì người dùng vẫn có thể quan sát được các đối tượng trên
lớp đó nhưng không thể hiệu chỉnh được chúng.
Để khóa (Lock) hay mở khóa (UnLock) các Layer ta sử dụng thuộc tính Lock có trong đối
tượng LayerObj. Giá trị True Layer bị Khóa, giá trị False Layer được Mở Khóa.
Cú pháp
LayerObj.Lock = True/False
Designing Team-Engineering Department Đinh Văn Tráng
Basic VBA for AutoCad Page 111
Ví dụ
Trong ví dụ này sẽ tạo ra một Layer có tên “Test_Lock” đồng thời khóa Layer này.
10.8.4. Xóa Layer – Thuộc tính Delete
Layer có thể được xóa bất kỳ lúc nào trong khi vẽ nhưng không thể xóa các Layer khi nó
đang hiện hành, đang chứa đối tượng hoặc là Layer 0, DefPoints.
Để xóa Layer ta sử dụng thuộc tính Delete trong đối tượng LayerObj.
Cú Pháp
LayerObj.Delete
Ví dụ
Ví dụ này sẽ Delete một Layer có tên do nguời dùng nhập vào
Designing Team-Engineering Department Đinh Văn Tráng
Basic VBA for AutoCad Page 112
Chương 11
LÀM VIỆC VỚI ĐỐI TƯỢNG BLOCK
Nội dung chương
- Cách khai báo và khởi tạo một Block
- Cách chèn một Block có sẵn vào trong bản vẽ
- Đổi tên một Block
- Xóa một Block có trong bản vẽ
- Phá vỡ một Block
- Làm việc với Block có chứa các thuộc tính
- Làm việc với bản vẽ tham khảo ngoài
Block là một đối tượng được tạo từ nhiều đối tượng cơ bản trong bản vẽ nhưng nó được coi như
một đối tượng đơn.Chúng ta có thể chèn Block trong cùng một bản vẽ hoặc các bản vẽ khác
nhau.
Designing Team-Engineering Department Đinh Văn Tráng
Basic VBA for AutoCad Page 113
11.1. Duyệt qua tập đối tượng Block
Chúng ta sử dụng cấu trúc lặp “For Each..Next” để duyệt qua tất cả các Block có trong tập
đối tượng Block.
Ví dụ
Ví dụ này sẽ duyệt qua tất cả các Block có trong bản vẽ và hiện tên của các Block đó
11.2. Khai báo và khởi tạo một Block
Để khởi tạo một Block trong VBA chúng ta sử dụng phương thức Add có trong tập đối tượng
Blocks.Một Block sau khi được tạo ra có thể được chèn ở ModelSpace hoặc PaperSpace
Cú pháp
Set BlockObj = Thisdrawing.Blocks.Add (InsertPoint, BlockName)
Giải thích
Tham số Giải thích
BlockObj Kiểu acadBlock – Biến chứa đối tượng Block được tạo
InsertPoint Kiểu Variant hoặc mảng 3 phần từ kiểu Double – là tâm chèn của
Block.
BlockName Kiểu String – Tên của Block được tạo (Chú ý tên của Block không
đuợc dài quá 31 ký tự và giữa chúng không có khoảng trắng)
Designing Team-Engineering Department Đinh Văn Tráng
Basic VBA for AutoCad Page 114
Ví dụ
Ví dụ này sẽ khai báo và tạo một Block có tên “Section”, đồng thời tạo một đường tròn và
đường thẳng sau đó thêm đường tròn và đường thẳng này vào trong Block đó.
11.3. Đổi tên Block – Thuộc tính NAME
Để đổi tên một Block chúng ta sử dụng thuộc tính Name của Block để đổi sang tên mới.
Cú pháp
BlockObj.Name = NewName
Giải thích
Tham số Giải thích
BlockObj Kiểu acadBlock – Đối tượng Block cần đổi tên
NewName Kiểu String – Tên mới của Block
Designing Team-Engineering Department Đinh Văn Tráng
Basic VBA for AutoCad Page 115
Ví dụ
Ví dụ này sẽ yêu cầu người dùng nhập vào tên Block cần đổi và tên mới của Block.Sau đó
sẽ sử dụng thuộc tính Name để Rename Block này.
11.4. Xóa một Block – Thuộc tinh Delete
Để xóa một Block chúng ta sử dụng thuộc tính Delete của Block
Cú pháp
BlockObj.Delete
Designing Team-Engineering Department Đinh Văn Tráng
Basic VBA for AutoCad Page 116
Ví dụ
Ví dụ này sẽ Delete một Block có tên do người dùng nhập vào.
Chú ý
- Nếu một Block tạo theo phương thức Add được gọi là “Block Definition” và Block đó nếu
được Insert vào trong bản vẽ thì trở thành “Block Reference”.
- Các “Block Reference” đều tham khảo dữ liệu đến “Block Definition” do đó trong ví dụ
trên khi khai báo “Dim ObjBlock as acadBlock” thì đối tượng ObjBlock sẽ là “Block
Definition”.Chúng ta không thể Delete một “Block Definition” khi trong bản vẽ vẫn còn
tồn tại “Block Reference” (Cũng giống như không thể Delete một Layer khi nó vẫn còn
được dùng bởi một đối tượng khác).Mặt khác, khi Delete một “Block Reference” nếu
chúng ta không sử dụng lệnh “Purge” thì hiển nhiên đối tượng “Block Definition” vẫn còn
tồn tại trong bản vẽ.
Ví dụ
Ở ví dụ này sẽ yêu cầu người dùng nhập vào một tên Block Reference sau đó sử dụng bộ
lọc để lọc ra các Block có tên do người dùng nhập vào, tiếp đó sẽ Delete các Block này
khỏi bản vẽ.
Designing Team-Engineering Department Đinh Văn Tráng
Basic VBA for AutoCad Page 117
11.5. Chèn Block vào trong bản vẽ - Phương thức InsertBlock
Chúng ta sử dụng phương thức InsertBlock để chèn một “Block Definition” vào trong
ModelSpace, PaperSpace hoặc vào một Block khác, tuy nhiên không thể chèn vào chính bản
thân nó được.
Đối tượng trả về của phương thức InsertBlock là một “Block Reference”.
Cú pháp
Set BlockReferenceObj = Thisdrawing.SPACE.InsertBlock (InsertPoint, _
BlockName, Xscale, Yscale, Zscale, RotationAngle)
Designing Team-Engineering Department Đinh Văn Tráng
Basic VBA for AutoCad Page 118
Giải thích
Tham số Giải thích
BlockReferenceObj Kiểu acadBlockReference – Đối tượng trả về của phương thức
InsertBlock
SPACE Không gian chứa đối tượng BlockReference (ModelSpace,
PaperSpace hoặc Block)
InsertPoint Kiểu Variant hoặc mảng 3 phần tử kiểu Double – chứa tọa độ
điểm chèn BlockReference
BlockName Kiểu String – Tên Block cần chèn hoặc tên đầy đủ bao gồm
đường dẫn chứa bản vẽ được chèn.
Xscale Kiểu Double – Hệ số Scale theo phương X
Yscale Kiểu Double – Hệ số Scale theo phương Y
Zscale Kiểu Double – Hệ số Scale theo phương Z
RotationAngle Kiểu Double – Góc xoay khi chèn BlockReference (đơn vị:
Radian)
Ví dụ
Ví dụ này sẽ tạo một “Block Definition” có tên “Ex_6” chứa đối tượng Circle.Sau đó sẽ
chèn “Block Definition” này vào ModelSpace, điểm chèn do người dùng nhập vào.
Designing Team-Engineering Department Đinh Văn Tráng
Basic VBA for AutoCad Page 119
Ví dụ
Trong ví dụ này sẽ yêu cầu người dùng nhập đường dẫn chứa bản vẽ cần chèn vào (bao gồm
cả phần mở rộng “.dwg”).Đồng thời các thông số như InsertPoint,Xscal, Yscale, Zscale,
RotationAngle cũng do người dùng nhập vào.
Designing Team-Engineering Department Đinh Văn Tráng
Basic VBA for AutoCad Page 120
11.6. Phá vỡ một Block – Phương thức Explode
Với đối tượng “Block Reference” chúng ta sử dụng phương thức Explode để phá vỡ
chúng.Đối tượng trả về của phương thức này là một mảng (kiểu Variant) chứa các đối tượng
đã cấu thành nên nó.
Cú pháp
VarArray = BlockReferenceObj.Explode
Designing Team-Engineering Department Đinh Văn Tráng
Basic VBA for AutoCad Page 121
Giải thích
Tham số Giải thích
VarArray Kiểu Variant – Mảng chứa các đối tượng của
BlockReferenceObj bị phá vỡ.
BlockReferenceObj Kiểu acadBlockReference – Đối tượng Block sẽ bị phá vỡ
Chú ý
Phương thức Explode thực chất tạo ra một bản sao của đối tượng gốc, sau đó thực hiện việc
phá vỡ Block trên đối tượng này.Đối tượng gốc vẫn còn giữ nguyên.Nếu không muốn giữ
đối tượng này chúng ta có thể xóa nó ra khỏi bản vẽ bằng phương thức Delete.
Ví dụ
Ví dụ này sẽ yêu cầu người dùng chọn một Block trên màn hình bản vẽ và một điểm để di
chuyển kết quả của phương thức Explode.
Designing Team-Engineering Department Đinh Văn Tráng
Basic VBA for AutoCad Page 122
11.7. Block chứa thuộc tính – Attributes
Thuộc tính của Block là các chuỗi Text đi kèm với nó để miêu tả Block.Mỗi thuộc tính gồm
có Tag - Tên gọi của thuộc tính , Value – Giá trị của thuộc tính, Prompt – Dòng thông báo khi
người dùng nhập giá trị cho thuộc tính.Một Block có thể có nhiều thuộc tính.
11.7.1. Tạo thuộc tính cho Block –Phương thức AddAttribute
Cú pháp
Set AttributeObject = SPACE.AddAttribute (Height, Mode, Prompt, _
InsertionPoint, Tag, Value)
Giải thích
Tham số Giải thích
AttributeObject Kiểu acadAttribute – Đối tượng thuộc tính
SPACE Nơi chứa đối tượng thuộc tính (ModelSpace, PaperSpace hoặc
Block)
Height Kiểu Double – Chiều cao chữ của thuộc tính
Mode Kiểu Long - Thông số điều khiển thuộc tính khi được chèn vào
trong bản vẽ.
Prompt Kiểu String – Chuỗi thông báo khi Block Attribute được chèn vào
bản vẽ.
InsertionPoint Kiểu Variant hoặc Double – Mảng 3 phần tử chứa tọa độ của thuộc
tính khi được chèn vào bản vẽ hay Block.
Tag Kiểu String – Tên của thuộc tính, có thể chứa bất kỳ ký tự nào
nhưng không chứa khoảng trắng.
Value Kiểu String – Giá trị mặc định cho thuộc tính
Designing Team-Engineering Department Đinh Văn Tráng
Basic VBA for AutoCad Page 123
Giá trị của tham số Mode
Tham số Giá trị Giải thích
acAttributeModeNormal 0 Giá trị mặc định, với giá trị này không một giá
trị nào còn lại của tham số Mode được gán.
acAttributeModeInvisible 1 Giá trị thuộc tính sẽ không được hiện lên khi
Block được chèn vào.
acAttributeModeConstant 2 Giá trị của thuộc tính sẽ không thể Edit khi
được chèn vào bản vẽ
acAttributeModeVerify 4 Khi Block được chèn vào thì giá trị của thuộc
tính được nhập tại dòng nhắc.
acAttributeModePreset 8
Block được chèn vào với giá trị mặc định của
thuộc tính, người dùng chỉ có thể Edit được giá
trị đó sau khi Block được chèn vào bản vẽ.
Ví dụ
Ví dụ này sẽ tạo một Block Attribute, trong đó các thuộc tính mô tả các giá trị của tham
số Mode.
Designing Team-Engineering Department Đinh Văn Tráng
Basic VBA for AutoCad Page 125
11.7.2. Thao tác với thuộc tính – Phương thức GetAttributes
Phương thức GetAttributes của một “Block Reference” được dùng để lấy các giá trị thuộc
tính có trong một “Block Reference”.Đối tượng trả về của phương thức này là một mảng
chứa các thuộc tính của Block (Riêng với tham số Mode khác acAttributeModeConstant thì
giá trị thuộc tính không lấy đuợc).
Để xác định xem một “Block Reference” có chứa thuộc tính hay không chúng ta sử dụng
thuộc tính HasAttributes có trong đối tượng “Block Reference”.Nếu kết quả là TRUE thì
Block có thuộc tính, nếu là FALSE thì Block không chứa thuộc tính.
Cú pháp
VarAttributes = BlockReferenceObj.GetAttributes
Giải thích
Tham số Giải thích
VarAttributes Kiểu Variant – Mảng chứa các thuộc tính của “Block
Reference”
BlockReferenceObj Đối tượng “Block Reference”
Designing Team-Engineering Department Đinh Văn Tráng
Basic VBA for AutoCad Page 126
Ví dụ
Ví dụ này sẽ yêu cầu người dùng chọn một đối tượng trên màn hình bản vẽ, kiểm tra xem
đó có phải là Block thuộc tính hay không nếu đúng sẽ hiển thị tên và giá trị của các thuộc
tính cho người dùng.
Ví dụ
Trong ví dụ này sẽ thay đổi các giá trị của thuộc tính trong “Block Reference” có tên
“TestAttribute” (Sử dụng ví dụ trong phương thức AddAttribute để tạo Block này)
Designing Team-Engineering Department Đinh Văn Tráng
Basic VBA for AutoCad Page 127
11.8. Làm việc với bản vẽ tham khảo ngoài – External References
Bản vẽ tham khảo ngoài có rất nhiều ứng dụng đặc biệt khi làm việc theo nhóm.
11.8.1. Gắn một tham chiếu ngoài vào bản vẽ – Phương thức AddExternalReference
Cú pháp
Set ExternalReferenceObject = Thisdrawing.SPACE.AttachExternalReference _
(FileName, BlockName, InsertionPoint, Xscale, Yscale, Zscale, _
RotationAngle, Overlay)
Designing Team-Engineering Department Đinh Văn Tráng
Basic VBA for AutoCad Page 128
Giải thích
Tham số Giải thích
ExternalReferenceObject Kiểu AcadExternalReference – Biến chứa đối tượng trả về của
phương thức AttachExternalReference
SPACE ModelSpace hoặc PaperSpace
FileName Kiểu String – Đường dẫn tới bản vẽ tham khảo ngoài (bao
gồm cả phần mở rộng “dwg”)
BlockName Kiểu String – Tên đặt cho bản vẽ tham khảo ngoài khi được
chèn vào trong bản vẽ
InsertionPoint Kiểu Variant – Mảng 3 phần tử kiểu Double chứa tọa độ điểm
chèn của bản vẽ tham khảo ngoài
Xscale Kiểu Double – Hệ số Scale theo phương X
Yscale Kiểu Double – Hệ số Scale theo phương Y
Zscale Kiểu Double – Hệ số Scale theo phương Z
RotationAngle Kiểu Double – Góc quay của bản vẽ tham khảo ngoài khi
chèn vào bản vẽ (Đơn vị : Radians)
Overlay
Kiểu Boolean – Điều khiển bản vẽ tham khảo ngoài khi được
gán vào bản vẽ.
TRUE : Bản vẽ tham khảo ngoài sẽ không được hiển thị
khi bản vẽ “được gán tham khảo” này trở thành bản vẽ tham
khảo của bản vẽ khác.
FALSE : Bản vẽ tham khảo ngoài sẽ được hiển thị khi bản
vẽ “được gán tham khảo” này trở thành bản vẽ tham khảo
của bản vẽ khác.
Designing Team-Engineering Department Đinh Văn Tráng
Basic VBA for AutoCad Page 130
11.8.2. Gỡ bỏ tham chiếu ngoài ra khỏi bản vẽ - Phương thức Detach
Chúng ta có thể gỡ bỏ tham chiếu ngoài bằng phương thức Detach.Khi gỡ bỏ tham chiếu
ngoài tất cả các đối tượng ràng buộc với tham chiếu ngoài như LineTypes, TextStyles,
DimStyles, Layers… cũng sẽ bị gỡ bỏ.
Ví dụ
11.8.3. Tải lại tham chiếu ngoài – Phương thức Reload
Nếu bản vẽ tham chiếu ngoài có sự thay đổi và việc cập nhật lại những thay đổi đó trong
bản vẽ “được gán tham khảo” là một sự cần thiết.Để cập nhật lại những thay đổi này
chúng ta sử dụng phương thức Reload.
Nếu bản vẽ tham khảo ngoài bị loại bỏ (Bằng phương thức UnLoad) thì có thể được tải lại
bất kỳ lúc nào bằng phương thức Reload.
Designing Team-Engineering Department Đinh Văn Tráng
Basic VBA for AutoCad Page 131
Ví dụ
11.8.4. Loại bỏ tham chiếu ngoài ra khỏi bản vẽ - Phương thức Unload
Sử dụng phương thức Unload để loại bỏ một tham khảo ngoài ra khỏi bản vẽ.Khi loại bỏ
một tham chiếu ngoài thì tốc độ làm việc của AutoCad sẽ được tăng cường do không phải
đọc và hiển thị các thông tin hình học hay các ký hiệu không cần thiết.Các đối tượng hình
học và các thông tin liên quan đến tham khảo ngoài sẽ không được thể hiện trên bản vẽ hiện
tại cho đến khi tham khảo ngoài được tải lại.
Chú ý : Cần phân biệt sự khác nhau giữa phương thức Detach và Unload
Phương thức Unload : Chỉ loại bỏ tạm thời tham chiếu ngoài ra khỏi bản vẽ và
chúng ta có thể tải lại tham chiếu ngoài này bất cứ khi nào bằng phương thức Reload.
Phương thức Detach : Sẽ loại bỏ tham hoàn toàn tham chiếu ngoài ra khỏi bản vẽ và
chỉ có thể sử dụng phương thức AddExternalReference để gắn lại tham chiếu ngoài.
Designing Team-Engineering Department Đinh Văn Tráng
Basic VBA for AutoCad Page 132
11.8.5. Ràng buộc tham chiếu ngoài – Phương thức Bind
Khi sử dụng phương thức Bind sẽ chuyển tham chiếu ngoài trở thành một “Block
Refrerence” của bản vẽ.Lúc này bản vẽ “được gán tham khảo” sẽ không được cập nhật nếu
bản vẽ tham chiếu bị thay đổi.Quá trình này sẽ liên kết toàn bộ cơ sở dữ liệu trong bản vẽ
tham khảo (bao gồm cả bảng ký hiệu) với bản vẽ hiện hành.Bảng ký hiệu là các đối tượng
phi hình học, ví dụ như khối, kiểu kích thước, lớp, kiểu chữ...
Phương thức Bind chỉ có một tham số là PrefixName. Nếu tham số này được
gán giá trị TRUE thì tên trong bảng ký hiệu của bản vẽ tham chiếu ngoài sẽ được
thêm tiền tố<tên khối>$x$ trong bản vẽ hiện tại, trong đó x : là sốnguyên bất kỳ
được tự động tăng để tránh ghi đè lên định nghĩa khối đã có. Nếu tham số này nhận
giá trị FALSE thì tên trong bảng ký hiệu sẽ được ghép chung vào bản vẽ hiện tại mà
không có tiền tố. Nếu có các tên trùng nhau thì AutoCAD sẽ sửdụng ký hiệu vừa
được định nghĩa trong bản vẽ.
Ví dụ
Designing Team-Engineering Department Đinh Văn Tráng
Basic VBA for AutoCad Page 133
TÀI LIỆU THAM KHẢO
1. Phát triển AutoCad bằng ActiveX & VBA – Lê Quỳnh Mai (chủ biên)
2. Cơ sở lập trình tự động hóa tính toán, thiết kế với VB & VBA trong môi trường
AutoCad – Nguyễn Hồng Thái (chủ biên)
3. Giáo trình tự động hóa thiết kế Cầu Đường
4. AutoCad 2006 VBA – A Programer’s Reference – Joe SutPhin