You are on page 1of 133

Designing Team-Engineering Department Đinh Văn Tráng

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

Basic VBA for AutoCad Page 1


Designing Team-Engineering Department Đinh Văn Tráng

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

Basic VBA for AutoCad Page 2


Designing Team-Engineering Department Đinh Văn Tráng

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

Basic VBA for AutoCad Page 3


Designing Team-Engineering Department Đinh Văn Tráng

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

Basic VBA for AutoCad Page 4


Designing Team-Engineering Department Đinh Văn Tráng

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

Basic VBA for AutoCad Page 5


Designing Team-Engineering Department Đinh Văn Tráng

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

Basic VBA for AutoCad Page 6


Designing Team-Engineering Department Đinh Văn Tráng

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

Basic VBA for AutoCad Page 7


Designing Team-Engineering Department Đinh Văn Tráng

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)

Basic VBA for AutoCad Page 8


Designing Team-Engineering Department Đinh Văn Tráng

Ý 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.

Basic VBA for AutoCad Page 9


Designing Team-Engineering Department Đinh Văn Tráng

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

Basic VBA for AutoCad Page 10


Designing Team-Engineering Department Đinh Văn Tráng

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ó.

Basic VBA for AutoCad Page 11


Designing Team-Engineering Department Đinh Văn Tráng

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.

Basic VBA for AutoCad Page 12


Designing Team-Engineering Department Đinh Văn Tráng

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

Kiểu String – Chuỗi thể hiện tên bản vẽ bao (gồm đường dẫn và
FileName
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])

Basic VBA for AutoCad Page 13


Designing Team-Engineering Department Đinh Văn Tráng

 Giải thích

Tham số Giải thích


Kiểu acadDocument – Biến chứa bản vẽ được tạo
DocObj
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
TemplateName 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


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
FileName
AutoCad (thông thường C:\Program Files\AutoCAD 20xx)
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)
FileType  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.

Basic VBA for AutoCad Page 14


Designing Team-Engineering Department Đinh Văn Tráng

 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

Tham số tùy chọn

SaveChange SaveChange =True : Lưu bản vẽ trước khi đóng

SaveChange =False : Không lưu bản vẽ trước khi đóng

Tham số tùy chọn, kiểu String –Chuỗi thể hiện tên bản vẽ (bao gồm
FileName đườ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ụ

Basic VBA for AutoCad Page 15


Designing Team-Engineering Department Đinh Văn Tráng

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

Basic VBA for AutoCad Page 16


Designing Team-Engineering Department Đinh Văn Tráng

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

Basic VBA for AutoCad Page 17


Designing Team-Engineering Department Đinh Văn Tráng

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.

Basic VBA for AutoCad Page 18


Designing Team-Engineering Department Đinh Văn Tráng

 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

Basic VBA for AutoCad Page 19


Designing Team-Engineering Department Đinh Văn Tráng

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

Basic VBA for AutoCad Page 20


Designing Team-Engineering Department Đinh Văn Tráng

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

Basic VBA for AutoCad Page 21


Designing Team-Engineering Department Đinh Văn Tráng

- 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.

Basic VBA for AutoCad Page 22


Designing Team-Engineering Department Đinh Văn Tráng

 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

Basic VBA for AutoCad Page 23


Designing Team-Engineering Department Đinh Văn Tráng

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

Basic VBA for AutoCad Page 24


Designing Team-Engineering Department Đinh Văn Tráng

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


^

Chi lấy phần dư 11 Mod 5 1


Mod

Lấy giá trị tuyệt đối Abs(-12) 12


Abs(x)

Fix(99.8) 99
Lấy phần nguyên trước dấu phẩy Fix(-99.2) -99
Fix(x)
Fix(-99.8) -99

Int(99.2) 99
Lấy phần nguyên đã được làm
Int(-99.2) -100
Int(x)
tròn
Int(-99.8) -100

Làm tròn số thực x đến m số sau


Round(2.4554,2) 2.45
Round(x,m)
dấu phẩy

Sqr(x) 2
Hàm căn bậc 2 của x Sqr(4)
(x>=0)
Hàm lượng giác ngược của
Atn(1) π/4
Atn(x)
Tan(x)

Sin(π/6) ½
Sin(x)
Các hàm lượng giác
Cos(π/3) ½
Cos(x)
của x tính bằng đơn vị Radian
Tan(π/4) 1
Tan(x)

Basic VBA for AutoCad Page 25


Designing Team-Engineering Department Đinh Văn Tráng

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

Basic VBA for AutoCad Page 26


Designing Team-Engineering Department Đinh Văn Tráng

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 2 Kết quả


Toán hạng 1

True True
True

False False
True

Null Null
True

True False
False

False False
False

Null False
False

True Null
Null

False False
Null

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

Basic VBA for AutoCad Page 27


Designing Team-Engineering Department Đinh Văn Tráng

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 2 Kết quả


Toán hạng 1

True True
True

False True
True

Null True
True

True True
False

False False
False

Null False
False

True True
Null

False Null
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

Basic VBA for AutoCad Page 28


Designing Team-Engineering Department Đinh Văn Tráng

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

Basic VBA for AutoCad Page 29


Designing Team-Engineering Department Đinh Văn Tráng

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])

Basic VBA for AutoCad Page 30


Designing Team-Engineering Department Đinh Văn Tráng

 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

Basic VBA for AutoCad Page 31


Designing Team-Engineering Department Đinh Văn Tráng

 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.

Basic VBA for AutoCad Page 32


Designing Team-Engineering Department Đinh Văn Tráng

 Giải thích

Tham số Giải thích

Kiểu Integer/Long – Tham số tùy chọn, là vị trí bắt đầu tìm


Start 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

Kiểu so sánh này phân biệt chữ hoa và chữ thường (Đây là giá trị
vbBinaryCompare
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

Basic VBA for AutoCad Page 33


Designing Team-Engineering Department Đinh Văn Tráng

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)

Tham số tùy chọn ,Kiểu Integer/Long – Là vị trí bắt đầu tìm


Start
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

Kiểu so sánh này phân biệt chữ hoa và chữ thường (Đây là giá trị
vbBinaryCompare
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

Basic VBA for AutoCad Page 34


Designing Team-Engineering Department Đinh Văn Trá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

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”

Basic VBA for AutoCad Page 35


Designing Team-Engineering Department Đinh Văn Tráng

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.

Basic VBA for AutoCad Page 36


Designing Team-Engineering Department Đinh Văn Tráng

 Giải thích

Tham số Ý Nghĩa

String Kiểu String – Chuỗi sẽ được tách

Tham số tùy chọn, kiểu String – Chuỗi chứa giá trị làm giới hạn
Delimiter
chia (Mặc định sử dụng khoảng trắng làm giới hạn chia)

Tham số tùy chọn - Số lượng chuỗi cho phép trả về.Mặc định giá trị
Limit
này sẽ trả về tất cả các chuỗi được chia.

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á


Compare
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”

Basic VBA for AutoCad Page 37


Designing Team-Engineering Department Đinh Văn Tráng

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ế.

Tham số tùy chọn, kiểu Integer/Long – Vị trí bắt đầu thay thế, chuỗi
Start
mới sẽ bắt đầu từ vị trí này.Giá trị mặc định bằng 1

Tham số tùy chọn, kiểu Integer/Long – Số lần thay thế.Giá trị mặc
Count
định là tất cả các vị trí sẽ được thay thế.

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ị


Compare
mặc định)

 vbTextCompare – Không phân biệt chữ Hoa và chữ Thường

Basic VBA for AutoCad Page 38


Designing Team-Engineering Department Đinh Văn Tráng

 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,
Kiểu String – Hai chuỗi dùng để so sánh với nhau
String_2

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ị


Compare
mặc định)

 vbTextCompare – Không phân biệt chữ Hoa và chữ Thường

Basic VBA for AutoCad Page 39


Designing Team-Engineering Department Đinh Văn Tráng

 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

Basic VBA for AutoCad Page 40


Designing Team-Engineering Department Đinh Văn Tráng

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.

Basic VBA for AutoCad Page 41


Designing Team-Engineering Department Đinh Văn Tráng

 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>.

Basic VBA for AutoCad Page 42


Designing Team-Engineering Department Đinh Văn Tráng

 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.

Basic VBA for AutoCad Page 43


Designing Team-Engineering Department Đinh Văn Tráng

 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

Basic VBA for AutoCad Page 44


Designing Team-Engineering Department Đinh Văn Tráng

 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

Basic VBA for AutoCad Page 45


Designing Team-Engineering Department Đinh Văn Tráng

 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

Basic VBA for AutoCad Page 46


Designing Team-Engineering Department Đinh Văn Tráng

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

Basic VBA for AutoCad Page 47


Designing Team-Engineering Department Đinh Văn Tráng

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

Basic VBA for AutoCad Page 48


Designing Team-Engineering Department Đinh Văn Tráng

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

Basic VBA for AutoCad Page 49


Designing Team-Engineering Department Đinh Văn Tráng

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.

Basic VBA for AutoCad Page 50


Designing Team-Engineering Department Đinh Văn Tráng

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:

Basic VBA for AutoCad Page 51


Designing Team-Engineering Department Đinh Văn Tráng

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

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
HasSpaces 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

Tham số tùy chọn kiểu String - Là chuỗi sẽ hiển thị trên dòng lệnh
Prompt
của Autocad nhắc người dùng nhập dữ liệu.

 Ví dụ

Basic VBA for AutoCad Page 52


Designing Team-Engineering Department Đinh Văn Tráng

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

Kiểu Variant – Là mảng 1 chiều 3 phần tử chứa tọa độ điểm được


PointObj nhập vào

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
Base Point
Point đến vị trí con trỏ chuột.

Tham số tùy chọn kiểu String- Là chuỗi sẽ hiển thị trên dòng lệnh
Prompt của Autocad nhắc người dùng nhập dữ liệu.

 Ví dụ

Basic VBA for AutoCad Page 53


Designing Team-Engineering Department Đinh Văn Tráng

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

Tham số tùy chọn, kiểu String– Chuỗi ký tự hiện trên dòng lệnh của
Prompt
AutoCad yêu cầu người dùng nhập dữ liệu vào

 Ví dụ

Basic VBA for AutoCad Page 54


Designing Team-Engineering Department Đinh Văn Tráng

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

Kiểu Double – Biến chứa giá trị khoảng cách do người dùng nhập
DistValue
vào.

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
Point
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.

Tham số tùy chọn,kiểu String– Là chuỗi hiện trên dòng lệnh của
Prompt
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.

Basic VBA for AutoCad Page 55


Designing Team-Engineering Department Đinh Văn Tráng

 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

Tham số tùy chọn kiểu String – Là chuỗi hiện trên dòng lệnh của
Prompt
Autocad nhắc người dùng nhập dữ liệu

Basic VBA for AutoCad Page 56


Designing Team-Engineering Department Đinh Văn Tráng

 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.

Kiểu Variant – Mảng 3 phần tử thể hiện tọa độ điểm mà người dùng
PickedPoint
kích chuột chọn đối tượng.

Tham số tùy chọn, kiểu String – Là chuỗi hiện trên dòng lệnh của
Prompt
Autocad nhắc người dùng nhập dữ liệu

Basic VBA for AutoCad Page 57


Designing Team-Engineering Department Đinh Văn Tráng

 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

Kiểu Variant – Thực chất là mảng 1 chiều 3 phần tử thể hiện tọa độ
VarPoint
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

Tham số tùy chọn kiểu String – Là chuỗi hiện trên dòng lệnh của
Prompt
Autocad nhắc người dùng nhập dữ liệu

Basic VBA for AutoCad Page 58


Designing Team-Engineering Department Đinh Văn Tráng

 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

Kiểu Integer - Giá trị tham số này bằng tổng các Bit Code tương
Bits
ứ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

Basic VBA for AutoCad Page 59


Designing Team-Engineering Department Đinh Văn Tráng

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

Giá trị PHẢI được nhập vào, không chấp nhận giá trị Null (Chỉ
1
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

Dùng cho hàm GetDistance, bit code này sẽ loại bỏ tọa độ Z của hai
64 đ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)

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
128
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

Basic VBA for AutoCad Page 60


Designing Team-Engineering Department Đinh Văn Tráng

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…

Basic VBA for AutoCad Page 61


Designing Team-Engineering Department Đinh Văn Tráng

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

Basic VBA for AutoCad Page 62


Designing Team-Engineering Department Đinh Văn Tráng

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, Kiểu Variant hoặc mảng 1 chiều 3 phần tử kiểu Double chứa tọa độ
EndPoint điểm đầu và điểm cuối của đoạn thẳng được tạo

 Ví dụ

Basic VBA for AutoCad Page 63


Designing Team-Engineering Department Đinh Văn Tráng

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

Tham số kiểu Double chứa tọa độ đỉnh của đa tuyến.Mỗi đỉnh chỉ
Points 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

Basic VBA for AutoCad Page 64


Designing Team-Engineering Department Đinh Văn Tráng

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

Kiểu Variant hoặc mảng 3 phần tử kiểu Double –Thể hiện tọa độ tâm
CenterPoint
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ụ

Basic VBA for AutoCad Page 65


Designing Team-Engineering Department Đinh Văn Tráng

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

Kiểu Variant hoặc mảng 3 phần tử kiểu Double – chứa tọa độ


CenterPoint
tâm của cung tròn

Radius Kiểu Double – Bán kính của cung tròn được tạo

Kiểu Double – Góc bắt đầu và kết thúc của cung tròn (Tính bằng
StartAngle,EndAngle 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ụ

Basic VBA for AutoCad Page 66


Designing Team-Engineering Department Đinh Văn Tráng

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ẽ

Kiểu Variant hoặc mảng 3 phần tử kiểu Double xác định điểm chèn
InsertPoint
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ụ

Basic VBA for AutoCad Page 67


Designing Team-Engineering Department Đinh Văn Tráng

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

Kiểu acadMtext – Biến chứa đối tượng MText được tạo


MtextObj
Không gian chứa đối tượng Line : ModelSpace hoặc PaperSpace
SPACE
Kiểu Variant hoặc mảng 3 phần tử kiểu Double xác định điểm chèn
InsertPoint chuỗi văn bản.

Kiểu Double – Xác định bề rộng của văn bản được hiển thị
Width
Kiểu String – Là chuỗi hiển thị trên bản vẽ
TextString

 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.

Basic VBA for AutoCad Page 68


Designing Team-Engineering Department Đinh Văn Tráng

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

Basic VBA for AutoCad Page 69


Designing Team-Engineering Department Đinh Văn Tráng

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

Kiểu acadSelectionSet – Biến chứa đối tượng SelectionSet


SelectionSetObj
được tạo

SelectionSetName Kiểu String – Chuỗi xác định tên SelectionSet được tạo

Basic VBA for AutoCad Page 70


Designing Team-Engineering Department Đinh Văn Tráng

 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.

Basic VBA for AutoCad Page 71


Designing Team-Engineering Department Đinh Văn Tráng

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


ểu acadSelectionSet – Biến chứa đối tượng SelectionSet được
SelectionSetObj tạo

ểu Variant, là mảng chứa các đối tượng được thêm vào


ArrayObj SelectionSet

 Ví dụ

Basic VBA for AutoCad Page 72


Designing Team-Engineering Department Đinh Văn Tráng

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

Kiểu acadSelectionSet – Biến chứa đối tượng SelectionSet được


SelectionSetObj
tạo

Mode Kiểu InteGer - Tham số xác định chế độ chọn đối tượng.

Tham số tùy chọn, kiểu Variant /Double - Mảng 3 phần tử chứa


Point_1 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

Tham số tùy chọn, kiểu Variant/ Double - Mảng 3 phần tử chứa tọa
Point_2 độ đ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, Tham số tùy chọn xác định bộ lọc đối tượng (Xem chi tiết tại “Bộ
FilterData 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.

Basic VBA for AutoCad Page 73


Designing Team-Engineering Department Đinh Văn Tráng

Bảng giá trị và ý nghĩa của tham số Mode

Mode Giá trị Ý nghĩa

Chọn tất cả các đối tượng nằm trong hình chữ nhật
acSelectionSetWindow 0 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

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,
acSelectionSetCrossing 1
Point_2.Hai tham số Point_1, Point_2 bắt buộc
phải được sử dụng

Chọn các đối tượng đã được chọn gần nhất.Hai


acSelectionSetPrevious 3
tham số Point_1, Point_2 được bỏ qua.

Chọn đối tượng cuối cùng được tạo ra.Hai tham số


acSelectionSetLast 4
Point_1, Point_2 được bỏ qua

Chọn tất cả các đối tượng trong bản vẽ.Hai tham số


acSelectionSetAll 5
Point_1, Point_2 được bỏ qua

 Ví dụ

Basic VBA for AutoCad Page 74


Designing Team-Engineering Department Đinh Văn Tráng

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

Kiểu acadSelectionSet – Biến chứa đối tượng SelectionSet được


SelectionSetObj
tạo ra

FilterType, Tham số tùy chọn xác định bộ lọc đối tượng (Xem chi tiết tại “Bộ
FilterData lọc đối tượng”)

 Ví dụ

Basic VBA for AutoCad Page 75


Designing Team-Engineering Department Đinh Văn Tráng

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.

Basic VBA for AutoCad Page 76


Designing Team-Engineering Department Đinh Văn Tráng

Danh sách các mã Dxf thường được sử dụng

Mã Dxf Ý nghĩa

Kiểu String – Thể hiện loại đối tượng như: Line, PolyLine, LWPolyline,
0
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

Tọa độ chính của một đối tượng như: StartPoint của Line, điểm chèn của Text,
10
CenterPoint của Circle…

Kiểu Integer – Xác định màu của đối tượng: 0=ByBlock, 1=Red,
62
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ử.

Basic VBA for AutoCad Page 77


Designing Team-Engineering Department Đinh Văn Tráng

 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”.

Giá trị Giá trị Số lượng điều


Toán tử Ý nghĩa
bắt đầu kết thúc kiện loc

Đối tượng nào thỏa mãn tất cả


AND “<And” “And>” >=1
các điều kiện lọc sẽ được chọn

Đối tượng nào thỏa mãn một


OR “<Or” “Or>” >=1
trong các điều kiện sẽ được chọn.

Đối tượng nào thỏa mãn một điều


XOR “<Xor” “Xor>” 2 kiện và không thỏa mãn điều kiện
còn lại sẽ được chọn.

Đối tượng nào không thỏa mãn


NOT “<Not” “Not>” 1
điều kiện lọc sẽ được chọn

Basic VBA for AutoCad Page 78


Designing Team-Engineering Department Đinh Văn Tráng

 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>”

Basic VBA for AutoCad Page 79


Designing Team-Engineering Department Đinh Văn Tráng

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


Kiểu acadSelectionSet – Biến chứa đối tượng SelectionSet được tạo
SelectionSetObj ra

Kiểu Variant - mảng chứa các đối tượng được thêm vào
ArrayObj
SelectionSet

Basic VBA for AutoCad Page 80


Designing Team-Engineering Department Đinh Văn Tráng

 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.

Basic VBA for AutoCad Page 81


Designing Team-Engineering Department Đinh Văn Tráng

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

Basic VBA for AutoCad Page 82


Designing Team-Engineering Department Đinh Văn Tráng

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.

Basic VBA for AutoCad Page 83


Designing Team-Engineering Department Đinh Văn Tráng

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

Basic VBA for AutoCad Page 84


Designing Team-Engineering Department Đinh Văn Tráng

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ũ)

Basic VBA for AutoCad Page 85


Designing Team-Engineering Department Đinh Văn Tráng

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

Basic VBA for AutoCad Page 86


Designing Team-Engineering Department Đinh Văn Tráng

 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

ểu Variant hoặc Double – Là mảng 3 phần tử chứa tọa độ điểm thứ


Point_1, Point_2 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.

Basic VBA for AutoCad Page 87


Designing Team-Engineering Department Đinh Văn Tráng

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

Biến chứa đối tượng trả về của phương thức Mirror – có kiểu giống
MirrorObj
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, Kiểu Variant hoặc Double – Mảng 3 phần tử chứa tọa độ của điểm
Point_2 thứ nhất và thứ 2 tạo nên trục đối xứng

Basic VBA for AutoCad Page 88


Designing Team-Engineering Department Đinh Văn Tráng

 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)

Basic VBA for AutoCad Page 89


Designing Team-Engineering Department Đinh Văn Tráng

 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

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ỏ
OffsetDistance 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

Basic VBA for AutoCad Page 90


Designing Team-Engineering Department Đinh Văn Tráng

 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”

Basic VBA for AutoCad Page 91


Designing Team-Engineering Department Đinh Văn Tráng

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
Kiểu Variant hoặc Double – Mảng 3 phần tử chứa tọa độ điểm
BasePoint
Scale, đối tượng sẽ được Scale quanh điểm này
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.
ScaleFactor
 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ụ

Basic VBA for AutoCad Page 92


Designing Team-Engineering Department Đinh Văn Tráng

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

ối tượng hình học được thay đổi màu


Object

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

Basic VBA for AutoCad Page 93


Designing Team-Engineering Department Đinh Văn Tráng

 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

Basic VBA for AutoCad Page 94


Designing Team-Engineering Department Đinh Văn Tráng

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

Basic VBA for AutoCad Page 95


Designing Team-Engineering Department Đinh Văn Tráng

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.

Basic VBA for AutoCad Page 96


Designing Team-Engineering Department Đinh Văn Tráng

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”

Basic VBA for AutoCad Page 97


Designing Team-Engineering Department Đinh Văn Tráng

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)

ByLayer acLnWt050 0.50


acLnWtByLayer
ByBlock acLnWt053 0.53
acLnWtByBlock
Mặc định acLnWt060 0.60
acLnWtByLwDefault
0.00 acLnWt070 0.70
acLnWt000
0.05 acLnWt080 0.80
acLnWt005
0.09 acLnWt090 0.90
acLnWt009
0.13 acLnWt100 1.00
acLnWt013
0.15 acLnWt106 1.06
acLnWt015
0.18 acLnWt120 1.20
acLnWt018
0.20 acLnWt140 1.40
acLnWt020
0.25 acLnWt158 1.58
acLnWt025
0.30 acLnWt200 2.00
acLnWt030
0.35 acLnWt211 2.11
acLnWt035
acLnWt040 0.40

Basic VBA for AutoCad Page 98


Designing Team-Engineering Department Đinh Văn Tráng

 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ó.

Basic VBA for AutoCad Page 99


Designing Team-Engineering Department Đinh Văn Tráng

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

Basic VBA for AutoCad Page 100


Designing Team-Engineering Department Đinh Văn Tráng

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

Basic VBA for AutoCad Page 101


Designing Team-Engineering Department Đinh Văn Tráng

 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ụ

Basic VBA for AutoCad Page 102


Designing Team-Engineering Department Đinh Văn Tráng

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

Basic VBA for AutoCad Page 103


Designing Team-Engineering Department Đinh Văn Tráng

 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

Basic VBA for AutoCad Page 104


Designing Team-Engineering Department Đinh Văn Tráng

 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.

Basic VBA for AutoCad Page 105


Designing Team-Engineering Department Đinh Văn Tráng

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.

Basic VBA for AutoCad Page 106


Designing Team-Engineering Department Đinh Văn Tráng

 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

Basic VBA for AutoCad Page 107


Designing Team-Engineering Department Đinh Văn Tráng

 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.

Basic VBA for AutoCad Page 108


Designing Team-Engineering Department Đinh Văn Tráng

 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.

Basic VBA for AutoCad Page 109


Designing Team-Engineering Department Đinh Văn Tráng

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

Basic VBA for AutoCad Page 110


Designing Team-Engineering Department Đinh Văn Tráng

 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

Basic VBA for AutoCad Page 111


Designing Team-Engineering Department Đinh Văn Tráng

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.

Basic VBA for AutoCad Page 112


Designing Team-Engineering Department Đinh Văn Tráng

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

Kiểu Variant hoặc mảng 3 phần từ kiểu Double – là tâm chèn của
InsertPoint
Block.

Kiểu String – Tên của Block được tạo (Chú ý tên của Block không
BlockName
đuợc dài quá 31 ký tự và giữa chúng không có khoảng trắng)

Basic VBA for AutoCad Page 113


Designing Team-Engineering Department Đinh Văn Tráng

 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

Basic VBA for AutoCad Page 114


Designing Team-Engineering Department Đinh Văn Tráng

 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

Basic VBA for AutoCad Page 115


Designing Team-Engineering Department Đinh Văn Tráng

 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ẽ.

Basic VBA for AutoCad Page 116


Designing Team-Engineering Department Đinh Văn Tráng

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)

Basic VBA for AutoCad Page 117


Designing Team-Engineering Department Đinh Văn Tráng

 Giải thích

Tham số Giải thích

Kiểu acadBlockReference – Đối tượng trả về của phương thức


BlockReferenceObj
InsertBlock

Không gian chứa đối tượng BlockReference (ModelSpace,


SPACE
PaperSpace hoặc Block)

Kiểu Variant hoặc mảng 3 phần tử kiểu Double – chứa tọa độ


InsertPoint
điểm chèn BlockReference

Kiểu String – Tên Block cần chèn hoặc tên đầy đủ bao gồm
BlockName
đườ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

Kiểu Double – Góc xoay khi chèn BlockReference (đơn vị:


RotationAngle
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.

Basic VBA for AutoCad Page 118


Designing Team-Engineering Department Đinh Văn Tráng

 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.

Basic VBA for AutoCad Page 119


Designing Team-Engineering Department Đinh Văn Tráng

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

Basic VBA for AutoCad Page 120


Designing Team-Engineering Department Đinh Văn Tráng

 Giải thích

Tham số Giải thích

Kiểu Variant – Mảng chứa các đối tượng của


VarArray
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.

Basic VBA for AutoCad Page 121


Designing Team-Engineering Department Đinh Văn Tráng

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

Nơi chứa đối tượng thuộc tính (ModelSpace, PaperSpace hoặc


SPACE
Block)

Height Kiểu Double – Chiều cao chữ của thuộc tính

Kiểu Long - Thông số điều khiển thuộc tính khi được chèn vào
Mode
trong bản vẽ.

Kiểu String – Chuỗi thông báo khi Block Attribute được chèn vào
Prompt
bản vẽ.

Kiểu Variant hoặc Double – Mảng 3 phần tử chứa tọa độ của thuộc
InsertionPoint
tính khi được chèn vào bản vẽ hay Block.

Kiểu String – Tên của thuộc tính, có thể chứa bất kỳ ký tự nào
Tag
nhưng không chứa khoảng trắng.

Value Kiểu String – Giá trị mặc định cho thuộc tính

Basic VBA for AutoCad Page 122


Designing Team-Engineering Department Đinh Văn Tráng

 Giá trị của tham số Mode

Tham số Giá trị Giải thích

Giá trị mặc định, với giá trị này không một giá
acAttributeModeNormal 0
trị nào còn lại của tham số Mode được gán.

Giá trị thuộc tính sẽ không được hiện lên khi


acAttributeModeInvisible 1
Block được chèn vào.

Giá trị của thuộc tính sẽ không thể Edit khi


acAttributeModeConstant 2
được chèn vào bản vẽ

Khi Block được chèn vào thì giá trị của thuộc
acAttributeModeVerify 4
tính được nhập tại dòng nhắc.

Block được chèn vào với giá trị mặc định của
acAttributeModePreset 8 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.

Basic VBA for AutoCad Page 123


Designing Team-Engineering Department Đinh Văn Tráng

Basic VBA for AutoCad Page 124


Designing Team-Engineering Department Đinh Văn Tráng

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

Kiểu Variant – Mảng chứa các thuộc tính của “Block


VarAttributes
Reference”

BlockReferenceObj Đối tượng “Block Reference”

Basic VBA for AutoCad Page 125


Designing Team-Engineering Department Đinh Văn Tráng

 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)

Basic VBA for AutoCad Page 126


Designing Team-Engineering Department Đinh Văn Tráng

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)

Basic VBA for AutoCad Page 127


Designing Team-Engineering Department Đinh Văn Tráng

 Giải thích

Tham số Giải thích

Kiểu AcadExternalReference – Biến chứa đối tượng trả về của


ExternalReferenceObject
phương thức AttachExternalReference

SPACE ModelSpace hoặc PaperSpace

Kiểu String – Đường dẫn tới bản vẽ tham khảo ngoài (bao
FileName
gồm cả phần mở rộng “dwg”)

Kiểu String – Tên đặt cho bản vẽ tham khảo ngoài khi được
BlockName
chèn vào trong bản vẽ

Kiểu Variant – Mảng 3 phần tử kiểu Double chứa tọa độ điểm


InsertionPoint
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

Kiểu Double – Góc quay của bản vẽ tham khảo ngoài khi
RotationAngle
chèn vào bản vẽ (Đơn vị : Radians)

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
Overlay
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.

Basic VBA for AutoCad Page 128


Designing Team-Engineering Department Đinh Văn Tráng

 Ví dụ

 Ví dụ

Basic VBA for AutoCad Page 129


Designing Team-Engineering Department Đinh Văn Tráng

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.

Basic VBA for AutoCad Page 130


Designing Team-Engineering Department Đinh Văn Tráng

 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.

Basic VBA for AutoCad Page 131


Designing Team-Engineering Department Đinh Văn Tráng

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ụ

Basic VBA for AutoCad Page 132


Designing Team-Engineering Department Đinh Văn Tráng

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

Basic VBA for AutoCad Page 133

You might also like