vba for autocad

133
Designing Team-Engineering Department Đinh Văn Tráng Basic VBA for AutoCad Page 1 PHLC Chương 1 ................................................................................................................................... 8 TNG QUAN VVBA TRONG AUTOCAD ......................................................................... 8 1.1. Khái nim dán nhúng và dán độc lp .................................................................. 8 1.2. Trình qun lý dán VBA........................................................................................... 8 1.3. Định nghĩa lệnh mi bng Autolisp............................................................................ 9 Chương 2 ..................................................................................................................................11 HTHỒNG ĐỐI TƯỢNG VÀ MT STHAO TÁC CƠ BN TRONG AUTOCAD ......11 2.1. Mô hình đối tượng trong AutoCad........................................................................... 11 2.2. Mt sđối tượng chính trong AutoCad ................................................................... 12 2.1.1. Đối tượng Application ....................................................................................... 12 2.1.2. Khái nim 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ơ bn trong AutoCad ......................................................................... 13 2.2.1. Mbn v- Phương thc Open ........................................................................ 13 2.2.2. To bn vmi – Phương thc Add ................................................................. 13 2.2.3. Lưu bn v-Phương thc Save, SaveAs ........................................................... 14 2.2.4. Đóng bản v- Phương thc Close ..................................................................... 15 2.2.5. Thoát khi chương trình AutoCad – Phương thc Quit .................................. 16 Chương 3 ..................................................................................................................................17 CÁC KIU DLIU VÀ CÁCH KHAI BÁO BIN 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. Tng Quát .......................................................................................................... 18 3.2.2. Cách thc khai báo biến .................................................................................... 18

Upload: tho03103261

Post on 24-Oct-2015

555 views

Category:

Documents


24 download

DESCRIPTION

seft study Visual basic for autocad

TRANSCRIPT

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

Basic VBA for AutoCad Page 1

PHỤ LỤC

Chương 1 ................................................................................................................................... 8

TỔNG QUAN VỀ VBA TRONG AUTOCAD ......................................................................... 8

1.1. Khái niệm dự án nhúng và dự án độc lập .................................................................. 8

1.2. Trình quản lý dự án VBA ........................................................................................... 8

1.3. Định nghĩa lệnh mới bằng Autolisp ............................................................................ 9

Chương 2 ..................................................................................................................................11

HỆ THỒNG ĐỐI TƯỢNG VÀ MỘT SỐ THAO TÁC CƠ BẢN TRONG AUTOCAD ......11

2.1. Mô hình đối tượng trong AutoCad........................................................................... 11

2.2. Một số đối tượng chính trong AutoCad ................................................................... 12

2.1.1. Đối tượng Application ....................................................................................... 12

2.1.2. Khái niệm tập đối tượng .................................................................................... 12

2.1.3. Tập đối tượng Documents và đối tượng Document .......................................... 12

2.2. Các thao tác cơ bản trong AutoCad ......................................................................... 13

2.2.1. Mở bản vẽ - Phương thức Open ........................................................................ 13

2.2.2. Tạo bản vẽ mới – Phương thức Add ................................................................. 13

2.2.3. Lưu bản vẽ -Phương thức Save, SaveAs ........................................................... 14

2.2.4. Đóng bản vẽ - Phương thức Close ..................................................................... 15

2.2.5. Thoát khỏi chương trình AutoCad – Phương thức Quit .................................. 16

Chương 3 ..................................................................................................................................17

CÁC KIỂU DỮ LIỆU VÀ CÁCH KHAI BÁO BIẾN TRONG VBA ...................................17

3.1. Những quy đinh về cú pháp trong VBA ................................................................... 17

3.2. Khai báo biến trong VBA ......................................................................................... 18

3.2.1. Tổng Quát .......................................................................................................... 18

3.2.2. Cách thức khai báo biến .................................................................................... 18

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

Basic VBA for AutoCad Page 2

3.3. Các kiểu dữ liệu cơ bản trong VBA ......................................................................... 19

3.3.1. Kiểu Logic – Boolean ......................................................................................... 19

3.3.2. Kiểu số nguyên – Byte/Integer/Long ................................................................. 20

3.3.3. Kiểu số thực – Single/Double ............................................................................. 20

3.3.4. Kiểu Chuỗi – String ........................................................................................... 21

3.3.5. Kiểu Mảng .......................................................................................................... 21

3.3.6. Kiểu Variant....................................................................................................... 23

Chương 4 ..................................................................................................................................24

TOÁN TỬ VÀ CÁC HÀM THÔNG DỤNG ...........................................................................24

4.1. Các hàm số học trong VBA ...................................................................................... 25

4.2. Các toán tử so sánh thường sử dụng trong VBA ..................................................... 26

4.3. Toán tử Logic thường dùng trong VBA ................................................................... 27

4.3.1. Toán tử AND ...................................................................................................... 27

4.3.2. Toán tử OR ........................................................................................................ 28

4.3.3. Toán tử NOT ...................................................................................................... 29

4.4. Các hàm chuyển đồi dữ liệu ..................................................................................... 29

4.5. Các hàm xử lý chuỗi.................................................................................................. 30

4.5.1. Hàm LEFT ......................................................................................................... 30

4.5.2. Hàm RIGHT ...................................................................................................... 30

4.5.3. Hàm MID ........................................................................................................... 30

4.5.4. Hàm LEN ........................................................................................................... 31

4.5.5. Hàm UCase ........................................................................................................ 31

4.5.6. Hàm LCase ......................................................................................................... 32

4.5.7. Hàm InStr .......................................................................................................... 32

4.5.8. Hàm InStrRev .................................................................................................... 34

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

Basic VBA for AutoCad Page 3

4.5.9. Hàm Ltrim, RTrim ............................................................................................ 35

4.5.10. Hàm Space ...................................................................................................... 36

4.5.11. Hàm Split ........................................................................................................ 36

4.5.12. Hàm Replace................................................................................................... 38

4.5.13. Hàm StrComp ................................................................................................ 39

Chương 5 ..................................................................................................................................41

CẤU TRÚC ĐIỀU KIỆN VÀ VÒNG LẶP .............................................................................41

5.1. Cấu Trúc Điều Kiện .................................................................................................. 41

5.1.1. Cấu trúc : “If … Then …”................................................................................. 41

5.1.2. Cấu trúc : “If … Then… Else … End If” ......................................................... 42

5.1.3. Cấu trúc : “If … Then… Else … End If” mở rộng .......................................... 43

5.1.4. Cấu trúc: “Select Case … Case…End Select” .................................................. 44

5.2. Cấu Trúc Vòng Lặp .................................................................................................. 45

5.2.1. Cấu trúc: “For … Next” .................................................................................... 45

5.2.2. Cấu trúc : “For Each … Next” .......................................................................... 47

5.2.3. Cấu trúc : “Do While … Loop” ......................................................................... 48

5.2.4. Cấu trúc : “Do … Loop While” ......................................................................... 48

5.2.5. Cấu trúc : “Do Until … Loop” .......................................................................... 49

5.2.6. Cấu trúc : “Do … Loop Until ” ......................................................................... 49

Chương 6 ..................................................................................................................................50

CÁC HÀM NHẬP LIỆU .........................................................................................................50

6.1. Phương thức : Prompt .............................................................................................. 51

6.2. Phương thức: GetString ........................................................................................... 52

6.3. Phương thức : GetPoint ............................................................................................ 53

6.4. Phương thức : GetInteger và GetReal ..................................................................... 54

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

Basic VBA for AutoCad Page 4

6.5. Phương thức : GetDistance....................................................................................... 55

6.6. Phương thức : GetKeyWord .................................................................................... 56

6.7. Phương thức GetEntity ............................................................................................. 57

6.8. Phương thức: GetCorner .......................................................................................... 58

6.9. Phương thức : InitializeUserInput ........................................................................... 59

Chương 7 ..................................................................................................................................61

TẠO MỚI ĐỐI TƯỢNG TRONG AUTOCAD ......................................................................61

7.1. Xác định nơi chứa đối tượng .................................................................................... 62

7.2. Khai báo và phương thức tạo đối tượng hình học ................................................... 63

7.2.1. Tạo đường thẳng –Phương thức AddLine ........................................................ 63

7.2.2. Tạo đối tượng LWPolyline - Phương thức AddLightWeightPolyline.............. 64

7.2.3. Tạo đối tượng đường tròn – Phương thức AddCircle ...................................... 65

7.2.4. Tạo đối tượng cung tròn –Phương thức AddArc.............................................. 66

7.2.5. Tạo đối tượng văn bản đơn - phương thức AddText ........................................ 67

7.2.6. Tạo đối tượng văn bản nhiều dòng-Phương thức AddMtext ........................... 68

Chương 8 ..................................................................................................................................69

LÀM VIỆC VỚI ĐỐI TƯỢNG SELECTIONSET ................................................................69

8.1. Quy trình làm việc với đối tượng SelectionSet ......................................................... 70

8.2. Khai báo và khởi tạo đối tượng SelectionSet ........................................................... 70

8.3. Thêm đối tượng vào trong một SelectionSet ............................................................ 71

8.3.1. Phương thức AddItems...................................................................................... 72

8.3.2. Phương thức Select ............................................................................................ 73

8.3.3. Phương Thức SelectOnScreen ........................................................................... 75

8.3.4. Thao tác với các đối tượng trong SelectionSet .................................................. 76

8.4. Bộ lọc cho đối tượng SelectionSet ............................................................................. 76

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

Basic VBA for AutoCad Page 5

8.4.1. Lọc theo một điều kiện ........................................................................................ 77

8.4.2. Lọc theo nhiều điều kiện ..................................................................................... 78

8.5. Một số phương thức khác của đối tượng SelectionSet ............................................. 80

8.5.1. Phương thức RemoveItems ................................................................................. 80

8.5.2. Phương thức Clear ............................................................................................. 82

8.5.3. Phương thức Eraser ........................................................................................... 82

8.5.4. Phương thức Delete ............................................................................................ 82

Chương 9 ..................................................................................................................................84

HIỆU CHỈNH CÁC ĐỐI TƯỢNG HÌNH HỌC .....................................................................84

9.1. Tổng quan về việc hiệu chỉnh các đối tượng hình học bằng VBA ........................... 85

9.2. Sao chép đối tượng – Phương thức Copy ................................................................. 85

9.3. Xóa đối tượng –Phương thức Delete ........................................................................ 86

9.4. Di chuyển đối tượng – Phương thức Move .............................................................. 86

9.5. Lấy đối xứng – Phương thức Mirror........................................................................ 88

9.6. Phương thức OffSet .................................................................................................. 89

9.7. Xoay đối tượng – Phương thức Rotate ..................................................................... 90

9.8. Thay đổi tỉ lệ đối tượng – Phương thức ScaleEntity ................................................ 92

9.9. Thay đổi màu đối tượng – Thuộc tính Color ........................................................... 93

9.10. Thay đổi Layer cho đối tượng – Thuộc tính Layer .............................................. 95

9.11. Thay đổi kiểu đường cho đối tượng – Thuộc tính LineType ............................... 96

9.12. Thay đổi bề rộng nét vẽ của đối tượng – Thuộc tính LineWeight ....................... 98

Chương 10 .............................................................................................................................. 100

LÀM VIỆC VỚI ĐỐI TƯỢNG LAYER .............................................................................. 100

10.1. Duyệt qua tập đối tượng Layers ..........................................................................101

10.2. Khai báo và khởi tạo một Layer mới – Phương thức Add..................................101

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

Basic VBA for AutoCad Page 6

10.3. Đổi tên của Layer – Thuộc tính Name .................................................................102

10.4. Thiết lập một Layer hiện hành ............................................................................103

10.5. Gán màu cho một Layer – Thuộc tính Color ......................................................103

10.6. Gán kiểu đường cho một Layer – Thuộc tính LineType ....................................105

10.7. Gán LineWeight cho một Layer – Thuộc tính LineWeight ................................107

10.8. Một số thuộc tính khác của đối tượng Layer.......................................................109

10.8.1. Bật, Tắt Layer – Thuộc tính LayOn .............................................................109

10.8.2. Đông cứng, Làm tan Layer – Thuộc tính Freeze, UnFreeze ........................110

10.8.3. Khóa, Mở Khóa Layer – Thuộc tính Lock, UnLock ....................................110

10.8.4. Xóa Layer – Thuộc tính Delete .....................................................................111

Chương 11 .............................................................................................................................. 112

LÀM VIỆC VỚI ĐỐI TƯỢNG BLOCK .............................................................................. 112

11.1. Duyệt qua tập đối tượng Block ............................................................................113

11.2. Khai báo và khởi tạo một Block...........................................................................113

11.3. Đổi tên Block – Thuộc tính NAME ......................................................................114

11.4. Xóa một Block – Thuộc tinh Delete .....................................................................115

11.5. Chèn Block vào trong bản vẽ - Phương thức InsertBlock ..................................117

11.6. Phá vỡ một Block – Phương thức Explode ..........................................................120

11.7. Block chứa thuộc tính – Attributes ......................................................................122

11.7.1. Tạo thuộc tính cho Block –Phương thức AddAttribute ...............................122

11.7.2. Thao tác với thuộc tính – Phương thức GetAttributes ................................125

11.8. Làm việc với bản vẽ tham khảo ngoài – External References ............................127

11.8.1. Gắn một tham chiếu ngoài vào bản vẽ – Phương thức

AddExternalReference ...................................................................................................127

11.8.2. Gỡ bỏ tham chiếu ngoài ra khỏi bản vẽ - Phương thức Detach ...................130

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

Basic VBA for AutoCad Page 7

11.8.3. Tải lại tham chiếu ngoài – Phương thức Reload ..........................................130

11.8.4. Loại bỏ tham chiếu ngoài ra khỏi bản vẽ - Phương thức Unload ................131

11.8.5. Ràng buộc tham chiếu ngoài – Phương thức Bind .......................................132

TÀI LIỆU THAM KHẢO ..................................................................................................... 133

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

Basic VBA for AutoCad Page 8

Chương 1

TỔNG QUAN VỀ VBA TRONG AUTOCAD

1.1. Khái niệm dự án nhúng và dự án độc lập

1.1.1. Dự án nhúng

Dự án nhúng là dự án đính kèm với bản vẽ.

Đặc điểm dự án nhúng là :

Không cần phải nhớ nơi lưu trử dự án, không phải tải dự án vào Autocad mỗi khi sử dụng

một chức năng nào đó có sẵn trong dự án, bởi vì nó được tự động tải vào mỗi khi bản vẽ

được mở.

Những chức năng được lập trình trong dự án VBA nhúng chỉ có hiệu lực đối với bản vẽ

chứa nó do đó muốn sử dụng những chứa năng này cho những bản vẽ khác người dùng

buộc phải sao chép dự án VBA đó.

1.1.2. Dự án độc lập

Dự án độc lập là dự án tách biệt trong một tệp tin có phần mở rộng là *.dvb và không phụ

thuộc vào bản vẽ nào cả.

Đặc điểm của dự án độc lập :

Muốn sử dụng dự án độc lập người dùng phải tải dự án đó vào trong Autocad.

Dự án độc lập có thể tác động lên tất cả các bản vẽ đang mở .

Khi cần chia sẽ những chức năng trong dự án chỉ cần mang theo tệp “.dvb” là đủ.

1.2. Trình quản lý dự án VBA

Trong Autocad việc quản lý dự án VBA được thực hiện dễ dàng = thông qua trình quản lý dự

án – VBA Manager.Để hiển thị VBA Manager chọn Tool ---> Macros ---> VBA Manager

(Hoặc đánh lệnh VBAMAN)

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

Basic VBA for AutoCad Page 9

Ý nghĩa một số thành phần trong trình quản lý dự án

New : Tạo mới dự án VBA (Mặc định là dự án độc lập)

Save As : Lưu dự án VBA.

Load : Tải dự án VBA vào trong VBAIDE.Người dùng được yêu cầu chọn tệp dự án

VBA (*.dvb) để Load vào.

Macros : Hiển thị trình quản lý Macros.

Visual Basic Editor : Hiển thị môi trường VBAIDE, đây là môi trường thực hiện viết mã

lệnh và thiết kế giao diện chương trình.

1.3. Định nghĩa lệnh mới bằng Autolisp

Việc định nghĩa lệnh mới bằng Autolisp sẽ làm cho quá trình thực thi Macro đơn giản đi rất

nhiều..Autolisp chính là chiếc cầu nối tạo sự liên kết giữa dòng lệnh của AutoCad với các

Macro trong dự án VBA.

Để các lệnh mới có hiệu lực ngay khi AutoCad khởi động thì người lập trình cần lưu dự án

VBA thành tệp có tên là ACAD.DVB và tệp Autolisp có tên là ACAD.LSP và cả hai tệp này

phải được lưu vào thư mục Support của AutoCad.Hai tệp này sẽ tự động được tải lên ngay

sau khi AutoCad khởi động và người dùng có thể sử dụng các lệnh tự định nghĩa.

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

Basic VBA for AutoCad Page 10

Cách tạo file Autolisp

Tại một thư mục bất kỳ, nhấn chuột phải, chọn New -> Text Document.

Đổi tên file vừa tạo thành tên file ta muốn với phần mở rộng LSP (thay vì txt)

Trong trường hợp Window của bạn đang bỏ chế độ hiển thị đuôi mở rộng, hãy Open

file Text vừa tạo, Save As file thành dạng “Tên_file.LSP” .Chú ý2 dấu “” để đảm

bảo file sẽ chuyển thành đuôi mở rộng LSP.

Cách thức định nghĩa lệnh mới bằng AutoLisp

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

Basic VBA for AutoCad Page 11

Chương 2

HỆ THỒNG ĐỐI TƯỢNG VÀ MỘT SỐ THAO TÁC CƠ BẢN TRONG AUTOCAD

2.1. Mô hình đối tượng trong AutoCad

Trong AutoCad có rất nhiều đối tượng khác nhau như:

- Các đối tượng hình học như Line, Circle, Mtext, Text…

- Các đối tượng phi hình học như: Layer, Linetype, Dimension …

- Và ngay cả bản vẽ, bản thân chương trình AutoCad cũng là một đối tượng (Đối tượng

Application)

Mỗi đối tượng trong Autocad đều có những thuộc tính và các phương thức đặc trưng của nó.

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

Basic VBA for AutoCad Page 12

2.2. Một số đối tượng chính trong AutoCad

2.1.1. Đối tượng Application

Đối tượng Application là đối tượng gốc trong mô hình đối tượng của AutoCad.Từ đối tượng

này ta có thể truy xuất đến bất kỳ đối tượng nào.Đối tượng Application là một đối tượng

toàn cục nghiã là mọi phương thức và thuộc tính của nó đều có hiệu lực trong môi trương

VBAIDE.

Một số phương thức thường dùng của đối tượng Application:

Phương thức Update – Phương thức này cập nhật lại các thay đổi.

Phương thức Zoom như ZoomAll, ZoomExtents…

Phương thức Quit – Thoát khỏi chương trình AutoCad.

2.1.2. Khái niệm tập đối tượng

Trong Autocad các đôi tượng được tổ chức hầu hết trong Tập đối tượng.Ví dụ các đối

tượng hình học được quản lý trong tập đối tượng ModelSpace, PaperSpace hoặc

Blocks.Các đối tượng phi hình học như Layer, DimStyle, TextStyle được quản lý trong các

tập đối tượng tương ứng như Layers, DimStyles, TextStyles…

2.1.3. Tập đối tượng Documents và đối tượng Document

Tập đối tượng Documents là một tập chứa tất cả các bản vẽ đang được mở.

Một số phương thức của tập đối tượng Documents :

Phương thức Add : Sử dụng để tạo một bản vẽ mới.

Phương thức Open : Sử dụng để mở một bản vẽ có sẵn.

Phương thức Close : Sử dụng để đóng tất cả các bản vẽ đang được mở

Đối tượng Document, thực chất là một bản vẽ AutoCAD đang được mở thuộc tập đối

tượng Documents.Đối tượng này chứa tất cả các đối tượng hình học và phi hình học trong

một bản vẽ AutoCAD cũng như chứa hầu hết các đối tượng khác của bản vẽ như

Viewports.

Trong VBA, đối tượng Thisdrawing tham chiếu đến bản vẽ hiện hành, những tác động lên

đối tượng này cũng chính là tác động lên bản vẽ hiện hành.

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

Basic VBA for AutoCad Page 13

2.2. Các thao tác cơ bản trong AutoCad

2.2.1. Mở bản vẽ - Phương thức Open

Để mở một bản vẽ ta sử dụng phương thức OPEN có trong tập đối tượng Documents.Bản

vẽ vừa được mở sẽ trở thành bản vẽ hiện hành.

Cú pháp

Documents.Open (FileName)

Giải thích

Tham số Giải thích

FileName Kiểu String – Chuỗi thể hiện tên bản vẽ bao (gồm đường dẫn và

phần mở rộng)

Ví dụ

2.2.2. Tạo bản vẽ mới – Phương thức Add

Để tạo bản vẽ mới sử dụng phương thức ADD có trong tập đối tượng Documents.

Cú pháp

Set DocObj = Documents.Add ([TemplateName])

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

Basic VBA for AutoCad Page 14

Giải thích

Tham số Giải thích

DocObj Kiểu acadDocument – Biến chứa bản vẽ được tạo

TemplateName

Tham số tùy chọ, kiểu String – Chuỗi chứa đường dẫn đầy đủ đến bản vẽ mẫu (tệp *.dwt).Nếu không có tham số này, AutoCad sẽ tạo bản vẽ mới dựa trên tệp bản vẽ mẫu mặc định (Thường là tệp Acad.dwt)

Ví dụ

2.2.3. Lưu bản vẽ -Phương thức Save, SaveAs

Để lưu bản bản vẽ ta dùng phương thức SAVE (lưu với tên hiện hành) hoặc phương thức

SAVEAS (lưu với tên khác) có trong đối tượng Thisdrawing.

Cú pháp

Thisdrawing.Save

Thisdrawing.SaveAs FileName [, FileType]

Giải thích

Tham số Giải thích

FileName

Kiểu String – Chuỗi chứa tên cần lưu (bao gồm cả đường dẫn và phần mở rộng).Nếu không chỉ rõ bản vẽ sẽ được lưu vào thư mục hoạt động của AutoCad (thông thường C:\Program Files\AutoCAD 20xx)

FileType

Tham số tùy chọn – Xác định kiểu bản vẽ sẽ được lưu. acR14_DWG : Tệp AutoCAD Release14/LT97 DWG (*.dwg) acR14_DXF : Tệp AutoCAD Release14/LT97 DXF (*.dxf) acR15_DWG: Tệp AutoCAD 2000 DWG (*.dwg) acR15_DXF: Tệp AutoCAD 2000 DXF (*.dxf) acR15_Template : Tệp AutoCAD 2000 Drawing Template File (*.dwt) acNative : Tệp bản vẽ được lưu với kiểu tệp mới nhất ứng với phiên bản AutoCAD hiện hành.

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

Basic VBA for AutoCad Page 15

Ví dụ

2.2.4. Đóng bản vẽ - Phương thức Close

Để đóng bản vẽ sử dụng phương thức CLOSE có trong đối tượng Thisdrawing.

Cú pháp

Thisdrawing.Close ([SaveChange] [, FileName])

Giải thích

Tham số Giải thích

SaveChange

Tham số tùy chọn

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

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

FileName

Tham số tùy chọn, kiểu String –Chuỗi thể hiện tên bản vẽ (bao gồm

đường dẫn và phần mở rộng) trong trường hợp bản vẽ chưa lưu lần

nào

Ví dụ

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

Basic VBA for AutoCad Page 16

2.2.5. Thoát khỏi chương trình AutoCad – Phương thức Quit

Để thoát khỏi AutoCad chúng ta sử dụng phương thức Quit có trong đối tượng

Application.Nếu có bản vẽ hoặc dự án nào chưa được lưu AutoCad sẽ nhắc người dùng lưu

sau đó mới thoát.

Cú pháp

Application.Quit

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

Basic VBA for AutoCad Page 17

Chương 3

CÁC KIỂU DỮ LIỆU VÀ CÁCH KHAI BÁO BIẾN TRONG VBA

3.1. Những quy đinh về cú pháp trong VBA

- Những câu lệnh là những dòng riêng biệt.Nếu có nhiều câu lệnh trên cùng một dòng thì các

câu lệnh ngăn cách nhau bằng dấu hai chấm (:),nếu dòng lệnh quá dài thì muốn ngắt xuống

dòng thì ta dùng “khoảng trắng + _” .

- Nếu muốn chèn thêm dòng chú thích thì ta dùng dấu nháy đơn (‘)

- Quy tắc đặt tên biến

Ký tự đầu tiên bắt buộc phải là chữ cái.

Không chứa khoảng trắng, dấu chấm (.), dấu chấm than(!), hoặc các ký tự đặc biệt như

@, #, &, $

Tên biến không dài quá 255 ký tự

Tên biến không trùng với các từ khóa trong VBA (Xem danh sách một số từ khóa

thường sử dụng trong VBA)

Trong một SUB không được đặt tên biến trùng nhau

- Một số từ khóa thường sử dụng trong VBA

As Empty Input Mid Option Public String

Binary Error Is New Optional Resume Then

ByRef False Len Next ParamArray Seek Time

ByVal For Let Nothing Print Set To

Date Friend Lock Null Private Static True

Else Get Me On Property Step WithEvents

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

Basic VBA for AutoCad Page 18

3.2. Khai báo biến trong VBA

3.2.1. Tổng Quát

Một biến khi sử dụng trong VBA có thể không cần khai báo, nhưng cách này chỉ nên áp

dụng khi viết các chương trình nhỏ.Khi làm việc với một dự án có nhiều Modul,

UserForm… cần khai báo biến một cách tường minh để chương trình dễ đọc, chạy nhanh

hơn và tận dụng được sự trợ giúp của môi trường VBAIDE.

Biến cục bộ : Là biến khai báo trong một chương trình con và phạm vi hoạt động của nó

được giới hạn trong chính chương trình con đó thôi.

Biến toàn cục : Phạm vi hoạt động của biến là toàn bộ dự án, bất kỳ nơi đâu trong dự án

(bất kể Modul, UserForm..) cũng có thể sử dụng được biến này.

Nếu một biến được khai báo với từ khóa DIM thì mặc định biến đó là biến cục bộ.Phạm

vi hoạt động của biến này được giới hạn trong SUB.

Nếu một biến được khai báo với từ khóa PRIVATE thì phạm vi hoạt động của biến là

trong nội bộ Modul đó thôi, tất cả các SUB thuộc Modul đó đều sử dụng được nhưng

không thể truy cập từ một Modul hay UserForm khác.

Nếu một biến được khai báo với từ khóa PUBLIC thì phạm vi hoạt động của biến là

trong toàn bộ dự án nghĩa là bất kỳ trong Modul, UserForm nào cũng có thể sử dụng

được biến này.

Chú ý : Không dùng từ khóa PRIVATE, PUBLIC cho việc khai báo biến nằm bên trong

một SUB.

3.2.2. Cách thức khai báo biến

Khai báo hằng số

Hằng số là một loại biến đặc biệt mà giá trị của nó được xác định ngay lúc khai báo và luôn

không thay đổi.Cách này thường được sử dụng cho những hằng số hay dùng trong chương

trình như π = 3.141596254.

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

Basic VBA for AutoCad Page 19

Cú pháp

[Public/Private] Const <Tên_Hằng> = <Giá trị hằng số>

Ví dụ

Public Const Pi = 3.141592654

Khai báo biến

[Dim/Public/Private] <Tên_biến> As <Kiểu dữ liệu>

Khai báo mảng tĩnh

[Dim/Public/Private] <Tên mảng> (thông số về chiều) As <Kiểu dữ liệu>

Khai báo mảng động

[Dim/Public/Private] <Tên mảng> () As <Kiểu dữ liệu>

3.3. Các kiểu dữ liệu cơ bản trong VBA

3.3.1. Kiểu Logic – Boolean

Biến kiểu Boolean chỉ chứa hai giá trị TRUE và FALSE. Giá trị mặc định ban đầu của

biến kiểu Boolean là FALSE

Cú pháp

[Dim/Public/Private] <Tên_Biến> As Boolean

Ví dụ

Dim blnA as Boolean

Public blnB as Boolean

Private blnC as Boolean

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

Basic VBA for AutoCad Page 20

3.3.2. Kiểu số nguyên – Byte/Integer/Long

Cú pháp

[Dim/Public/Private] <Tên_Biến> As [Byte/Integer/Long]

Byte, Integer, Long đều là các từ khóa khai báo kiểu số nguyên nhưngchúng chỉ khác nhau

về giới hạn giá trị mà biến có thể nhận được.

Kiểu số nguyên Kích thước Phạm Vi

Byte 1 Byte 0 – 255

Integer 2 Bytes -32,768 – 32767

Long 4 Bytes -2,147,486,648 – 2,147,483,647

Ví dụ

Dim lngA as Long

Dim intB as Integer

3.3.3. Kiểu số thực – Single/Double

[Dim/Public/Private] <Tên_Biến> As [Single/Double]

Ví dụ

Dim dblA as Double

Public Pi as Double

Chú ý :

Các biến kiểu SỐ NGUYÊN và SỐ THỰC nếu không gán giá trị ban đầu cho biến thì giá

trị mặc định ban đầu sẽ bằng 0

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

Basic VBA for AutoCad Page 21

3.3.4. Kiểu Chuỗi – String

Chuỗi là một hàng các ký tự liên tục nhau, số lượng ký tự trong chuỗi rất lớn.Trong VBA

chuỗi được đặt trong dấu ngoặc kép “”.Giá trị mặc định ban đầu cho biến kiểu chuỗi là một

chuỗi rỗng.

Cú pháp

[Dim/Public/Private] <Tên_Biến> As String

Ví dụ

Dim strA as String

strA = “VBA for AutoCad”

3.3.5. Kiểu Mảng

Khi gặp trường hợp phải xử lý một loạt các biến tương tự như nhau, ví dụ các phần tử của

một ma trận, nếu ta phải đặt tên khác nhau cho tất cảcác biến này thì rất bất tiện, vì vậy ta

có thể dùng kiểu mảng để đặt tên chung cho cả nhóm các phần tử đó và khi nào cần sử

dụng từng phần tử ta sẽ gọi tên theo chỉ số của chúng trong mảng.

- Mảng Tĩnh

Đây là loại mảng có số phần tử không thay đổi trong suốt quá trình hoạt động của

mảng.Mảng này thường được sử dụng khi biết trước số lượng phần tử của mảng.

Cú pháp

Dim <Tên_Mảng>(Thông số mảng) As <Kiểu dữ liệu>

Ví dụ

Dim Myarray(10) as Double ‘Mảng có 11 phần tử (Từ 0 tới 10)

Dim MyArray(1 to 10) as Double ‘Mảng có 10 phần tử.

Dim MyArray(1 to 5,1 to 5) as Double ‘Mảng có 25 phần tử

Dim MyArray(1 to n,1 to m) as Variant ‘Mảng có n hàng và m cột

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

Basic VBA for AutoCad Page 22

- Mảng Động

Đây là mảng có số lượng phần tử có thể thay đổi được trong lúc chương trình hoạt

động.Với mảng động người lập trình không cần biết số lượng phần tử của mảng nó sẽ được

thiết lại tùy theo yêu cầu cụ thể của bài toán

Cú pháp

Dim <Tên_Mảng>() As <Kiểu dữ liệu>

Để thay đổi số lượng phần tử của mảng chúng ta sử dụng từ khóa REDIM

Cú pháp

ReDim <Tên_Mảng> (Thông số mảng) As <Kiểu dữ liệu>

Ví dụ

Dim MyArray () as Long ‘Khai báo mảng MyArray là mảng động

ReDim MyArray(1 to 4) as Long ---->Xác định lại kích thước cho mảng

Với một mảng động mà các phần tử đã được gán giá trị khi thay đổi số lượng phần tử sẽ có

hai trường hợp xảy ra.

Toàn bộ giá trị của các phần tử (thuộc mảng trước khi thay đổi) sẽ bị xóa bỏ và các

phần tử của mảng mới sẽ nhận giá trị mặc định.

Toàn bộ giá trị của các phần tử (thuộc mảng trước khi thay đổi) sẽ được giữ lại nếu

thỏa mãn 2 điều kiện sau

o Sử dụng từ khóa ReDim Preserve

o Sự thay đổi kích thước của mảng chỉ được thực hiện ở biên trên của chiều cuối

cùng của mảng nghĩa là các phần tử cần giữa lại giá trị có chỉ số không đổi khi mảng

được thiết lập lại.

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

Basic VBA for AutoCad Page 23

Ví dụ

Dim MyArray () as Long ‘Khai báo mảng MyArray là mảng động

ReDim MyArray(1 to 4) as Long ‘Xác định lại kích thước cho mảng

MyArray(1) = 10: MyArray(2) = 20 ‘Gán giá trị cho các phần tử mảng

MyArray(3) = 30: MyArray(4) = 40

ReDim Preserve MyArray(1 to 5) as Long ‘Thay đổi kích thước mảng

MyArray(5) = 50 ‘Gán giá trị cho phần tử mới.

3.3.6. Kiểu Variant.

Kiểu Variant là một kiểu đặc biệt có thể chứa tất cả các kiểu dữ liệu khác.

Cú pháp

Dim <Tên_Biến> As Variant

Ví dụ

Dim varA as Variant

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

Basic VBA for AutoCad Page 24

Chương 4

TOÁN TỬ VÀ CÁC HÀM THÔNG DỤNG

Nội dung chương :

- Các hàm số học trong VBA

- Các toán tử so sánh thường dùng trong VBA

- Các tóa tử Logic thường dùng trong VBA

- Các hàm chuyển đổi thườngdùng trong VBA

- Các hàm xử lý chuỗi thường dùng trong VBA

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

Basic VBA for AutoCad Page 25

4.1. Các hàm số học trong VBA

Toán Tử Ý Nghĩa Ví dụ Kết quả

+ Cộng 10+5 15

- Trừ 10-5 5

* Nhân 10*5 50

/ Chia 10/5 2

\ Chia Lấy phần nguyên 11\2 5

^ Hàm mũ 10^2 100

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

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

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

Fix(99.8)

Fix(-99.2)

Fix(-99.8)

99

-99

-99

Int(x) Lấy phần nguyên đã được làm

tròn

Int(99.2)

Int(-99.2)

Int(-99.8)

99

-100

-100

Round(x,m) Làm tròn số thực x đến m số sau

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

Sqr(x)

(x>=0) Hàm căn bậc 2 của x Sqr(4) 2

Atn(x) Hàm lượng giác ngược của

Tan(x) Atn(1) π/4

Sin(x)

Cos(x)

Tan(x)

Các hàm lượng giác

của x tính bằng đơn vị Radian

Sin(π/6)

Cos(π/3)

Tan(π/4)

½

½

1

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

Basic VBA for AutoCad Page 26

Ví dụ : Dùng hàm Atn để tính giá trị của số Pi

Dim Pi as double

Pi = 4*Atn(1)

Ví dụ : Ví dụ này sẽ tạo một hàm dùng để chuyển đổi đơn vị Degree ra Radian

4.2. Các toán tử so sánh thường sử dụng trong VBA

Sử dụng toán tử so sánh trong biểu thức để so sánh hai hoặc nhiều số, chuỗi Text, các biến

hoặc kết quả của các hàm

- Nếu câu lệnh Đúng -> Kết quả của công thức được trả về giá trị True

- Nếu câu lệnh Sai -> Kết quả của công thức được trả về giá trị False

Toán Tử Ý Nghĩa Ví Dụ Kết quả

= Bằng a=b True

> Lớn hơn 10<5 False

>= Lớn hơn hoặc bằng 10>=8 True

< Nhỏ hơn 5<7 True

<= Nhỏ hơn hoặc bằng 10<=20 True

< > Khác “a” <> “b” True

Ví dụ

Dim A, B as integer

Dim Mycheck as Boolean

A = 8 :B = 2

Mycheck = A > B -----> Mycheck = True

Mycheck = A < B -----> Mycheck = False

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

Basic VBA for AutoCad Page 27

4.3. Toán tử Logic thường dùng trong VBA

4.3.1. Toán tử AND

Sử dụng toán tử And để kiểm tra xem hai toán hạng kiểu Boolean có là True hoặc False hay

không.

Bảng giá trị của toán tử AND

Toán hạng 1 Toán hạng 2 Kết quả

True True True

True False False

True Null Null

False True False

False False False

False Null False

Null True Null

Null False False

Null Null Null

Chú ý

Toán tử AND trả về giá trị TRUE khi cả hai toán tử cùng là TRUE, các trường hợp khác cho

kết quả là FALSE

Ví dụ

‘Khai báo các biến

Dim A, B, C as integer

Dim Mycheck as Boolean

A = 10:B=8:C=6

Mycheck = (A>B) And (B > C) -----> Mycheck = True

Mycheck = (A>B) And (B < C) -----> Mycheck = False

Mycheck = (A<B) And (B < C) -----> Mycheck = False

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

Basic VBA for AutoCad Page 28

4.3.2. Toán tử OR

Sử dụng toán tử OR để kiểm tra hai toán hạng kiểu Boolean xem một trong hai toán hạng là

True hoặc là False.

Bảng giá trị của toán tử OR

Toán hạng 1 Toán hạng 2 Kết quả

True True True

True False True

True Null True

False True True

False False False

False Null False

Null True True

Null False Null

Null Null Null

Chú ý

Toán tử OR trả về kết quả TRUE khi một trong hai toán hạng hoặc cả hai toán hạng là

TRUE, các giá trị còn lại cho giá trị FALSE.

Ví dụ

‘Khai báo các biến

Dim A, B, C as integer

Dim Mycheck as Boolean

‘Gán giá trị ban đầu cho các biến

A = 10:B=8:C=6

Mycheck = (A>B) Or (B > C) -----> Mycheck = True

Mycheck = (A>B) Or (B < C) -----> Mycheck = True

Mycheck = (A<B) Or (B < C) -----> Mycheck = False

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

Basic VBA for AutoCad Page 29

4.3.3. Toán tử NOT

Toán tử NOT sẽ trả về giá trị phủ định của một toán hạng

Bảng giá trị của toán tử NOT

Biểu thức Kết quả

True False

False True

Ví dụ

Dim A, B, C as Integer

Dim Mycheck as Boolean

A = 10:B=8:C=6

Mycheck = Not(A > B) -----> Mycheck = False

Mycheck = Not(B < C) -----> Mycheck = True

4.4. Các hàm chuyển đồi dữ liệu

Chuyển đổi dữ liệu là một nhu cầu cần thiết trong khi lập trình,điều này làm cho các biến có

kiểu dữ liệu rõ ràng,tránh được việc phát sinh lỗi sau này.

Một số hàm chuyển đổi thông dụng

CBool(Expression) Chuyển đổi dữ liệu sang kiểu Logic (Boolean)

Cbyte(Expression) Chuyển đổi dữ liệu sang kiểu Byte

CInt(Expression) Chuyển đổi dữ liệu sang kiểu Integer

CLng(Expression) Chuyển đổi dữ liệu sang kiểu Long

CDblxpression) Chuyển đổi dữ liệu sang kiểu Double

CSng(Expression) Chuyển đổi dữ liệu sang kiểu Single

CStr(Expression) Chuyển đổi dữ liệu sang kiểu String

Val(String) Chuyển đổi dữ liệu String sang kiểu Double

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

Basic VBA for AutoCad Page 30

4.5. Các hàm xử lý chuỗi

4.5.1. Hàm LEFT

Cú pháp

Left(String, Number as Long)

Công dụng

Hàm này trích Number ký tự bên trái của chuỗi String

Ví dụ

Dim strA, strB as String

strA = “VBA for AutoCad”

strB = Left(strA, 7) ----->strB = “VBA for”

4.5.2. Hàm RIGHT

Cú pháp

Right(String, Number as Long)

Công dụng

Hàm này trích Number ký tự bên phải của chuỗi String

Ví dụ

Dim strA, strB as String

strA = “VBA for AutoCad”

strB = Right(strA, 7) ----->strB = “AutoCad”

4.5.3. Hàm MID

Cú pháp

Mid(String, Start As Long, [Number as Long])

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

Basic VBA for AutoCad Page 31

Công dụng

Hàm này trích Number ký tự bắt đầu từ ký tự Start của chuỗi String.Nếu không có giá

trị Number thì sẽ trích một chuỗi bắt đầu từ ký tự Start đến ký tự cuối cùng.

Ví dụ

Dim strA, strB as String

strA = “VBA for AutoCad”

strB = Mid(strA, 4,3) ----->strB = “for”

strB = Mid(strA, 4) ----->strB = “for AutoCad”

4.5.4. Hàm LEN

Cú pháp

Len(String)

Công dụng

Hàm này trả về một số NGUYÊN - Là số lượng ký tự trong một chuỗi (Bao gồm cả

khoảng trắng)

Ví dụ

Dim strA as String

Dim lngB as Long

strA = “VBA for AutoCad”

lngB = Len(strA) ----->lngB = 15

4.5.5. Hàm UCase

Cú pháp

UCase(String)

Công dụng

Hàm này chuyển các ký tự trong một chuỗi thành chữ HOA

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

Basic VBA for AutoCad Page 32

Ví dụ

Dim strA, strB as String

strA = “VBA for AutoCad”

strB = UCase(strA) ----->strB = “VBA FOR AUTOCAD”

4.5.6. Hàm LCase

Cú pháp

LCase(String)

Công dụng

Hàm này chuyển các ký tự trong một chuỗi thành chữ THƯỜNG

Ví dụ

Dim strA, strB as String

strA = “VBA for AutoCad”

strB = UCase(strA) ----->strB = “vba for autocad”

4.5.7. Hàm InStr

Cú pháp

InStr([Start, ]String_1, String_2 [, compare])

Công dụng

Hàm này trả về một số NGUYÊN – Là vị trí bắt đầu của chuỗi String_2 trong chuỗi

String_1 bắt đầu từ vị trí Start.Nếu chuỗi String_2 không được tìm thấy hàm sẽ trả về

giá trị 0.

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

Basic VBA for AutoCad Page 33

Giải thích

Tham số Giải thích

Start

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

kiếm.Giá trị mặc định bằng 1.Nếu tham số Compare được sử dụng

thì tham số Start bắt buộc phải được sử dụng

String_1 Kiểu String – “Chuỗi bị tìm kiếm”

String_2 Kiểu String – “Chuỗi tìm kiếm”

Compare Tham số tùy chọn - Hằng số so sánh

Hằng số so sánh (Chúng ta quan tâm 2 hằng số sau)

Hằng số Ý nghĩa

vbBinaryCompare Kiểu so sánh này phân biệt chữ hoa và chữ thường (Đây là giá trị

mặc định của hàm InStr)

vbTextCompare Kiểu so sánh này không phân biệt chữ hoa và chữ thường

Ví dụ

Dim strA, strB as String

Dim intC as Integer

strA = “VBA for AutoCad”

strB = “a”

intC = InStr(1 ,strA ,strB,vbTextCompare) ----->intC = 3

intC = InStr(1 ,strA ,strB,vbBinaryCompare) ----->intC = 14

intC = InStr(strA ,strB) ----->intC = 14

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

Basic VBA for AutoCad Page 34

4.5.8. Hàm InStrRev

Cú pháp

InStrRev(String_1, String_2 [,Start] [, compare])

Công dụng

Hàm này trả về một số NGUYÊN – Là vị trí bắt đầu của chuỗi String_2 trong chuỗi

String_1 bắt đầu từ vị trí Start.Hàm này ngược với hàm InStr, nó sẽ tìm ngược từ vị trí

Start trở về trước.Nếu chuỗi String_2 không tìm thấy hàm sẽ trả về giá trị 0

Giải thích

Tham số Giải thích

String_1 Kiểu String – “Chuỗi bị tìm kiếm”

String_2 Kiểu String – “Chuỗi tìm kiếm”

Compare Tham số tùy chọn - Hằng số so sánh (Xem bảng hằng số so sánh)

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

kiếm.Giá trị mặc định của tham số là bắt đầu từ cuối chuỗi String_1.

Hằng số so sánh (Chúng ta quan tâm 2 hằng số sau)

Hằng số Ý nghĩa

vbBinaryCompare Kiểu so sánh này phân biệt chữ hoa và chữ thường (Đây là giá trị

mặc định của hàm InStrRev)

vbTextCompare Kiểu so sánh này không phân biệt chữ hoa và chữ thường

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

Basic VBA for AutoCad Page 35

Ví dụ

Dim strA, strB as String

Dim intC as Integer

strA = “VBA for AutoCad”

strB = “a”

intC = InStr(1 ,strA ,strB,vbTextCompare) ----->intC = 3

intC = InStr(1 ,strA ,strB,vbBinaryCompare) ----->intC = 14

intC = InStr(strA ,strB) ----->intC = 14

4.5.9. Hàm Ltrim, RTrim

Cú pháp

LTrim(String)

RTrim(String)

Trim(String)

Công dụng

Hàm LTrim xóa các khoảng trắng ở đầu một chuỗi, hàm RTrim xóa các khoảng trắng ở

cuối chuỗi, hàm Trim xóa khoảng trắng ở cả đầu và cuỗi chuỗi.

Ví dụ

Dim strA, strB as String

strA = “ VBA for AutoCad”

strB = LTrim(strA) ----->strB = “VBA for AutoCad”

strA = “ VBA for AutoCad ”

strB = RTrim(strA) ----->strB = “VBA for AutoCad”

strA = “ VBA for AutoCad ”

strB = Trim(strA) ----->strB = “VBA for AutoCad”

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

Basic VBA for AutoCad Page 36

4.5.10. Hàm Space

Cú pháp

Space(Number as Integer)

Công dụng

Hàm này tạo ra một chuỗi chứa Number khoảng trắng

Ví dụ

Dim strA, strB, strC as String

strA = “VBA for AutoCad”

strB = “Example Space function”

strC = strA & Space(3) & strB ----> strC “VBA for AutoCad Example Space function”

4.5.11. Hàm Split

Cú pháp

Split(String [, Delimiter] [, limit] [, Compare])

Công dụng

Hàm này tách một chuỗi dài thành một mảng gồm nhiều chuỗi nhỏ bằng ký tự khóa

Delimiter. Nếu ký tự khóa Delimiter là một chuỗi rỗng thì mảng trả về là toàn bộ chuỗi

String

Chú ý : Hàm này sẽ trả về một MẢNG gồm nhiều chuỗi nhỏ nên kiểu của biến trả về sẽ

là Mảng Động kiểu String hoặc Mảng Tĩnh kiểu String nếu tham số Limit được xác

định hoặc kiểu Variant.

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

Basic VBA for AutoCad Page 37

Giải thích

Tham số Ý Nghĩa

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

Delimiter Tham số tùy chọn, kiểu String – Chuỗi chứa giá trị làm giới hạn

chia (Mặc định sử dụng khoảng trắng làm giới hạn chia)

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

này sẽ trả về tất cả các chuỗi được chia.

Compare

Tham số tùy chọn – Xác đinh kiểu so sánh

vbBinaryCompare – Phân biệt chữ Hoa và chữ Thường (Giá

trị mặc định)

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

Ví dụ

Dim strA as String

Dim varB as Variant

strA = “VBA for AutoCad”

varB = Split(strA) ---> varB(0) = “VBA”:varB(1) = “for” : varB(2) = “AutoCad”

varB = Split(strA,“A”) ---> varB(0) = “VB”:varB(1) = “ for ” : varB(2) = “utoCad”

varB = Split(strA,“A”, ,vbTextCompare) ---> varB(0) = “VB”:varB(1) = “ for ” :

varB(2) = “utoC”:varB(3) = “d”

varB = Split(strA,“A”,2) ---> varB(0) = “VB”:varB(1) = “ for AutoCad”

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

Basic VBA for AutoCad Page 38

4.5.12. Hàm Replace

Cú pháp

Replace(String, Find, Replace[, start ] [, count] [, compare])

Công dụng

Hàm này trả về một chuỗi mới với việc thay thế chuỗi Find trong chuỗi String bằng

chuỗi Replace.

Giải thích

Tham số Ý Nghĩa

String Kiểu String – Chuỗi chứa ký tự thay thế

Find Kiểu String – Chuỗi chứa giá trị được thay thế

Replace Kiểu String –Chuỗi chứa giá trị thay thế.

Start Tham số tùy chọn, kiểu Integer/Long – Vị trí bắt đầu thay thế, chuỗi

mới sẽ bắt đầu từ vị trí này.Giá trị mặc định bằng 1

Count Tham số tùy chọn, kiểu Integer/Long – Số lần thay thế.Giá trị mặc

định là tất cả các vị trí sẽ được thay thế.

Compare

Tham số tùy chọn – Xác đinh kiểu so sánh

vbBinaryCompare – Phân biệt chữ Hoa và chữ Thường (Giá trị

mặc định)

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

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

Basic VBA for AutoCad Page 39

Ví dụ

Dim strA, strB as String

strA = “VBA for AutoCad”

strB = Replace(strA, “AutoCad”, “Excel”) ---> strB = “VBA for Excel”

strB = Repleca(strA,“A”, “B”, 5) ---> strB = “for ButoCad”

strB = Split(strA,“A”, “B”, 5, 3 ,vbTextCompare) ---> var = “for ButoCbd”

varB = Split(strA,“A”,2) ---> varB(0) = “VB”:varB(1) = “ for AutoCad”

4.5.13. Hàm StrComp

Cú pháp

StrComp(String_1, String_2 [, compare])

Công dụng

Hàm này dùng để so sánh hai chuỗi String_1 và String_2 với nhau.

Giải thích

Tham số Ý Nghĩa

String_1,

String_2 Kiểu String – Hai chuỗi dùng để so sánh với nhau

Compare

Tham số tùy chọn – Xác đinh kiểu so sánh

vbBinaryCompare – Phân biệt chữ Hoa và chữ Thường (Giá trị

mặc định)

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

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

Basic VBA for AutoCad Page 40

Giá trị trả về của hàm StrComp

String_1 < String_2 -1

String_1 =String_2 0

String_1 > String_2 1

Ví dụ

Dim strA, strB,StrC as String

strA = “VBA for AutoCad”

strB = “VBA for AutoCad”

strC = “VBA for Autocad”

Dim returnValue as Integer

returnValue = StrComp(strA, strB) ----> returnValue = 0

returnValue = StrComp(strA, strC) ----> returnValue = -1

returnValue = StrComp(strA, strC, vbTextCompare) ----> returnValue = 0

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

Basic VBA for AutoCad Page 41

Chương 5

CẤU TRÚC ĐIỀU KIỆN VÀ VÒNG LẶP

5.1. Cấu Trúc Điều Kiện

5.1.1. Cấu trúc : “If … Then …”

Trong trường hợp một dòng lệnh

If <Biểu thức điều kiện> Then <Khối lệnh>

Chú ý : Trong trường hợp một dòng lệnh thì không có từ khóa “End If ”

Trong trường hợp nhiều dòng lệnh

If <Biểu thức điều kiện> Then

<Khối lệnh>

End If

Sơ đồ khối

Diễn giải

Nếu <Biểu thức điều kiện> là ĐÚNG thì chương trình sẽ thực hiện <Khối Lệnh>, nếu

SAI sẽ thoát khỏi cấu trúc lệnh.

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

Basic VBA for AutoCad Page 42

Ví dụ

5.1.2. Cấu trúc : “If … Then… Else … End If”

Khi ta muốn xử lý trong trường hợp <Biểu thức điều kiện> trả về giá trị SAI thì ta sử dụng

cấu trúc điều kiện sau.

Cấu trúc

If <Biểu thức điều kiện> Then

<Khối lệnh_1>

Else

<Khối lệnh_2>

End If

Sơ đồ khối

Diễn giải

Nếu <Biểu thức điều kiện> là ĐÚNG thì chương trình sẽ thực hiện <Khối Lệnh_1>,

nếu SAI chương trình sẽ thực hiện <Khối Lệnh_2>.

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

Basic VBA for AutoCad Page 43

Ví dụ

5.1.3. Cấu trúc : “If … Then… Else … End If” mở rộng

Khi có nhiều <Biểu thức điều kiện> thì chúng ta sử dụng cấu trúc điều kiện mở rộng sau.

Cấu trúc

If <Biểu thức điều kiện_1> Then

<Khối Lệnh_1>

ElseIf <Biểu thức điều kiện_2> Then

<Khối Lệnh_2>

………………..

ElseIf <Biểu thức điều kiện_n-1> Then

<Khối Lệnh_n-1>

Else

<Khối Lệnh_n>

End If

Diễn giải cấu trúc :

Nếu <Biểu thức điều kiện_1> là ĐÚNG thì chương trình sẽ thực hiện <Khối Lệnh_1>,

nếu SAI chương trình sẽ kiểm tra lần lượt điều kiện từ <Biểu thức điều kiện_2> đến

<Biểu thức điều kiện_n-1>, nếu điều kiện nào ĐÚNG sẽ thực hiện <Khối Lệnh> tương

ứng đó và thoát khỏi cấu trúc này.Nếu không có <Biểu thức điều kiện> nào thỏa mãn

chương trình sẽ thực hiện <Khối Lệnh_n> sau từ khóa Else và thoát khỏi cấu trúc này.

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

Basic VBA for AutoCad Page 44

Ví dụ

5.1.4. Cấu trúc: “Select Case … Case…End Select”

Cấu trúc

Select Case <Biểu thức kiểm tra>

Case <Điều kiện_1>

<Khối Lệnh_1>

Case <Điều kiện_2>

<Khối Lệnh_2>

…………………

Case <Điều kiện_n>

<Khối Lệnh_n>

Case Else

<Khối Lệnh_Else>

End Select

Diễn giải

<Biểu thức kiểm tra> sẽ được so sánh từ <Điều kiện_1> đến <Điều kiện_n>, nếu

<Điều kiện_1> thỏa mãn <Biểu thức kiểm tra> thì <Khối Lệnh_i> đó được thực

hiện.Nếu tất cả các điều kiện không thỏa mãn thì <Khối Lệnh_Else> sẽ được thực

hiện.Từ khóa Case Else có thể có hoặc có thể không

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

Basic VBA for AutoCad Page 45

Ví dụ

5.2. Cấu Trúc Vòng Lặp

5.2.1. Cấu trúc: “For … Next”

Đây là vòng lặp thông thường nhất được sử dụng khi chúng ta đã biết chính xác số lần lặp.

Cấu trúc

For <Biến đếm>=<Giá trị đầu> To <Giá trị cuối> [Step <Bước nhảy>]

<Khối Lệnh>

Next

Một số chú ý

- For, To, Step, Next đây là các từ khóa mặc định của chương trình.

- <Biến đếm>, <Giá trị đầu>, <Giá trị cuối> phải là các giá trị số.

- Giá trị của <Bước nhảy> có thể Âm hoặc Dương

Nếu <Bước nhảy> là Dương thì <Giá trị đầu> phải nhỏ hơn hoặc bằng <Giá trị cuối>.

Nếu <Bước nhảy> là Âm thì <Giá trị đầu> phải lớn hơn hoặc bằng <Giá trị cuối>.

Nếu không chỉ ra giá trị cụ thể của <Bước nhảy> (Không có từ khóa Step) thì giá trị mặc định của <Bước nhảy> là 1

- Muốn thoát khỏi vòng lặp ta sử dụng từ khóa Exit For

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

Basic VBA for AutoCad Page 46

Cách làm việc của cấu trúc

- Ban đầu gán <Biến đếm> bằng với <Giá trị bắt đầu>

- So sánh <Biến đếm> với <Giá trị cuối>

Nếu <Bước nhảy> là Dương

Nếu <Biến đếm> nhỏ hơn hoặc bằng <Giá trị cuối> thì thực hiện <Khối

Lệnh> và tự động cộng thêm một giá trị bằng <Bước nhảy> nếu có từ khóa

Step còn không sẽ cộng thêm 1 và quay lại bước so sánh <Biến đếm> với <Giá

trị cuối>.

Nếu <Biến đếm> lớn hơn <Giá trị cuối> sẽ kết thúc vòng lặp.

Nếu <Bước nhảy> là Âm

Nếu <Biến đếm> lớn hơn hoặc bằng <Giá trị cuối> thì thực hiện <Khối Lệnh>

và tự động cộng thêm vào <biến đếm> một giá trị bằng <Bước nhảy> nếu có

từ khóa Step còn không sẽ cộng thêm 1 và quay lại bước so sánh <Biến đếm>

với <Giá trị cuối>.

Nếu <Biến đếm> nhỏ hơn <Giá trị cuối> sẽ kết thúc vòng lặp.

Ví dụ : Ví dụ này sẽ tính tổng của các số từ 1 đển 50

Ví dụ Ví dụ này sẽ tính tổng các số chẵn từ 0 đến 50

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

Basic VBA for AutoCad Page 47

5.2.2. Cấu trúc : “For Each … Next”

Đối với một tập hợp các phần tử hoặc một mảng chúng ta không thể xác định cụ thể số

phần tử của nó thì việc lặp một khối lệnh nào đó sẽ trở nên khó khăn.Để giải quyết vấn đề

này chúng ta sử dụng cấu trúc For Each … Next.

Cấu trúc :

For Each <Phần Tử> In <Tập hợp>

<Khối Lệnh>

Next

Một số chú ý :

- For Each, In, Next là các từ khóa mặc định của chương trình.

- <Biến chạy> sẽ nhận giá trị từ phần tử đầu tiên đến phần tử cuối cùng trong <Tập

hợp>.Ứng với mỗi giá trị của biến chạy thì <Khối Lệnh> sẽ được thực hiện một lần.

- Nếu <Tập hợp> là một “Tập các đối tượng” thì kiểu dữ liệu của <Biến chạy> có thể

là Variant hoặc cùng kiểu với kiểu của các đối tượng trong tập hợp đó.Nếu <Tập

hợp> là Mảng thì kiểu dữ liệu của <Biến chạy> chỉ có thể là Variant.

- Để thoát khỏi vòng lặp chúng ta sử dụng từ khóa Exit For.

Ví dụ

Ví dụ này sẽ duyệt qua tập đối tượng Blocks trong bản vẽ, nếu tìm thấy Block có tên

“Section” thì giá trị TF_Section sẽ bằng True và thoát khỏi vòng lặp

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

Basic VBA for AutoCad Page 48

5.2.3. Cấu trúc : “Do While … Loop”

Cấu trúc

Do While <Điều kiện>

<Khối Lệnh>

Loop

Chú ý

- Với cấu trúc này <Điều kiện> sẽ được kiểm tra trước khi vào vòng lặp, <Khối Lệnh>

chỉ được thực hiện khi <Điều kiện> là ĐÚNG.

- Muốn thoát khỏi vòng lặp này ta sử dụng từ khóa Exit Do

Ví dụ

5.2.4. Cấu trúc : “Do … Loop While”

Cấu trúc

Do

<Khối Lệnh>

Loop While <Điều kiện>

Chú ý

- Với cấu trúc này <Điều kiện> được kiểm tra sau khi <Khối lệnh> được thực hiện, do đó

<Khối lệnh> có ít nhất 1 lần được thực thi.Khi <Điều kiện> là ĐÚNG sẽ tiếp tục thực

hiện vòng lặp.

- Để thoát khỏi vòng lặp ta sử dụng từ khóa Exit Do

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

Basic VBA for AutoCad Page 49

5.2.5. Cấu trúc : “Do Until … Loop”

Cấu trúc

Do Until <Điều kiện>

<Khối Lệnh>

Loop

Chú ý

Với cấu trúc này thì <Điều kiện> sẽ được kiểm tra ở đầu vòng lặp và <Khối Lệnh> sẽ

được thực hiện khi <Điều kiện> là SAI.

- Để thoát khỏi vòng lặp ta sử dụng từ khóa Exit Do

Ví dụ

5.2.6. Cấu trúc : “Do … Loop Until ”

Cấu trúc

Do

<Khối Lệnh>

Loop Until <Điều kiện>

Chú ý

- Tương tự như cấu trúc “Do … Loop While” cấu trúc này cũng sẽ kiểm tra <Điều kiện>

sau khi thực hiện <Khối Lệnh>, do đó <Khối Lệnh> có ít nhất 1 lần được thực thi.Nếu

<Điều kiện> là SAI thì sẽ tiếp tục vòng lặp.

- Để thoát khỏi vòng lặp ta sử dụng từ khóa Exit Do

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

Basic VBA for AutoCad Page 50

Chương 6

CÁC HÀM NHẬP LIỆU

Nội dung chương :

- Giới thiệu về đối tượng Utility và các phương thức có trong đối tượng này

- Giới thiệu về phương thức Prompt

- Giới thiệu về phương thức GetString

- Giới thiệu về phương thức GetPoint

- Giới thiệu về phương thức GetInteger, GetReal

- Giới thiệu về phương thức GetDistance

- Giới thiệu về phương thức GetKeyWord

- Giới thiệu về phương thức GetCorner

- Giới thiệu về phương thức GetEntity

- Giới thiệu về phương thức InitializeUserInput

Trong lập trình VBA cho Autocad tương tác giữa người dùng và chương trình là một yếu tố

thiết yếu.Thông qua sự tương tác này người sử dụng có thể nhập dữ liệu và điều khiển chương

trình hoạt động.Trong VBA việc nhập dữ liệu được hỗ trợ thông qua đối tượng Utility – một

thuộc tính của đối tượng Thisdrawing.

Mỗi phương thức nhập liệu từ người dùng đều hiển thị dấu nhắc trên dòng lệnh của Autocad

cho phép người dùng nhập dữ liệu từ Dòng Lệnh hoặc từ Màn Hình Đồ Họa của Autocad và

trả về giá trị phù hợp với kiểu giá trị cần nhập vào.Ví dụ phương thức GetString trả về kiểu

String, phương thức GetInteger trả về kiểu Integer, phương thức GetPoint trả về kiểu

Variant (sẽ là mảng 1 chiều 3 phần tử kiểu Double)…Ta có thể kiểm soát việc nhập dữ liệu từ

người dùng bằng cách sử dụng phương thức InitializeUserInput, với phương thức này cho

phép ta điều khiển nhiều thứ như :không thể nhập vào số âm, không thể nhập vào giá trị

Null…

Dưới đây là một số hàm nhập liệu thường dùng.

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

Basic VBA for AutoCad Page 51

6.1. Phương thức : Prompt

Công dụng

Phương thức Prompt được dùng để gửi một thông báo đến người dùng trước khi hoặc sau

khi một nội dung nào đó đã đuợc thực hiện thông qua dòng lệnh của AutoCad.

Cú pháp

Thisdrawing.Utility.Prompt Mesage

Với Message là chuỗi thông báo sẽ được hiển thị tại dòng lệnh của AutoCad

Ví dụ

Sau khi chạy ví dụ trên, màn hình Autocad hiện kết quả như sau:

Để dòng thông báo xuất hiện trên một dòng ta thêm vào hằng số vbCrLf như sau

Lúc này kết quả như sau:

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

Basic VBA for AutoCad Page 52

6.2. Phương thức: GetString

Công dụng

Yêu cầu người dùng nhập vào một chuỗi tại dòng lệnh của Autocad

Cú pháp

StrObj = Thisdrawing.Utility.GetString (HasSpaces [, Prompt])

Giải thích

Tham số Giải thích

StrObj Kiểu String - ThôBiến chứa giá trị chuỗi do người dùng nhập vào

HasSpaces

Kiểu Boolean, điều khiển việc nhập “dấu cách”

Nếu HasSpaces = TRUE người dùng có thể nhập “dấu cách” trong

chuỗi, chỉ có thể nhấn Enter để kết thúc lệnh.

Nếu HasSpaces =FALSE người dùng không thể nhập “dấu cách”

trong chuỗi,nhấn Space hoặc Enter đều có thể kết thúc lệnh

Prompt Tham số tùy chọn kiểu String - Là chuỗi sẽ hiển thị trên dòng lệnh

của Autocad nhắc người dùng nhập dữ liệu.

Ví dụ

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

Basic VBA for AutoCad Page 53

6.3. Phương thức : GetPoint

Công dụng

Phương thức này sẽ yêu cầu người dùng nhập vào một điểm bằng cách nhập tọa độ trực

tiếp từ dòng lệnh hoặc chọn điểm trên màn hình.

Cú pháp

PointObj = Thisdrawing.Utility.GetPoint ([Base Point] [, Prompt ])

Giải thích

Tham số Giải thích

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

nhập vào

Base Point

Tham số tùy chọn – Điểm tham chiếu đến điểm được nhập vào.Nếu

có tham số Base Point sẽ xuất hiện “sợi dây thun” nối từ điểm Base

Point đến vị trí con trỏ chuột.

Prompt Tham số tùy chọn kiểu String- Là chuỗi sẽ hiển thị trên dòng lệnh

của Autocad nhắc người dùng nhập dữ liệu.

Ví dụ

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

Basic VBA for AutoCad Page 54

6.4. Phương thức : GetInteger và GetReal

Công dụng

Phương thức GetInteger sẽ yêu cầu người sử dụng nhập vào một số nguyên, còn phương

thức GetReal sẽ yên cầu người dùng nhập vào một số thực

Cú pháp

IntValue = Thisdrawing.Utitlity.GetInteger ([Prompt])

DblValue = Thisdrawing.Utitlity.GetReal ([Prompt])

Giải thích

Tham số Giải thích

IntValue Kiểu Integer - Biến chứa giá trị số nguyên do người dùng nhập vào

DblValue Kiểu Double - Biến chứa giá trị số thực do người dùng nhập vào

Prompt Tham số tùy chọn, kiểu String– Chuỗi ký tự hiện trên dòng lệnh của

AutoCad yêu cầu người dùng nhập dữ liệu vào

Ví dụ

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

Basic VBA for AutoCad Page 55

6.5. Phương thức : GetDistance

Công dụng

Phương thức này sẽ yêu cầu người dùng nhập vào giá trị khoảng cách, giá trị này có thể

được nhập từ dòng lệnh hoặc có thể được chọn 2 điểm trên màn hình bản vẽ.

Cú pháp

DistValue = Thisdrawing.Utility.GetDistance ([Point] [,Prompt])

Giải thích

Tham số Giải thích

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

vào.

Point

Tham số tùy chọn, kiểu Variant/Double – mảng 1 chiều có 3 phần

tử thể hiện tọa độ của điểm cơ sở để tính khoảng cách.

Nếu tham số này CÓ thì người dùng có thể nhập khoảng cách

hoặc chọn thêm một điểm để xác định khoảng cách.

Nếu tham số này KHÔNG CÓ thì người dùng có thể nhập giá trị

khoảng cách hoặc chọn 2 điểm để xác định khoảng cách.

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

Autocad nhắc người dùng nhập dữ liệu

Chú ý

Phương thức GetDistance cho phép người dùng nhập vào một số âm và sẽ trả về một số

âm tương ứng.Khi người dùng chọn điểm trên màn hình thì phương thức này luôn trả về giá

trị tuyệt đối của khoảng cách giữa hai điểm.

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

Basic VBA for AutoCad Page 56

Ví dụ

6.6. Phương thức : GetKeyWord

Công dụng

Phương thức này sẽ yêu cầu người dùng nhập vào từ khóa ở dòng lệnh của AutoCad

Cú pháp

StrKeyword = Thisdrawing.Utility.GetKeyWord ([Prompt])

Giải thích

Tham số Giải thích

StrKeyword Kiểu String – Biến chứa giá trị do người dùng nhập vào

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

Autocad nhắc người dùng nhập dữ liệu

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

Basic VBA for AutoCad Page 57

Ví dụ

6.7. Phương thức GetEntity

Công dụng

Phương thức này được sử dụng để lấy MỘT ĐỐI TƯỢNG của Autocad bằng cách yêu

cầu người dùng chọn trực tiếp trên màn hình bản vẽ.

Cú pháp

Thisdrawing.Utility.GetEntity PickedEntity, PickPoint [, Prompt]

Giải thích

Tham số Giải thích

PickedEntity Biến chứa đối tượng được chọn.

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

kích chuột chọn đối tượng.

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

Autocad nhắc người dùng nhập dữ liệu

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

Basic VBA for AutoCad Page 58

Ví dụ

Ví dụ này sẽ yêu cầu người dùng chọn một đối tượng trên màn hình bản vẽ, sau đó sẽ

thông báo về loại đối tượng đã được chọn và tọa độ điểm chọn đó.

6.8. Phương thức: GetCorner

Công dụng

Phương thức này yêu cầu người dùng nhập một điểm trên dòng lệnh hoặc chọn một điểm

trên màn hình bản vẽ - điểm này chính là một góc của một hình chữ nhật.

Cú pháp

VarPoint =Thisdrawing.Utility.GetCorner (BasePoint [,Prompt])

Giải thích

Tham số Giải thích

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

góc của hình chữ nhật

BasePoint Mảng 1 chiều 3 phần tử - Thể hiện góc thứ nhất của hình chữ nhật

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

Autocad nhắc người dùng nhập dữ liệu

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

Basic VBA for AutoCad Page 59

Ví dụ

6.9. Phương thức : InitializeUserInput

Công dụng

Phương thức InitializeUserInput dùng để định nghĩa các từ khóa hoặc hạn chế việc nhập

dữ liệu trong các phương thức như GetDistance, GetInteger, GetKeyword, GetPoint,

GetReal, GetCorner…

Cú pháp

Thisdrawing.Utility. InitializeUserInput Bits [,Keyword]

Giải thích

Tham số Giải thích

Bits Kiểu Integer - Giá trị tham số này bằng tổng các Bit Code tương

ứng với các chế độ kiểm soát mà ta mong muốn

Keyword Tham số tùy chọn kiểu String chứa danh sách các từ khóa

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

Basic VBA for AutoCad Page 60

Một số giá trị Bit Code và chế độ kiểm soát tương ứng thường dùng

Bit Code Chế độ kiểm soát

1 Giá trị PHẢI được nhập vào, không chấp nhận giá trị Null (Chỉ

nhấn phím Enter mà không nhập giá trị)

2 Giá trị nhập phải khác 0

4 Giá trị nhập không được là số âm

64

Dùng cho hàm GetDistance, bit code này sẽ loại bỏ tọa độ Z của hai

điểm cần tính khoảng cách (tương tự như việc chiếu 2 điểm này lên

mặt phẳng XY, sau đó tính khoảng cách giữa hai điểm chiếu này)

128

Cho phép nhập chuỗi ký tự không có trong danh sách các từ

khóa.Các Bit Code khác sẽ được ưu tiên trước nhưng nếu Bit Code

1 và Bit Code 128 được sử dụng cùng lúc với nhau (BITS=129) thì

giá trị Null nhập vào sẽ được chuyển thành chuỗi rỗng

Ví dụ

Ví dụ này sẽ thông báo dữ liệu nhập vào phải khác rỗng, khác không và không âm

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

Basic VBA for AutoCad Page 61

Chương 7

TẠO MỚI ĐỐI TƯỢNG TRONG AUTOCAD

Nội dung chương :

- Khái niệm về ModelSpace và PaperSpace

- Cách tạo mới một số đối tượng chính trong AutoCad như Line, Circle, Arc, Text,

Mtext…

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

Basic VBA for AutoCad Page 62

7.1. Xác định nơi chứa đối tượng

Trong AutoCad tất cả các đối tượng đồ họa đều được tạo trong tập đối tượng ModelSpace

(Không gian mô hình), tập đối tượng PaperSpace (Không gian in) hoặc trong đối tượng

Block.Tuy nhiên được sử dụng nhiều nhất là hai tập đối tượng ModelSpace và PaperSpace.

ModelSpace :Đây là nơi chủ yếu các đối tượng đồ họa cấu thành nên bản vẽ sẽ được thực

hiện.Trong AutoCad chỉ có một không gian mô hình tương ứng với nó chính là thẻ Model

nằm ở góc dưới màn hình bản vẽ.

PaperSpace : PaperSpace cũng cho phép chứa các đối tượng đồ họa, nhưng mục đích

chính của PaperSpace là để bố trí và in ấn bản vẽ.PaperSpace thường chứa các khung nhìn

theo một tỉ lệ định trước thể hiện một phần bản vẽ bên ModelSpace.Trong AutoCad người

dùng có thể tạo nhiều không gian in khác nhau, mỗi không gian in tương ứng với một thẻ

Layout nằm ở góc dưới màn hình bản vẽ.Để truy cập đến các không gian in ta sử dụng tập

đối tượng Layouts.

Tại một thời điểm hoặc ModelSpace hoặc PaperSpace là hiện hành.Chúng ta dùng thuộc tính

ActiveSpace có trong đối tượng Thisdrawing để thiết lập sự hiện hành của một không gian.

Ví dụ

Ví dụ này sẽ thông báo ModelSpace hay PaperSpace là hiện hành

Ví dụ

Ví dụ này sẽ chuyển đổi qua lại giữa ModelSpace và PaperSpace

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

Basic VBA for AutoCad Page 63

7.2. Khai báo và phương thức tạo đối tượng hình học

7.2.1. Tạo đường thẳng –Phương thức AddLine

Cú pháp

Set LineObj = Thisdrawing.SPACE.AddLine (StartPoint, EndPoint)

Giải thích

Tham số Giải thích

LineObj Kiểu acadLine – Biến chứa đoạn thẳng được trả về

SPACE Không gian chứa đối tượng Line : ModelSpace hoặc PaperSpace

StartPoint,

EndPoint

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

điểm đầu và điểm cuối của đoạn thẳng được tạo

Ví dụ

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

Basic VBA for AutoCad Page 64

7.2.2. Tạo đối tượng LWPolyline - Phương thức AddLightWeightPolyline

Để tạo một đối tượng gồm nhiều đoạn thẳng liên tiếp đi qua các điểm chúng ta sử dụng

phương thức AddLightWeightPolyline

Cú pháp

Set LWPolylineObj = Thisdrawing.SPACE.AddLightWeightPolyline (Points)

Giải thích

Tham số Giải thích

LWPolylineObj Kiểu acadLWPolyline –Biến chứa đối tượng LightWeightPolyline

SPACE Không gian chứa đối tượng Line : ModelSpace hoặc PaperSpace

Points

Tham số kiểu Double chứa tọa độ đỉnh của đa tuyến.Mỗi đỉnh chỉ

có 2 thành phần x và y.Vì vậy số phần tử của tham số Points luôn là

số chẵn.

Ví dụ Ví dụ này sẽ tạo ra một đa tuyến gồm nhiều đoạn thẳng liên tiếp đi qua các điểm,

khi muốn kết thúc thì nhấn phím Enter hoặc nhấn ESC

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

Basic VBA for AutoCad Page 65

7.2.3. Tạo đối tượng đường tròn – Phương thức AddCircle

Cú pháp

Set CircleObj = Thisdrawing.SPACE.AddCircle (CenterPoint, Radius)

Giải thích

Tham số Giải thích

CircleObj Kiểu acadCircle –Biến chứa đường tròn được tạo.

SPACE Không gian chứa đối tượng Line : ModelSpace hoặc PaperSpace

CenterPoint Kiểu Variant hoặc mảng 3 phần tử kiểu Double –Thể hiện tọa độ tâm

của đường tròn

Radius Kiểu Double – Bán kính của đường tròn nhập vào

Ví dụ

Ví dụ

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

Basic VBA for AutoCad Page 66

7.2.4. Tạo đối tượng cung tròn –Phương thức AddArc

Cú pháp

Set ArcObj = Thisdrawing.SPACE.AddArc (CenterPoint, Radius, StartAngle, EndAngle)

Giải thích

Tham số Giải thích

ArcObj Kiểu acadArc - Biến chứa đối tượng Arc được tạo

SPACE Không gian chứa đối tượng Line : ModelSpace hoặc PaperSpace

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

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

StartAngle,EndAngle Kiểu Double – Góc bắt đầu và kết thúc của cung tròn (Tính bằng Radian).Phương thức này sẽ vẽ cung tròn theo chiều ngược chiều kim đồng hồ từ góc StartAngle đến góc EndAngle.

Ví dụ

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

Basic VBA for AutoCad Page 67

7.2.5. Tạo đối tượng văn bản đơn - phương thức AddText

Cú pháp

Set TextObj = thisdrawing.SPACE.AddText (TextString, InsertPoint,Height)

Giải thích

Tham số Giải thích

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

SPACE Không gian chứa đối tượng Line : ModelSpace hoặc PaperSpace

TextString Kiểu String – Là chuỗi hiển thị trên bản vẽ

InsertPoint Kiểu Variant hoặc mảng 3 phần tử kiểu Double xác định điểm chèn chuỗi văn bản.

Height Kiểu Double – Xác định chiều cao chữ được tạo

Chú ý: Văn bản được tạo sẽ sử dụng kiểu chữ hiện hành với những thiết lập mặc định về

phông chữ và định dạng

Ví dụ

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

Basic VBA for AutoCad Page 68

7.2.6. Tạo đối tượng văn bản nhiều dòng-Phương thức AddMtext

Cú pháp

Set MtextObj = Thisdrawing.SPACE.AddMText (InsertPoint, Width, TextString)

Giải thích

Tham số Giải thích

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

SPACE Không gian chứa đối tượng Line : ModelSpace hoặc PaperSpace

InsertPoint Kiểu Variant hoặc mảng 3 phần tử kiểu Double xác định điểm chèn

chuỗi văn bản.

Width Kiểu Double – Xác định bề rộng của văn bản được hiển thị

TextString Kiểu String – Là chuỗi hiển thị trên bản vẽ

Ví dụ Ví dụ này sẽ tạo một đối tượng Mtext trong ModelSpace, sau đó tiến hành đổi

màu thành Magenta đồng thời thiết lập chế độ căn lề là “Middle Center” cho đối tượng

MText này.

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

Basic VBA for AutoCad Page 69

Chương 8

LÀM VIỆC VỚI ĐỐI TƯỢNG SELECTIONSET

Nội dung chương :

- Khai báo và khởi tạo một đối tượng SelectionSet

- Giới thiệu một số phương thức chọn đối tượng thường dùng

- Kết hợp bộ lọc đối tượng vào các phương thức chọn đối tượng

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

Basic VBA for AutoCad Page 70

8.1. Quy trình làm việc với đối tượng SelectionSet

Đôi tượng SelectionSet được sử dụng để chứa các đối tượng được chọn trong bản vẽ.Mỗi đối

tượng SlectionSet có nhiều phương thức để thêm đối tượng vào nó như AddItems,

SelectOnScreen…

Mỗi bản vẽ Autocad đều có một tập đối tượng SelectionSets chứa các đối tượng SelectionSet

trong bản vẽ.Người dùng có thể tạo ra nhiều đối tượng SelectionSet bằng cách dùng phương

thức Add có trong tập đối tượng SelectionSets.

Đối tượng SelectionSet chỉ có tính chất tạm thời nghĩa là khi đóng bản vẽ lại thì mọi đối tượng

SelectionSet sẽ là một tập rỗng.

Quá trình làm việc với đối tượng SelectionSet gồm các bước sau:

- Khai báo đối tượng SelectionSet

- Khởi tạo đối tượng SelectionSet.

- Thêm các đối tượng vào SelectionSet

- Thực hiện các thao tác cần thiết trên các đối tượng trong SelectionSet

8.2. Khai báo và khởi tạo đối tượng SelectionSet

Cú pháp

Set SelectionSetObj = Thisdrawing.SelectionSets.Add (SelectionSetName)

Giải thích

Tham số Giải thích

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

được tạo

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

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

Basic VBA for AutoCad Page 71

Ví dụ

Giải thích dòng lệnh

- Dòng mã lệnh số 1: Tắt các thông báo lỗi khi xuất hiện

- Dòng mã lệnh số 2: Khai báo đối tượng SelectionSet

- Dòng mã lệnh số 3: Nếu đối tượng SelectionSet có tên “Kira” tồn tại thì sẽ được gán cho

đối tượng SelectionSetObj.

- Dòng mã lệnh số 4: Nếu đối tượng SelectionSet có tên “Kira” chưa tồn tại thì sẽ xuất

hiện lỗi.

- Dòng mã lệnh số 5: Xóa lỗi xảy ra.

- Dòng mã lệnh số 6: Khởi tạo đối tượng SelectionSet có tên “Kira”

- Dòng mã lệnh số 7: Nếu đã tồn tại đối tượng SelectionSet có tên “Kira” thì sẽ xóa bỏ nội

dung bên trong đối tượng này.

8.3. Thêm đối tượng vào trong một SelectionSet

Để thêm các đối tượng hình học vào trong một SelectionSet chúng ta sử dụng phương thức có

sẵn trong đối tượng SelectionSet như AddItems, Select, SelectAtPoint, SelectionOnScreen,

SelectByPolygon…

Tùy thuộc vào mỗi phương thức được sử dụng mà có các tham số tương ứng đi kèm khác

nhau.Sau đây là một số phương thức thường được sử dụng.

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

Basic VBA for AutoCad Page 72

8.3.1. Phương thức AddItems

Phương thức này dùng để thêm TỪNG ĐỐI TƯỢNG hình học vào trong đối tượng

SelectionSet.

Cú pháp

SelectionSetObj.AddItems ArrayObj

Giải thích

Tham số Giải thích

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

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

Ví dụ

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

Basic VBA for AutoCad Page 73

8.3.2. Phương thức Select

Phương thức Select là một phương thức cơ bản của đối tượng SelectionSet.Với phương

thức này thì người dùng sẽ có nhiều lựa chọn khác nhau để thêm đối tượng vào trong đối

tượng SelectionSet tùy thuộc vào việc sử dụng các tham số của phương thức.

Cú pháp

SelectionSetObj.Select Mode [, Point_1] [, Point_2] [, FilterType] [, FilterData]

Giải thích

Tham số Giải thích

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

tạo

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

Point_1

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

tọa độ điểm thứ nhất của cửa sổ lựa chọn, sử dụng kết hợp với tham

số Point_2

Point_2

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

độ điểm thứ hai của cửa sổ lựa chọn, sử dụng kết hợp với tham số

Point_1

FilterType,

FilterData

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

lọc đối tượng”)

Giới thiệu tham số Mode

Tham số Mode sẽ xác định cách thức lựa chọn đối tượng khi sử dụng phương thức Select.

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

Basic VBA for AutoCad Page 74

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

Mode Giá trị Ý nghĩa

acSelectionSetWindow 0

Chọn tất cả các đối tượng nằm trong hình chữ nhật

giới hạn bởi hai điểm Point_1, Point_2.Hai tham số

Point_1, Point_2 bắt buộc phải được sử dụng

acSelectionSetCrossing 1

Chọn tất cả các đối tượng nằm trong hoặc bị cắt

bởi hình chữ nhật giới hạn bởi hai điểm Point_1,

Point_2.Hai tham số Point_1, Point_2 bắt buộc

phải được sử dụng

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

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

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

Point_1, Point_2 được bỏ qua

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

Point_1, Point_2 được bỏ qua

Ví dụ

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

Basic VBA for AutoCad Page 75

8.3.3. Phương Thức SelectOnScreen

Phương thức này sẽ hiện thị dòng nhắc “Select Object:” tại dòng lệnh và cho phép người

dùng chọn đối tượng trực tiếp trên màn hình bản vẽ bằng nhiều cách.Cách thao tác này

giống như một số lệnh thông thường của AutoCad như Copy, Move, Delete…

Với phương thức này thì hai tham số Point_1 và Point_2 không được sử dụng, hai tham số

xác đinh chế độ lọc FilterType và FilterData có thể được sử dụng.

Cú pháp

SelectionSetObj.SelectOnScreen [FilterType] [, FilterData]

Giải thích

Tham số Giải thích

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

tạo ra

FilterType,

FilterData

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

lọc đối tượng”)

Ví dụ

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

Basic VBA for AutoCad Page 76

8.3.4. Thao tác với các đối tượng trong SelectionSet

Mục đích chính của đối tượng SelectionSet là nhóm các đối tượng hình học lại để hiệu

chỉnh các đối tượng trong đó một cách dễ dàng hơn.Do vậy để truy cập đến các đối tượng

trong nằm trong SelectionSet ta sử dụng cấu trúc “For Each….Next”

Ví dụ

Ví dụ này sẽ yêu cầu người dùng chọn các đối tượng trên màn hình bản vẽ, sau đó đổi màu

các đối tượng được chọn thành màu đỏ.

8.4. Bộ lọc cho đối tượng SelectionSet

Trong quá trình thao tác với đối tượng SelectionSet, đôi khi ta muốn giới hạn việc chọn đối

tượng theo một điều kiện nào đó như chỉ chọn các đối tượng Line, Circle… hoặc đơn giản

chọn các đối tượng thuộc một Layer nào đó hoặc đối tượng có màu nào đó….Để thực hiện

điều này cần xác định “Kiểu bộ lọc” và “Đối tượng lọc”.Kiểu bộ lọc chính là tham số

FilterType và Đối tượng lọc chính là FilterData.

- FilterType : Kiểu Integer, là mảng 1 chiều chứa mã Dxf xác định “Kiểu lọc đối tượng”.

- FilterData : Kiểu Variant, là mảng một chiều chứa “Đối tượng lọc”.

Chú ý : Quan hệ giữa FilterType và FilterData là quan hệ 1:1 nên số phần tử trong mảng

FilterType và FilterData phải bằng nhau.

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

Basic VBA for AutoCad Page 77

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

Mã Dxf Ý nghĩa

0 Kiểu String – Thể hiện loại đối tượng như: Line, PolyLine, LWPolyline,

Spline, Circle, Arc, Text, Mtext,Dimension…

1 Chuỗi văn bản chứa trong đối tượng Text, Mtext.

2 Kiểu String – Thể hiện tên của Block.

6 Kiểu String – Thể hiện LineType của các đối tượng.

7 Kiểu String – Tên TextStyle

8 Kiểu String – Thể hiện tên của Layer

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

CenterPoint của Circle…

62 Kiểu Integer – Xác định màu của đối tượng: 0=ByBlock, 1=Red,

2=Yellow….256=ByLayer.

67 Kiểu Integer – Xác định không gian (0 = ModelSpace ; 1 = PaperSpace)

-4 Các toán tử điều kiện (Sử dụng khi kết hợp nhiều điều kiện lọc).

8.4.1. Lọc theo một điều kiện

Khi lọc theo một điều kiện thì hai tham số FilterType và FilterData là mảng một chiều 1

phần tử.

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

Basic VBA for AutoCad Page 78

Ví dụ Đoạn mã sau sẽ chọn duy nhất đối tượng Line trong bản vẽ sau đó sẽ đổi tất cả các

Line được chọn này thành màu đỏ.

8.4.2. Lọc theo nhiều điều kiện

Khi cần lọc đối tượng theo nhiều điều kiện kết hợp ta sử dụng “Toán tử điều kiện” vào

trong bộ lọc, lúc này các điều kiện lọc sẽ được đặt giữa các “Toán tử điều kiện”.

Toán tử Giá trị

bắt đầu

Giá trị

kết thúc

Số lượng điều

kiện loc Ý nghĩa

AND “<And” “And>” >=1 Đối tượng nào thỏa mãn tất cả các điều kiện lọc sẽ được chọn

OR “<Or” “Or>” >=1 Đối tượng nào thỏa mãn một trong các điều kiện sẽ được chọn.

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

NOT “<Not” “Not>” 1 Đối tượng nào không thỏa mãn điều kiện lọc sẽ được chọn

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

Basic VBA for AutoCad Page 79

Ví dụ

Đoạn mã sau sau sẽ lọc theo nhiều điều kiện, những đối tượng nào là đường thẳng hoặc

đường tròn sẽ được chọn, sau đó sẽ đổi màu chúng thành màu đỏ.

Tóm lược điều kiện

“<Or” (Line, Circle) “Or>”

Triểu khai dạng code

Ví dụ

Đoạn mã sau sẽ chọn những đối tượng nào là Text hoặc Mtext nhưng không thuộc Layer có

tên “DefPoints”, sau đó đổi chúng về Layer có tên “Text_3”

Tóm tắt điều kiện

“<And”(”<Or”(Text, Mtext)”Or>),”<Not”(Defpoints)”Not>”)”And>”

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

Basic VBA for AutoCad Page 80

Triển khai dạng code

8.5. Một số phương thức khác của đối tượng SelectionSet

8.5.1. Phương thức RemoveItems

Phương thức này sẽ loại bỏ một hoặc nhiều đối tượng ra khỏi SelectionSet.Các đối tượng

này sẽ không nằm trong SelectionSet nữa NHƯNG vẫn tồn tại trong bản vẽ.

Cú pháp

SelectionSetObj.RemoveItems ArrayObj

Giải thích

Tham số Giải thích

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

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

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

Basic VBA for AutoCad Page 81

Ví dụ

Đoạn code sau sẽ thực hiện việc tạo đối Circle và đối tượng Ellipse trong ModelSpace, sau

đó sẽ thêm tất cả các đối tượng trong ModelSpace vào SelectionSetObj (Kể cả 2 đối tượng

Circle và Ellipse vừa mới tạo) tiếp theo đó sẽ Remove 2 đối tượng Cirle và Ellipse này ra

khỏi SelectionSet.

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

Basic VBA for AutoCad Page 82

8.5.2. Phương thức Clear

Khi phương thức Clear được thực thi nó sẽ loại bỏ tất cả các đối tượng ra khỏi SelectionSet

NHƯNG bản thân đối tượng SelectionSet và các đối tượng đó vẫn tồn tại trong bản vẽ.Đối

tượng SelectionSet lúc này trở thành một tập rỗng.

Cú pháp

SelectionSetObj.Clear

8.5.3. Phương thức Eraser

Khi phương thức Eraser được thực thi nó sẽ loại bỏ tất cả các đối tượng ra khỏi SelectionSet

đồng thời xóa luôn các đối tượng này khỏi bản vẽ NHƯNG đối tượng SelectionSet vẫn còn

tồn tại.Đối tượng SelectionSet lúc này là một tập rỗng.

Cú pháp

SelectionSetObj.Eraser

8.5.4. Phương thức Delete

Khi phương thức Delete được thực thi nó sẽ xóa đối tượng SelectionSet ra khỏi bản vẽ

NHƯNG các đối tượng nằm trong SelectionSet vẫn còn tồn tại trong bản vẽ.

Cú pháp

SelectionSetObj.Delete

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

Basic VBA for AutoCad Page 83

Bài Tập chủ đề: Làm việc với đối tượng SelectionSet

Bài 1:

Khai báo và khởi tạo đối tượng SelectionSetObj có tên “PTSCMC”,đồng thời sử dụng bộ lọc 1

điều kiện để chọn tất cả các Block có tên do người dùng nhập vào.

Bài 2:

Khai báo và khởi tạo đối tượng SelectionSet có tên “Design_Team”, đồng thời sử dụng bộ lọc

nhiều điều kiện kết hợp để chọn đối tượng Line có màu Xanh Lá và không thuộc Layer có tên

“Defpoints”.Sau đó thực hiện thao tác Delete tất cả các Line vuông góc với trục Ox.

Bài 3:

Thông thường các kích thước nằm rải rác ở các Layer khác nhau.Hãy viết chương trình tạo ra

một đối tượng SelectionSet có tên “Dimension” và chuyển chúng sang một Layer

mới.Chương trình sẽ hỏi người sử dụng tên Layer mới này.

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

Basic VBA for AutoCad Page 84

Chương 9

HIỆU CHỈNH CÁC ĐỐI TƯỢNG HÌNH HỌC

Nội dung chuyên đề :

- Tổng quan về hiệu chỉnh các đối tượng hình học trong VBA

- Giới thiệu về phương thức Copy

- Giới thiệu về phương thức Delete

- Giới thiệu về phương thức Move

- Giới thiệu về phương thức Mirror

- Giới thiệu về phương thức Offset

- Giới thiệu về phương thức Rotate

- Giới thiệu về phương thức Phương thức ScaleEntity

- Giới thiệu về thuộc tính Color

- Giới thiệu về thuộc tính Layer

- Giới thiệu về thuộc tính LineType

- Giới thiệu về thuộc tính LineWeight

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

Basic VBA for AutoCad Page 85

9.1. Tổng quan về việc hiệu chỉnh các đối tượng hình học bằng VBA

Trong VBA việc hiệu chỉnh các đối tượng hình học có thể thực hiện thông qua các phương

thức hoặc thuộc tính của đối tượng

Phương thức dùng để thay đổi về hình dáng, kích thước vị trí của đối tượng…Thông

thường mỗi phương thức đều có các tham số riêng.

Thuộc tính thường dùng để thay đổi tính chất liên quan đến sự hiển thị đối tượng đó trên

màn hình hoặc khi in như màu sắc, kiểu đường..

Khi hiệu chỉnh đối tượng bẳng VBA có thể những hiệu chỉnh sẽ chưa được cập nhật ngay trên

màn hình bản vẽ.Do đó để cập nhật những thay đổi trong bản vẽ ta dùng phương thức Update

có trong đối tượng đó hoặc trong đối tượng Application

9.2. Sao chép đối tượng – Phương thức Copy

Với phương thức này đối tượng mới tạo ra sẽ giống hệt đối tượng gốc và có vị trí trùng với đối

tượng gốc, tuy nhiên đối tượng mới sẽ nằm bên trên đối tượng gốc

Cú pháp

Set CopyObj = OriginalObj.Copy

Giải thích

Tham số Giải thích

OriginalObj Đối tượng hình học – đối tượng gốc sẽ được sao chép

CopyObj Đối tượng hình học, có kiểu giống với kiểu của đối tượng gốc

Ví dụ

Trong ví dụ này sẽ tạo một đường tròn bên ModelSpace, sau đó sẽ copy đối tượng này (Chú ý

đường tròn được copy sau đó sẽ nằm chồng lên đường tròn cũ)

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

Basic VBA for AutoCad Page 86

9.3. Xóa đối tượng –Phương thức Delete

Cú pháp

OriginalObj.Delete

Ví dụ

Ví dụ này sẽ yêu cầu người dùng chọn đối tượng cần xóa đi trên màn hình bản vẽ

9.4. Di chuyển đối tượng – Phương thức Move

Cú pháp

OriginalObj.Move Point_1, Point_2

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

Basic VBA for AutoCad Page 87

Giải thích

Tham số Giải thích

OriginalObj ối tượng hình học – Là đối tượng sẽ bị di chuyển

Point_1, Point_2

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

nhất và điểm thứ hai.Hai điểm này sẽ xác định vector chuyển vị

(Vector xác định khoảng cách và hướng di chuyển đối tượng)

Ví dụ

Ví dụ này sẽ tạo ra một đường tròn và di chuyển vòng tròn này dọc theo trục X một khoảng

2 đơn vị.

Ví dụ

Ví dụ này sẽ yêu cầu người dùng chọn đối tượng trên màn hình bản vẽ, sau đó thực hiện

phương thức Move với các đối tượng này.

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

Basic VBA for AutoCad Page 88

9.5. Lấy đối xứng – Phương thức Mirror

Cú pháp

Set MirrorObj = OriginalObj.Mirror (Point_1, Point_2)

Giải thích

Tham số Giải thích

MirrorObj Biến chứa đối tượng trả về của phương thức Mirror – có kiểu giống

với kiểu của đối tượng gốc

OriginalObj Đối tượng gốc được lấy đối xứng

Point_1,

Point_2

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

thứ nhất và thứ 2 tạo nên trục đối xứng

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

Basic VBA for AutoCad Page 89

Ví dụ

Trong ví dụ này yêu cầu người dùng chọn các đối tượng trên màn hình để lấy đối xứng.Chú ý

biến hệ thống “MIRRTEXT”, biến này có hai giá trị là 0 và 1 và chỉ có tác dụng với đối

tượng văn bản (Hãy thử để thấy sự khác biệt !)

9.6. Phương thức OffSet

Công dụng

Phương thức Offset sẽ tạo ra một đối tượng mới có đường biên cách đường biên của đối

tượng gốc một khoảng định trước.Phương thức này chỉ áp dụng cho các đối tượng như Arc,

Circle, Ellipse, Line, LightweightPolyline, Polyline, Spline, và Xline.Phương thức này

sẽ trả về một mảng chứa đối tượng vừa mới tạo NHƯNG thông thường chỉ chứa một đối

tượng.

Cú pháp

varArrayObj = OriginalObj.Offset (OffsetDistance)

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

Basic VBA for AutoCad Page 90

Giải thích

Tham số Giải thích

varArrayObj Kiểu Variant – Mảng chứa đối tượng mới được tạo thành

OriginalObj Đối tượng gốc được lấy OffSet

OffsetDistance

Kiểu Double – Khoảng cách Offset, có thể âm hoặc dương.

Nếu là số âm, phương thức này sẽ tạo ra đối tượng có “bán kính nhỏ

hơn” đối tượng gốc, khi “bán kính nhỏ hơn” không có ý nghĩa (Đối

với đối tượng Line, Xline …) thì phương thức này sẽ tạo ra đối

tượng có toạ độ X, Y và Z nhỏ hơn đối tượng gốc.

Ví dụ

9.7. Xoay đối tượng – Phương thức Rotate

Công dụng

Phương thức này dùng để xoay một đối tượng quanh một điểm cố định với một góc quay

định trước

Cú pháp

Object.Rotate BasePoint, RotationAngle

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

Basic VBA for AutoCad Page 91

Giải thích

Tham số Giải thích

Object Đối tượng sẽ được xoay

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

RotationAngle Kiểu Double – Góc quay đối tượng ( đơn vị : Radian)

Ví dụ

Trong ví dụ này sẽ yêu cầu người dùng chọn một đối tượng trên màn hình để xoay, góc nhập

vào dưới dạng đơn vị “Degree” sẽ được chuyển sang đơn vị “Radian”

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

Basic VBA for AutoCad Page 92

9.8. Thay đổi tỉ lệ đối tượng – Phương thức ScaleEntity

Công dụng

Phương thức này dùng để thay đổi tỉ lệ đối tượng giống nhau theo các phương X, Y, Z quanh

một điểm.

Cú pháp

Object.ScaleEntity BasePoint, ScaleFactor

Giải thích

Tham số Giải thích Object Đối tượng sẽ được Scale

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

Scale, đối tượng sẽ được Scale quanh điểm này

ScaleFactor

Kiểu Double – Xác đinh hệ số Scale.Tham số này phải lớn hơn 0 nếu không chương trình sẽ báo lỗi.

Nếu ScaleFactor > 1 : Đối tượng được phóng to lên

Nếu ScaleFactor < 1 : Đối tượng bị thu nhỏ lại

Ví dụ

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

Basic VBA for AutoCad Page 93

9.9. Thay đổi màu đối tượng – Thuộc tính Color

Công dụng

Thuộc tính Color dùng để LẤY hoặc GÁN màu cho một đối tượng.

Cú pháp

Object.Color = ColorName/ColorIndex

Giải thích

Tham số Giải thích

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

ColorName/ColorIndex Tên màu hoặc chỉ số của màu cần gán cho Layer

Chỉ số màu là các số nguyên nằm trong khoảng từ đến 256.Trong AutoCad có 9 màu được

định nghĩa bằng hằng số màu acColor.Chúng ta có thể dùng chỉ số màu hoặc hằng số màu đều

được.

Bảng tương ứng giữa hằng số màu và chỉ số màu

Hằng số màu Chỉ số màu Ý nghĩa

acByBlock 0 ByBlock

acRed 1 Red

acYellow 2 Yellow

acGreen 3 Green

acCyan 4 Cyan

acBlue 5 Blue

acMagenta 6 Magenta

acWhite 7 White or Black phụ thuộc vào màu nền

acByLayer 256 ByLayer

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

Basic VBA for AutoCad Page 94

Ví dụ

Trong ví dụ này sẽ yêu cầu người dùng chọn các đối tượng trên màn hình bản vẽ, sau đó sẽ

đổi màu các đối tượng này thành màu đỏ.

Ví dụ

Trong ví dụ này sẽ tạo các đường tròn với các bán kính khác nhau đồng thời các đường tròn

đó sẽ được gán màu từ 0 đến 256

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

Basic VBA for AutoCad Page 95

9.10. Thay đổi Layer cho đối tượng – Thuộc tính Layer

Công dụng

Sử dụng thuộc tính Layer để LẤY hoặc GÁN Layer cho một đối tượng

Cú pháp

Object.Layer = strLayerName

Giải thích

Tham số Giải thích

Object ối tượng hình học sẽ đuợc gán Layer

strLayerName ểu String – Tên Layer gán cho đối tượng

Ví dụ 11

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

Basic VBA for AutoCad Page 96

9.11. Thay đổi kiểu đường cho đối tượng – Thuộc tính LineType

Công dụng

Thuộc tính này được sử dụng để thay đổi kiểu hiển thị NÉT VẼ của các đối tượng hình học

trên màn hình

Cú pháp

Object.Linetype = strLineTypeName

Giải thích

Tham số Giải thích

Object Đối tượng hình học sẽ được thay đổi LineType

strLineTypeName Kiểu String –Tên kiểu đường cần gán cho đối tượng

Chú ý

Khi một bản vẽ mới được tạo thì chỉ có 3 kiểu đường là ByBlock, ByLayer, Continuous là

mặc định có sẵn.Do đó, ngoài 3 kiểu đường này để sử dụng một kiểu đường nào đó ta cần

NẠP kiểu đường đó vào trong bản vẽ và kiểu đường đó phải tồn tại trong file “Acad.lin”.

Để tải một kiểu đường vào trong bản vẽ chúng ta sử dụng phương thức Load có trong tập đối

tượng LineTypes.

Cú pháp:

Thisdrawing.LineTypes.Load LineTypeName,”acad.lin”

Giải thích :

Tham số Giải thích

strLineTypeName Kiểu String - Tên kiểu đường cần gán cho Layer.

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

Basic VBA for AutoCad Page 97

Một số kiểu đường thông dụng

STT LineTypeName

01 Continuous

02 Center

03 Center2

04 DashDot

05 Dashdot2

06 Hidden

07 Hidden2

08 Phantom

09 PhanTom2

Ví dụ

Trong ví dụ này sẽ yêu cầu người dùng chọn đối tượng trên màn hình , sau đó đổi kiểu đường

của các đối tượng thành “Phantom”

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

Basic VBA for AutoCad Page 98

9.12. Thay đổi bề rộng nét vẽ của đối tượng – Thuộc tính LineWeight

Công dụng

Thuộc tính này dùng để thay đổi bề rộng nét khi in của các đối tượng hình học

Cú pháp

Object.Lineweight = acLineweight

Giải thích

Tham số Giải thích

Object Đối tượng hình học được gán thuộc tính LineWeight

acLineWeight Hằng số thể hiện bề rộng của nét (Xem bảng hằng số acLineWeight)

Bảng giá trị hằng số acLineWeight

acLineWeight Giá trị (mm) acLineWeight Giá trị(mm)

acLnWtByLayer ByLayer acLnWt050 0.50

acLnWtByBlock ByBlock acLnWt053 0.53

acLnWtByLwDefault Mặc định acLnWt060 0.60

acLnWt000 0.00 acLnWt070 0.70

acLnWt005 0.05 acLnWt080 0.80

acLnWt009 0.09 acLnWt090 0.90

acLnWt013 0.13 acLnWt100 1.00

acLnWt015 0.15 acLnWt106 1.06

acLnWt018 0.18 acLnWt120 1.20

acLnWt020 0.20 acLnWt140 1.40

acLnWt025 0.25 acLnWt158 1.58

acLnWt030 0.30 acLnWt200 2.00

acLnWt035 0.35 acLnWt211 2.11

acLnWt040 0.40

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

Basic VBA for AutoCad Page 99

Chú ý

Khi một đối tượng hình học mới được tạo ra thì thuộc tính Lineweight sẽ là

acLnWtByLayer.Nếu không được gán một giá trị nét in cụ thể thì giá trị Lineweight sẽ được

lấy bằng chiều dày mặc định (acLnWtDefault) của Autocad.Giá trị acLnWtDefault được

thiết lập thông qua biến hệ thống LWDEFAULT (Thông thường giá trị này là 0,25mm)

Ví dụ

Trong ví dụ này sẽ tạo ra một đường tròn, sau đó sẽ gán LineWeight cho nó.

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

Basic VBA for AutoCad Page 100

Chương 10

LÀM VIỆC VỚI ĐỐI TƯỢNG LAYER

Nội dung chuyên đề :

- Duyệt qua tập đối tượng Layer

- Khai báo và khởi tạo một Layer mới – Phương thức Add

- Đổi tên Layer – Thuộc tính Name

- Thiết lập một Layer hiện hành

- Gán màu cho một Layer – Thuộc tính Color

- Gán kiểu đường cho Layer – Thuộc tính LineType

- Gán bề rộng nét cho Layer – Thuộc tính LineWeight

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

Basic VBA for AutoCad Page 101

10.1. Duyệt qua tập đối tượng Layers

Mọi Layer đều nằm trong tập đối tượng Layers.Vì thế ta có thể duyệt tập đối tượng Layers để

tìm các Layer có trong bản vẽ.

Chúng ta sử dụng cấu trúc “For Each…Next” để duyệt qua tất cả các Layer có trong bản vẽ.

Ví dụ

Ví dụ sau sẽ duyệt qua tập đối tượng Layers và hiện tên tất cả các Layer có trong bản vẽ.

10.2. Khai báo và khởi tạo một Layer mới – Phương thức Add

Quy định tên Layer

Tên Layer tối đa là 31 ký tự bao gồm các chữ cái, số, các ký tự đặc biệt NHƯNG không có

dấu cách, nên đặt tên Layer sao cho ý nghĩa và dễ nhớ.

Trong mỗi bản vẽ thì Layer 0 là Layer mặc định và người dùng không thể xóa Layer này.

Để tạo một Layer mới ta sử dụng phương thức Add có trong tập đối tượng Layers

Cú pháp

Set LayerObj = Thisdrawing.Layers.Add (LayerName)

Giải thích

Tham số Giải thích

LayerObj Kiểu AcadLayer – Đây là biến sẽ chứa Layer được tạo ra.

LayerName Kiểu String – Tên của Layer được tạo

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

Basic VBA for AutoCad Page 102

Ví dụ

Ví dụ này sẽ khai báo và khởi tạo một Layer có tên do người dùng nhập vào.Nếu Layer này

đã tồn tại thì sẽ tự động thoát khỏi thủ tục.

10.3. Đổi tên của Layer – Thuộc tính Name

Ví dụ

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

Basic VBA for AutoCad Page 103

10.4. Thiết lập một Layer hiện hành

Quá trình vẽ luôn thực hiện trên lớp hiện hành.Tất cả các đối tượng tạo mới đều được đặt trên

Layer hiện hành này và nó sẽ sử dụng kiểu màu, kiểu đường,bề rộng đường nét của Layer hiện

hành đó.

Chú ý: Không thể thiết lập chế độ hiện hành cho một lớp đã bị đóng băng (Freeze)

Để thiết lập chế độ hiện hành cho một Layer ta sử dụng thuộc tính ActiveLayer của đối tượng

Thisdrawing.

Cú pháp

Thisdrawing.ActiveLayer = LayerObj

Ví dụ

Ví dụ sau sẽ tạo một Layer có tên “Layer_1”, sau đó sẽ thiết lập Layer này thành hiện hành.

10.5. Gán màu cho một Layer – Thuộc tính Color

Để dễ dàng quản lý các đối tượng trong bản vẽ người dùng nên thiết lập màu cho các

Layer.Để gán màu cho một Layer ta sử dụng thuộc tính Color có trong đối tượng LayerObj.

Cú pháp

LayerObj.Color = ColorName/ColorIndex

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

Basic VBA for AutoCad Page 104

Giải thích

Tham số Giải thích

LayerObj Đối tượng Layer muốn gán màu

ColorName/ColorIndex Tên màu hoặc chỉ số của màu cần gán cho Layer

Chỉ số màu là các số nguyên nằm trong khoảng từ đến 256.Trong AutoCad có 9 màu được

định nghĩa bằng hằng số màu acColor.Chúng ta có thể dùng chỉ số màu hoặc hằng số màu đều

được.

Bảng tương ứng giữa Hằng số màu và chỉ số màu

Hằng số màu Chỉ số màu Ý nghĩa

acByBlock 0 ByBlock

acRed 1 Red

acYellow 2 Yellow

acGreen 3 Green

acCyan 4 Cyan

acBlue 5 Blue

acMagenta 6 Magenta

acWhite 7 White hay Black phụ thuộc vào màu nền

acBylayer 256 Bylayer

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

Basic VBA for AutoCad Page 105

Ví dụ

Ví dụ sau sẽ tạo một Layer có tên “ChangeColor”, sau đó sẽ gán màu vàng cho Layer này và

thiết lập Layer này thành Layer hiện hành.

10.6. Gán kiểu đường cho một Layer – Thuộc tính LineType

Kiểu đường là sự lặp lại của mẫu nét đứt, điểm, khoảng trống mục đích là thể hiện thông tin

một cách trực quan.Tất cả kiểu đường trong Autocad được đặt trong một file có tên

“Acad.lin”.

Để gán kiểu đường cho một Layer thì ta sử dụng thuộc tính LineType có trong đối tượng

LayerObj.

Cú pháp

LayerObj.LineType = LineTypeName

Giải thích

Tham số Giải thích

LayerObj Đối tượng Layer muốn gán kiểu đường

LineTypeName Kiểu String - Tên kiểu đường cần gán cho Layer.

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

Basic VBA for AutoCad Page 106

STT Tên kiểu đường thông dụng

01 Continuous

02 Center

03 Center2

04 DashDot

05 Dashdot2

06 Hidden

07 Hidden2

08 Phantom

09 PhanTom2

Chú ý

Khi một bản vẽ mới được tạo thì chỉ có 3 kiểu đường là ByBlock, ByLayer, Continuous là

mặc định có sẵn.Do đó, ngoài 3 kiểu đường này để sử dụng một kiểu đường nào đó ta cần

NẠP kiểu đường đó vào trong bản vẽ và kiểu đường đó phải tồn tại trong file “Acad.lin”.

Để tải một kiểu đường vào trong bản vẽ chúng ta sử dụng phương thức Load có trong tập đối

tượng LineTypes.

Cú pháp

Thisdrawing.LineTypes.Load LineTypeName,”acad.lin”

Giải thích

Tham số Giải thích

LineTypeName Kiểu String - Tên kiểu đường cần gán cho Layer.

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

Basic VBA for AutoCad Page 107

Ví dụ

Ví dụ này sẽ tạo một Layer có tên “SetLineType”, sau đó sẽ Load kiểu đường “Phantom”

trong tập “Acad.lin” và gán cho Layer này.Layer này sẽ được dùng làm hiện hành.

10.7. Gán LineWeight cho một Layer – Thuộc tính LineWeight

Chúng ta thường “In theo màu” nghĩa là bề rộng của nét in sẽ được thiết lập trong bảng “Plot

Style Table”, lúc này chúng ta không quan tâm đến bề rộng được thiết lập cho các Layer.

Khi “In theo Layer” chúng ta mới quan tâm đến việc thiết lập bề rộng nét cho các Layer.Tùy

thuộc vào cách thể hiện của mỗi người mà bề rộng nét của mỗi Layer sẽ được thiết lập khác

nhau.

Để thay đổi bề rộng nét của một Layer ta sử dụng thuộc tính Lineweight có trong đối tượng

LayerObj.

Cú pháp

LayerObj.Lineweight = acLineweight

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

Basic VBA for AutoCad Page 108

Bảng hằng số acLineweight

acLineWeight Giá trị (mm) acLineWeight Giá trị(mm)

acLnWtByLayer ByLayer acLnWt050 0.50

acLnWtByBlock ByBlock acLnWt053 0.53

acLnWtByLwDefault Mặc định acLnWt060 0.60

acLnWt000 0.00 acLnWt070 0.70

acLnWt005 0.05 acLnWt080 0.80

acLnWt009 0.09 acLnWt090 0.90

acLnWt013 0.13 acLnWt100 1.00

acLnWt015 0.15 acLnWt106 1.06

acLnWt018 0.18 acLnWt120 1.20

acLnWt020 0.20 acLnWt140 1.40

acLnWt025 0.25 acLnWt158 1.58

acLnWt030 0.30 acLnWt200 2.00

acLnWt035 0.35 acLnWt211 2.11

acLnWt040 0.40

Chú ý

Khi một đối tượng hình học mới được tạo ra thì thuộc tính Lineweight sẽ là

acLnWtByLayer.Nếu không được gán một giá trị nét in cụ thể thì giá trị Lineweight sẽ được

lấy bằng chiều dày mặc định (acLnWtDefault) của Autocad.Giá trị acLnWtDefault được

thiết lập thông qua biến hệ thống LWDEFAULT.Thông thường giá trị này là 0,25mm.

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

Basic VBA for AutoCad Page 109

Ví dụ

Ví dụ này sẽ thiết lập một Layer có tên “SetLineWeight”, sau đó Layer này sẽ được gán màu

đỏ, kiểu đường là “Center”, chiều dày đường nét là 0,15mm.

10.8. Một số thuộc tính khác của đối tượng Layer

10.8.1. Bật, Tắt Layer – Thuộc tính LayOn

Các đối tượng nằm trên Layer đã tắt sẽ không được hiển thị hay in ra.Để bật hoặc tắt sự

hiển thị của Layer ta sử dụng thuộc tính LayOn có trong đối tượng LayerObj.Ứng với giá

trị True Layer được Bật, giá trị False Layer bị Tắt.

Cú pháp

LayerObj.LayOn = True/False

Ví dụ

Trong ví dụ này sẽ tạo ra một Layer có tên “Test_Layon” đồng thời sẽ tắt Layer này.

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

Basic VBA for AutoCad Page 110

10.8.2. Đông cứng, Làm tan Layer – Thuộc tính Freeze, UnFreeze

Các đối tượng nằm trên Layer bị đóng băng (Freeze) sẽ không được hiển thị hay in ra.Để

đông cứng (Freeze) hay làm tan (UnFreeze) một Layer chúng ta sử dụng thuộc tính Freeze

trong đối tượng LayerObj. Giá trị True Layer bị Đóng Băng, giá trị False Layer được Làm

Tan

Cú pháp

LayerObj.Freeze = True/False

Ví dụ

10.8.3. Khóa, Mở Khóa Layer – Thuộc tính Lock, UnLock

Khi một Layer bị khóa (Lock) thì người dùng vẫn có thể quan sát được các đối tượng trên

lớp đó nhưng không thể hiệu chỉnh được chúng.

Để khóa (Lock) hay mở khóa (UnLock) các Layer ta sử dụng thuộc tính Lock có trong đối

tượng LayerObj. Giá trị True Layer bị Khóa, giá trị False Layer được Mở Khóa.

Cú pháp

LayerObj.Lock = True/False

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

Basic VBA for AutoCad Page 111

Ví dụ

Trong ví dụ này sẽ tạo ra một Layer có tên “Test_Lock” đồng thời khóa Layer này.

10.8.4. Xóa Layer – Thuộc tính Delete

Layer có thể được xóa bất kỳ lúc nào trong khi vẽ nhưng không thể xóa các Layer khi nó

đang hiện hành, đang chứa đối tượng hoặc là Layer 0, DefPoints.

Để xóa Layer ta sử dụng thuộc tính Delete trong đối tượng LayerObj.

Cú Pháp

LayerObj.Delete

Ví dụ

Ví dụ này sẽ Delete một Layer có tên do nguời dùng nhập vào

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

Basic VBA for AutoCad Page 112

Chương 11

LÀM VIỆC VỚI ĐỐI TƯỢNG BLOCK

Nội dung chương

- Cách khai báo và khởi tạo một Block

- Cách chèn một Block có sẵn vào trong bản vẽ

- Đổi tên một Block

- Xóa một Block có trong bản vẽ

- Phá vỡ một Block

- Làm việc với Block có chứa các thuộc tính

- Làm việc với bản vẽ tham khảo ngoài

Block là một đối tượng được tạo từ nhiều đối tượng cơ bản trong bản vẽ nhưng nó được coi như

một đối tượng đơn.Chúng ta có thể chèn Block trong cùng một bản vẽ hoặc các bản vẽ khác

nhau.

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

Basic VBA for AutoCad Page 113

11.1. Duyệt qua tập đối tượng Block

Chúng ta sử dụng cấu trúc lặp “For Each..Next” để duyệt qua tất cả các Block có trong tập

đối tượng Block.

Ví dụ

Ví dụ này sẽ duyệt qua tất cả các Block có trong bản vẽ và hiện tên của các Block đó

11.2. Khai báo và khởi tạo một Block

Để khởi tạo một Block trong VBA chúng ta sử dụng phương thức Add có trong tập đối tượng

Blocks.Một Block sau khi được tạo ra có thể được chèn ở ModelSpace hoặc PaperSpace

Cú pháp

Set BlockObj = Thisdrawing.Blocks.Add (InsertPoint, BlockName)

Giải thích

Tham số Giải thích

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

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

Block.

BlockName Kiểu String – Tên của Block được tạo (Chú ý tên của Block không

đuợc dài quá 31 ký tự và giữa chúng không có khoảng trắng)

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

Basic VBA for AutoCad Page 114

Ví dụ

Ví dụ này sẽ khai báo và tạo một Block có tên “Section”, đồng thời tạo một đường tròn và

đường thẳng sau đó thêm đường tròn và đường thẳng này vào trong Block đó.

11.3. Đổi tên Block – Thuộc tính NAME

Để đổi tên một Block chúng ta sử dụng thuộc tính Name của Block để đổi sang tên mới.

Cú pháp

BlockObj.Name = NewName

Giải thích

Tham số Giải thích

BlockObj Kiểu acadBlock – Đối tượng Block cần đổi tên

NewName Kiểu String – Tên mới của Block

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

Basic VBA for AutoCad Page 115

Ví dụ

Ví dụ này sẽ yêu cầu người dùng nhập vào tên Block cần đổi và tên mới của Block.Sau đó

sẽ sử dụng thuộc tính Name để Rename Block này.

11.4. Xóa một Block – Thuộc tinh Delete

Để xóa một Block chúng ta sử dụng thuộc tính Delete của Block

Cú pháp

BlockObj.Delete

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

Basic VBA for AutoCad Page 116

Ví dụ

Ví dụ này sẽ Delete một Block có tên do người dùng nhập vào.

Chú ý

- Nếu một Block tạo theo phương thức Add được gọi là “Block Definition” và Block đó nếu

được Insert vào trong bản vẽ thì trở thành “Block Reference”.

- Các “Block Reference” đều tham khảo dữ liệu đến “Block Definition” do đó trong ví dụ

trên khi khai báo “Dim ObjBlock as acadBlock” thì đối tượng ObjBlock sẽ là “Block

Definition”.Chúng ta không thể Delete một “Block Definition” khi trong bản vẽ vẫn còn

tồn tại “Block Reference” (Cũng giống như không thể Delete một Layer khi nó vẫn còn

được dùng bởi một đối tượng khác).Mặt khác, khi Delete một “Block Reference” nếu

chúng ta không sử dụng lệnh “Purge” thì hiển nhiên đối tượng “Block Definition” vẫn còn

tồn tại trong bản vẽ.

Ví dụ

Ở ví dụ này sẽ yêu cầu người dùng nhập vào một tên Block Reference sau đó sử dụng bộ

lọc để lọc ra các Block có tên do người dùng nhập vào, tiếp đó sẽ Delete các Block này

khỏi bản vẽ.

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

Basic VBA for AutoCad Page 117

11.5. Chèn Block vào trong bản vẽ - Phương thức InsertBlock

Chúng ta sử dụng phương thức InsertBlock để chèn một “Block Definition” vào trong

ModelSpace, PaperSpace hoặc vào một Block khác, tuy nhiên không thể chèn vào chính bản

thân nó được.

Đối tượng trả về của phương thức InsertBlock là một “Block Reference”.

Cú pháp

Set BlockReferenceObj = Thisdrawing.SPACE.InsertBlock (InsertPoint, _

BlockName, Xscale, Yscale, Zscale, RotationAngle)

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

Basic VBA for AutoCad Page 118

Giải thích

Tham số Giải thích

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

InsertBlock

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

PaperSpace hoặc Block)

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

điểm chèn BlockReference

BlockName Kiểu String – Tên Block cần chèn hoặc tên đầy đủ bao gồm

đường dẫn chứa bản vẽ được chèn.

Xscale Kiểu Double – Hệ số Scale theo phương X

Yscale Kiểu Double – Hệ số Scale theo phương Y

Zscale Kiểu Double – Hệ số Scale theo phương Z

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

Radian)

Ví dụ

Ví dụ này sẽ tạo một “Block Definition” có tên “Ex_6” chứa đối tượng Circle.Sau đó sẽ

chèn “Block Definition” này vào ModelSpace, điểm chèn do người dùng nhập vào.

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

Basic VBA for AutoCad Page 119

Ví dụ

Trong ví dụ này sẽ yêu cầu người dùng nhập đường dẫn chứa bản vẽ cần chèn vào (bao gồm

cả phần mở rộng “.dwg”).Đồng thời các thông số như InsertPoint,Xscal, Yscale, Zscale,

RotationAngle cũng do người dùng nhập vào.

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

Basic VBA for AutoCad Page 120

11.6. Phá vỡ một Block – Phương thức Explode

Với đối tượng “Block Reference” chúng ta sử dụng phương thức Explode để phá vỡ

chúng.Đối tượng trả về của phương thức này là một mảng (kiểu Variant) chứa các đối tượng

đã cấu thành nên nó.

Cú pháp

VarArray = BlockReferenceObj.Explode

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

Basic VBA for AutoCad Page 121

Giải thích

Tham số Giải thích

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

BlockReferenceObj bị phá vỡ.

BlockReferenceObj Kiểu acadBlockReference – Đối tượng Block sẽ bị phá vỡ

Chú ý

Phương thức Explode thực chất tạo ra một bản sao của đối tượng gốc, sau đó thực hiện việc

phá vỡ Block trên đối tượng này.Đối tượng gốc vẫn còn giữ nguyên.Nếu không muốn giữ

đối tượng này chúng ta có thể xóa nó ra khỏi bản vẽ bằng phương thức Delete.

Ví dụ

Ví dụ này sẽ yêu cầu người dùng chọn một Block trên màn hình bản vẽ và một điểm để di

chuyển kết quả của phương thức Explode.

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

Basic VBA for AutoCad Page 122

11.7. Block chứa thuộc tính – Attributes

Thuộc tính của Block là các chuỗi Text đi kèm với nó để miêu tả Block.Mỗi thuộc tính gồm

có Tag - Tên gọi của thuộc tính , Value – Giá trị của thuộc tính, Prompt – Dòng thông báo khi

người dùng nhập giá trị cho thuộc tính.Một Block có thể có nhiều thuộc tính.

11.7.1. Tạo thuộc tính cho Block –Phương thức AddAttribute

Cú pháp

Set AttributeObject = SPACE.AddAttribute (Height, Mode, Prompt, _

InsertionPoint, Tag, Value)

Giải thích

Tham số Giải thích

AttributeObject Kiểu acadAttribute – Đối tượng thuộc tính

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

Block)

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

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

trong bản vẽ.

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

bản vẽ.

InsertionPoint Kiểu Variant hoặc Double – Mảng 3 phần tử chứa tọa độ của thuộc

tính khi được chèn vào bản vẽ hay Block.

Tag Kiểu String – Tên của thuộc tính, có thể chứa bất kỳ ký tự nào

nhưng không chứa khoảng trắng.

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

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

Basic VBA for AutoCad Page 123

Giá trị của tham số Mode

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

acAttributeModeNormal 0 Giá trị mặc định, với giá trị này không một giá

trị nào còn lại của tham số Mode được gán.

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

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

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

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

acAttributeModeVerify 4 Khi Block được chèn vào thì giá trị của thuộc

tính được nhập tại dòng nhắc.

acAttributeModePreset 8

Block được chèn vào với giá trị mặc định của

thuộc tính, người dùng chỉ có thể Edit được giá

trị đó sau khi Block được chèn vào bản vẽ.

Ví dụ

Ví dụ này sẽ tạo một Block Attribute, trong đó các thuộc tính mô tả các giá trị của tham

số Mode.

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

Basic VBA for AutoCad Page 124

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

Basic VBA for AutoCad Page 125

11.7.2. Thao tác với thuộc tính – Phương thức GetAttributes

Phương thức GetAttributes của một “Block Reference” được dùng để lấy các giá trị thuộc

tính có trong một “Block Reference”.Đối tượng trả về của phương thức này là một mảng

chứa các thuộc tính của Block (Riêng với tham số Mode khác acAttributeModeConstant thì

giá trị thuộc tính không lấy đuợc).

Để xác định xem một “Block Reference” có chứa thuộc tính hay không chúng ta sử dụng

thuộc tính HasAttributes có trong đối tượng “Block Reference”.Nếu kết quả là TRUE thì

Block có thuộc tính, nếu là FALSE thì Block không chứa thuộc tính.

Cú pháp

VarAttributes = BlockReferenceObj.GetAttributes

Giải thích

Tham số Giải thích

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

Reference”

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

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

Basic VBA for AutoCad Page 126

Ví dụ

Ví dụ này sẽ yêu cầu người dùng chọn một đối tượng trên màn hình bản vẽ, kiểm tra xem

đó có phải là Block thuộc tính hay không nếu đúng sẽ hiển thị tên và giá trị của các thuộc

tính cho người dùng.

Ví dụ

Trong ví dụ này sẽ thay đổi các giá trị của thuộc tính trong “Block Reference” có tên

“TestAttribute” (Sử dụng ví dụ trong phương thức AddAttribute để tạo Block này)

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

Basic VBA for AutoCad Page 127

11.8. Làm việc với bản vẽ tham khảo ngoài – External References

Bản vẽ tham khảo ngoài có rất nhiều ứng dụng đặc biệt khi làm việc theo nhóm.

11.8.1. Gắn một tham chiếu ngoài vào bản vẽ – Phương thức AddExternalReference

Cú pháp

Set ExternalReferenceObject = Thisdrawing.SPACE.AttachExternalReference _

(FileName, BlockName, InsertionPoint, Xscale, Yscale, Zscale, _

RotationAngle, Overlay)

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

Basic VBA for AutoCad Page 128

Giải thích

Tham số Giải thích

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

phương thức AttachExternalReference

SPACE ModelSpace hoặc PaperSpace

FileName Kiểu String – Đường dẫn tới bản vẽ tham khảo ngoài (bao

gồm cả phần mở rộng “dwg”)

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

chèn vào trong bản vẽ

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

chèn của bản vẽ tham khảo ngoài

Xscale Kiểu Double – Hệ số Scale theo phương X

Yscale Kiểu Double – Hệ số Scale theo phương Y

Zscale Kiểu Double – Hệ số Scale theo phương Z

RotationAngle Kiểu Double – Góc quay của bản vẽ tham khảo ngoài khi

chèn vào bản vẽ (Đơn vị : Radians)

Overlay

Kiểu Boolean – Điều khiển bản vẽ tham khảo ngoài khi được

gán vào bản vẽ.

TRUE : Bản vẽ tham khảo ngoài sẽ không được hiển thị

khi bản vẽ “được gán tham khảo” này trở thành bản vẽ tham

khảo của bản vẽ khác.

FALSE : Bản vẽ tham khảo ngoài sẽ được hiển thị khi bản

vẽ “được gán tham khảo” này trở thành bản vẽ tham khảo

của bản vẽ khác.

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

Basic VBA for AutoCad Page 129

Ví dụ

Ví dụ

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

Basic VBA for AutoCad Page 130

11.8.2. Gỡ bỏ tham chiếu ngoài ra khỏi bản vẽ - Phương thức Detach

Chúng ta có thể gỡ bỏ tham chiếu ngoài bằng phương thức Detach.Khi gỡ bỏ tham chiếu

ngoài tất cả các đối tượng ràng buộc với tham chiếu ngoài như LineTypes, TextStyles,

DimStyles, Layers… cũng sẽ bị gỡ bỏ.

Ví dụ

11.8.3. Tải lại tham chiếu ngoài – Phương thức Reload

Nếu bản vẽ tham chiếu ngoài có sự thay đổi và việc cập nhật lại những thay đổi đó trong

bản vẽ “được gán tham khảo” là một sự cần thiết.Để cập nhật lại những thay đổi này

chúng ta sử dụng phương thức Reload.

Nếu bản vẽ tham khảo ngoài bị loại bỏ (Bằng phương thức UnLoad) thì có thể được tải lại

bất kỳ lúc nào bằng phương thức Reload.

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

Basic VBA for AutoCad Page 131

Ví dụ

11.8.4. Loại bỏ tham chiếu ngoài ra khỏi bản vẽ - Phương thức Unload

Sử dụng phương thức Unload để loại bỏ một tham khảo ngoài ra khỏi bản vẽ.Khi loại bỏ

một tham chiếu ngoài thì tốc độ làm việc của AutoCad sẽ được tăng cường do không phải

đọc và hiển thị các thông tin hình học hay các ký hiệu không cần thiết.Các đối tượng hình

học và các thông tin liên quan đến tham khảo ngoài sẽ không được thể hiện trên bản vẽ hiện

tại cho đến khi tham khảo ngoài được tải lại.

Chú ý : Cần phân biệt sự khác nhau giữa phương thức Detach và Unload

Phương thức Unload : Chỉ loại bỏ tạm thời tham chiếu ngoài ra khỏi bản vẽ và

chúng ta có thể tải lại tham chiếu ngoài này bất cứ khi nào bằng phương thức Reload.

Phương thức Detach : Sẽ loại bỏ tham hoàn toàn tham chiếu ngoài ra khỏi bản vẽ và

chỉ có thể sử dụng phương thức AddExternalReference để gắn lại tham chiếu ngoài.

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

Basic VBA for AutoCad Page 132

11.8.5. Ràng buộc tham chiếu ngoài – Phương thức Bind

Khi sử dụng phương thức Bind sẽ chuyển tham chiếu ngoài trở thành một “Block

Refrerence” của bản vẽ.Lúc này bản vẽ “được gán tham khảo” sẽ không được cập nhật nếu

bản vẽ tham chiếu bị thay đổi.Quá trình này sẽ liên kết toàn bộ cơ sở dữ liệu trong bản vẽ

tham khảo (bao gồm cả bảng ký hiệu) với bản vẽ hiện hành.Bảng ký hiệu là các đối tượng

phi hình học, ví dụ như khối, kiểu kích thước, lớp, kiểu chữ...

Phương thức Bind chỉ có một tham số là PrefixName. Nếu tham số này được

gán giá trị TRUE thì tên trong bảng ký hiệu của bản vẽ tham chiếu ngoài sẽ được

thêm tiền tố<tên khối>$x$ trong bản vẽ hiện tại, trong đó x : là sốnguyên bất kỳ

được tự động tăng để tránh ghi đè lên định nghĩa khối đã có. Nếu tham số này nhận

giá trị FALSE thì tên trong bảng ký hiệu sẽ được ghép chung vào bản vẽ hiện tại mà

không có tiền tố. Nếu có các tên trùng nhau thì AutoCAD sẽ sửdụng ký hiệu vừa

được định nghĩa trong bản vẽ.

Ví dụ

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

Basic VBA for AutoCad Page 133

TÀI LIỆU THAM KHẢO

1. Phát triển AutoCad bằng ActiveX & VBA – Lê Quỳnh Mai (chủ biên)

2. Cơ sở lập trình tự động hóa tính toán, thiết kế với VB & VBA trong môi trường

AutoCad – Nguyễn Hồng Thái (chủ biên)

3. Giáo trình tự động hóa thiết kế Cầu Đường

4. AutoCad 2006 VBA – A Programer’s Reference – Joe SutPhin