Giáo trình Phát triển AutoCAD bằng ActiveX & VBA - Chương 11: Phát triển ứng dụng bằng VBA

Trong chương này 11

ƒ Một số thuật ngữ trong

VBA

ƒ Làm việc với Form trong

VBA

ƒ Xử lý lỗi

ƒ Bảo mật mã nguồn

chương trình VBA

ƒ Thực thi Macro từ trình

đơn hoặc thanh công cụ

ƒ Tự động tải dự án VBA

ƒ Tự động thực thi Macro

ƒ Tự động mở VBA IDE mỗi

khi tải một dự án

ƒ Làm việc khi không có

bản vẽ được mở

ƒ Phân phối ứng dụng

pdf 11 trang phuongnguyen 5560
Bạn đang xem tài liệu "Giáo trình Phát triển AutoCAD bằng ActiveX & VBA - Chương 11: Phát triển ứng dụng bằng VBA", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

Tóm tắt nội dung tài liệu: Giáo trình Phát triển AutoCAD bằng ActiveX & VBA - Chương 11: Phát triển ứng dụng bằng VBA

Giáo trình Phát triển AutoCAD bằng ActiveX & VBA - Chương 11: Phát triển ứng dụng bằng VBA
 Phát triển ứng dụng ActiveX và VBA | 275 
PHÁT TRIỂN ỨNG DỤNG 
BẰNG VBA 
11
Trong chương này
ƒ Một số thuật ngữ trong 
VBA 
ƒ Làm việc với Form trong 
VBA 
ƒ Xử lý lỗi 
ƒ Bảo mật mã nguồn 
chương trình VBA 
ƒ Thực thi Macro từ trình 
đơn hoặc thanh công cụ 
ƒ Tự động tải dự án VBA 
ƒ Tự động thực thi Macro 
ƒ Tự động mở VBA IDE mỗi 
khi tải một dự án 
ƒ Làm việc khi không có 
bản vẽ được mở 
ƒ Phân phối ứng dụng 
Nhiều công việc trong lập trình không chỉ đơn giản 
là làm việc với mô hình đối tượng AutoCAD 
ActiveX. Chương này sẽ đề cập tổng quan về cách 
tạo các hộp thoại, xử lý lỗi, điều khiển cửa sổ ứng 
dụng và phân phối ứng dụng cho người khác. 
Lưu ý rằng, tài liệu của Microsoft về VBA sẽ có 
thêm nhiều thông tin hơn. 
 276 | Chương 11: Phát triển ứng dụng bằng VBA 
1. Một số thuật ngữ trong VBA 
Nội dung chương này sẽ mở rộng các kinh nghiệm với VBA. Các khái niệm được 
nêu ra dưới đây sẽ giúp tìm hiểu và làm việc với môi trường VBA 
Project Dự án - là tập hợp của các form và các mô-đun được nhóm lại thành 
một tệp. 
Module là một nhóm các thủ tục và các hàm thường có liên quan đến nhau. 
Macro là những hàm và thủ tục có thể dùng chung. Macro thường được thể 
hiện dưới dạng những thành phần chạy được của Dự án. 
Dialog box là phương tiện để thể hiện thông tin hoặc tập hợp thông tin khi ứng 
dụng hoạt động. 
Form là đối tượng chứa các điều khiển hộp thoại. 
2. Làm việc với Form trong VBA 
Form là các khối cấu tạo cơ bản, trên đó ta có thể thiết kế các các hộp thoại cho các 
ứng dụng khác nhau. Qua các Form tự tạo, ta có thể cung cấp thông tin cho người 
dùng, nhận thông tin từ người dùng hoặc người dùng có thể điều khiển các hoạt 
động của ứng dụng. 
Form cũng giống như một phông để vẽ, ban đầu chúng hoàn toàn rỗng. Để làm đầy 
phông đó cần có bảng màu. Trong trường hợp này, bảng màu chính là hộp công cụ 
điều khiển (Toolbox). Người thiết kế chính là hoạ sỹ, sẽ thực hiện bố trí các điều 
khiển lấy từ hộp công cụ vào Form với số lượng tuỳ ý. Có thể điều chỉnh các thuộc 
tính và kích thước của các điều khiển cũng như của Form vào bất cứ lúc nào. Sau 
cùng sẽ thêm vào các chức năng (viết mã lệnh) cho các điều khiển để Form có thể 
hoạt động được. 
Mặc dù Visual Basic hỗ trợ nhiều loại Form khác nhau nhưng VBA chỉ hỗ trợ duy 
nhất loại UserForm. Điều này có nghĩa là một số loại Form được tạo bởi Visual 
Basic sẽ không nhập được vào VBA. 
 Phát triển AutoCAD bằng ActiveX và VBA | 277 
Các UserForm, được gọi là Form trong tài liệu này, luôn là dạng Modal. Có nghĩa là 
khi nó xuất hiện trong lúc ứng dụng đang chạy, thì người dùng phải đóng nó lại 
trước khi muốn thực hiện bất cứ thao tác nào khác nào trong ứng dụng. Điều này sẽ 
được nói đến kỹ hơn trong phần “Thiết kế chương trình với Modal Form” trang 
280. 
2.1. Thiết kế và chạy chương trình 
Khi tạo Form là lúc làm việc trong chế độ thiết kế, ở chế độ đó có thể thực hiện các 
thao tác sau: 
ƒ Thêm điều khiển vào Form 
ƒ Thay đổi thuộc tính của Form 
ƒ Thay đổi thuộc tính của các điều khiển trên Form 
ƒ Chèn mã lệnh cho các môđun của Form 
Trong chế độ thiết kế không có bất cứ sự tương tác nào giữa người dùng, giao diện 
của AutoCAD và Form thiết kế. 
Khi chạy ứng dụng thì Form sẽ ở chế độ hoạt động. Khi ở chế độ này, ta không thể 
tạo bất cứ sự thay đổi nào tới Form một cách trực tiếp. Tuy nhiên, khi Form đang 
được hiển thị trong giao diện sử dụng của AutoCAD, người dùng có thể tương tác 
với Form như là một phần thông thường trong ứng dụng. 
2.2. Tạo Form mới trong Dự án 
Tạo Form mới trong Dự án 
1 Mở cửa sổ Project của VBA IDE và chọn dự án muốn thêm Form mới. 
2 Từ menu Insert chọn UserForm. Khi đó một Form trống được tạo ra và thêm 
vào dự án. 
2.3. Thêm điều khiển vào Form 
Rất dễ dàng để thêm các điều khiển vào Form, bằng cách chọn điều khiển trong hộp 
công cụ và kéo nó vào Form. Khi điều khiển đã được đặt trên Form, có thể thay đổi 
vị trí và kích cỡ của nó và có thể sao chép điều khiển đó tuỳ theo ý muốn của người 
thiết kế. 
Bên cạnh cách nêu trên, còn có những cách khác để đặt điều khiển vào Form. 
Thay đổi kích cỡ của điều khiển khi đặt vào Form 
1 Chọn điều khiển mong muốn trong hộp công cụ 
2 Trên Form, nhấn chuột trái, kéo chuột và sau đó thả ra. Điều khiển lựa chọn sẽ 
được đặt trên Form và có kích cỡ phụ thuộc vào phạm vi kéo chuột. 
Đặt nhiều điều khiển giống nhau trên Form 
1 Từ hộp công cụ Control, nháy đúp chuột vào điều khiển muốn đặt vào Form. 
 278 | Chương 11: Phát triển ứng dụng bằng VBA 
2 Trên Form, nháy chuột tại vị trí muốn đặt điều khiển. Di chuyển chuột đến một 
vị trí khác trên Form và nháy chuột lần nữa, một bản sao của điều khiển đó sẽ 
xuất hiện. Có thể tạo ra nhiều bản sao của điều khiển với cách làm tương tự. 
3 Khi thực hiện xong các thao tác, trở lại hộp công cụ và nháy chuột vào điều 
khiển đó một lần nữa để bỏ lựa chọn. 
2.3.1. Thay đổi kích thước và vị trí của điều khiển 
Để dịch chuyển điều khiển chỉ cần chọn vào điều khiển đó và kéo nó tới vị trí mới 
trên Form. Để thay đổi kích cỡ của điều khiển trước hết phải chọn nó, khi đó đường 
bao của điều khiển sẽ được hiển thị. Sau đó kéo đường bao kích này cho phù hợp 
kích thước mong muốn (Form cũng được điều chỉnh kích thước theo cách tương 
tự). 
Để di chuyển và thay đổi kích cỡ của nhiều điều khiển cùng một lúc thì lựa chọn 
từng điều khiển trong khi giữ phím SHIFT, sau đó có thể thực hiện di chuyển hoặc 
đổi kích thước của chúng theo nhóm. 
2.3.2. Định dạng các điều khiển 
VBA cung cấp một số chức năng điều chỉnh định dạng để giúp cho ta trình bày 
Form. Những chức năng này có thể được tìm thấy trong trình đơn Format của VBA 
IDE. Chúng cho phép căn chỉnh, tạo kích thước giống nhau, thay đổi khoảng cách 
cho nhiều điều khiển trên Form. 
Chú ý, để chọn nhiều điều khiển, giữ phím SHIFT trong khi chọn. 
2.3.3. Thay đổi thuộc tính của điều khiển 
Các thuộc tính sẽ điều chỉnh các đặc điểm khác nhau của điều khiển ví dụ như: kích 
cỡ, hình dạng, màu sắc, nhãn và các giá trị mặc định. Gán các thuộc tính của điều 
khiển thực hiện khi thiết kế bằng cách sử dụng cửa sổ Properties. 
Thay đổi thuộc tính của điều khiển 
1 Chọn điều khiển cần thay đổi thuộc tính trên Form 
2 Mở cửa sổ Properties bằng cách sử dụng phím F4 trong trường hợp cửa sổ đó 
chưa được mở. 
3 Trong cửa sổ Properties, tìm thuộc tính muốn thay đổi và chọn giá trị hiện tại 
cho thuộc tính đó. 
4 Thay đổi giá trị cho thuộc tính đó. 
Ta cũng có thể thay đổi thuộc tính của đối tượng trong chương trình đang hoạt 
động bằng cách viết mã lệnh truy cập vào thuộc tính này. Tham khảo tài liệu của 
Microsoft để tìm thêm thông tin về thay đổi thuộc tính của điều khiển trong lúc 
chương trình đang hoạt động. 
2.3.4. Thêm mã lệnh cho điều khiển 
Sau khi bố trí các điều khiển trên Form theo mong muốn, tiến hành viết mã lệnh cho 
các điều khiển. Mở cửa sổ Code (cửa sổ viết mã lệnh) bằng cách nhấn đúp chuột 
 Phát triển AutoCAD bằng ActiveX và VBA | 279 
trên điều khiển, khi đó cửa sổ Code sẽ được mở ra cùng với một hàm được tạo sẵn 
cho điều khiển đó tương ứng với sự kiện mặc định của điều khiển. 
Có thể viết mã lệnh cho sự kiện mặc định hoặc chọn một sự kiện khác từ hộp danh 
sách các sự kiện nằm ở góc trên bên phải cửa sổ Code. 
2.4. Hiển thị và ẩn Form 
Sau khi thiết kế Form và các điều khiển đã được viết mã lệnh đầy đủ thì bước cuối 
cùng là hiển thị Form cho người dùng khi chạy chương trình. Sự hiển thị của Form 
được thực hiện bởi phương thức Show. Phương thức này có thể được gọi từ bất cứ 
môđun nào trong ứng dụng. 
Hiển thị Form 
Ví dụ dưới đây sẽ hiển thị Form có tên là “UserForm1”: 
Public Sub MyApplication() 
UserForm1.Show 
End Sub 
Thủ tục (và tiếp đó là việc hiển thị Form) có thể gọi được như một Macro từ lệnh 
VBARUN hoặc từ trình đơn của AutoCAD. 
Lưu ý rằng Form trong VBA ở chế độ Modal. Điều đó có nghĩa là người dùng sẽ 
không thể tương tác trực tiếp với AutoCAD (ví dụ chọn một điểm hay một đối 
tượng nào đó trên bản vẽ) khi Form đang được hiển thị. Để cho phép người dùng 
tương tác với bản vẽ của AutoCAD thì cần sử dụng phương thức Hide của VBA. 
Phương thức này sẽ ẩn Form đi và cho phép người dùng truy cập một cách hạn chế 
với AutoCAD. Khi sử dụng phương thức Hide, Form vẫn còn trong bộ nhớ của máy 
tính, nó vẫn giữ nguyên tất cả các giá trị hiện tại trong khi bị ẩn đi. Phương thức 
này được gọi theo cách tương tự như phương thức Show. 
Ẩn Form 
UserForm1.Hide 
2.5. Tải và dỡ bỏ Form 
Một số trường hợp cần tải Form vào bộ nhớ trong lúc chạy ứng dụng nhưng không 
hiển thị Form. Trường hợp này có thể gặp phải khi người lập trình muốn khống chế 
thời điểm tải Form tốt hơn hoặc muốn truy cập Form nhưng không muốn người 
dùng nhìn thấy Form. Để tải Form nhưng không hiện Form, sử dụng phương thức 
Load của VBA. Phương thức Show có thể được sử dụng sau đó để người dùng nhìn 
thấy Form tại thời điểm thích hợp trong khi ứng dụng thực hiện. Cần nhớ rằng, 
người dùng không thể tương tác với Form cho đến khi nhìn thấy nó. Nếu phương 
thức Show được gọi mà Form chưa được tải vào thì nó sẽ được tự động tải. 
Bên cạnh đó, cũng có một số trường hợp ta muốn dỡ bỏ Form. Việc dỡ bỏ Form sẽ 
loại bỏ Form đó khỏi bộ nhớ và tất cả các bộ nhớ liên quan đến Form đó sẽ được 
thu hồi lại. Cho đến khi Form được tải vào lần nữa bằng cách sử dụng phương thức 
Load hoặc Show thì người dùng không thể tương tác với Form và cũng không thể 
thao tác lập trình được. Ta có thể dỡ bỏ Form khi biết Form sẽ không được sử dụng 
lần nữa trong ứng dụng và khi cần tiết kiệm bộ nhớ. 
 280 | Chương 11: Phát triển ứng dụng bằng VBA 
Phương thức Hide không thực hiện được việc dỡ bỏ Form. Nếu ứng dụng kết thúc 
và Form chưa được dỡ bỏ thì nó sẽ được tự động dỡ bỏ. Dưới đây là bảng so sánh 
các phương thức Show, Hide, Load và Unload của VBA: 
Các phương thức VBA Show, Hide, Load và Unload 
Phương thức Vai trò 
Show Hiển thị Form. Nếu Form chưa được tải vào thì nó sẽ tự động tải Form 
vào. 
Hide Ẩn Form. Form chưa được dỡ bỏ khỏi bộ nhớ. 
Load Form được tải vào bộ nhớ nhưng chưa được hiển thị. 
Unload Dỡ bỏ Form khỏi bộ nhớ. Có thể thực hiện việc này bằng phương thức 
Unload hoặc được thực hiện tự động khi ứng dụng kết thúc. 
2.6. Thiết kế chương trình với Modal Form 
Tất cả các hộp thoại VBA trong AutoCAD đều ở dạng Modal. Điều này có nghĩa là 
người dùng cần trả lời các yêu cầu của hộp thoại trước khi tiếp tục thực hiện các 
phần khác của ứng dụng. Sẽ không có mã lệnh tiếp theo nào được thực hiện cho đến 
khi hộp thoại dạng Modal được đóng bằng phương thức Hide hoặc Unload. Điều 
này yêu cầu người phát triển ứng dụng cần suy nghĩ thận trọng về thời điểm cũng 
như cách thức sắp xếp trình tự của các hộp thoại. 
Ví dụ cần thiết kế một hộp thoại yêu cầu người dùng chọn một đối tượng trong bản 
vẽ AutoCAD. Để người dùng có thể chọn được một đối tượng trong cửa sổ ứng 
dụng của AutoCAD, trước hết cần ẩn Form bằng cách gọi phương thức Hide. Khi 
đối tượng đã được chọn thì hiển thị lại Form bằng phương thức Show, tất cả các dữ 
liệu của nó vẫn được giữ nguyên trạng và ứng dụng sẽ tiếp tục chạy. 
CHÚ Ý Mặc dù tất cả các Form khác trong ứng dụng đều không được phép hoạt động khi 
hộp thoại Modal hiển thị, nhưng các ứng dụng khác thì đều được phép hoạt động. 
3. Xử lý lỗi 
Có ba loại lỗi khác nhau có thể gặp phải trong ứng dụng: lỗi biên dịch, lỗi thực thi 
và lỗi logic. 
Lỗi biên dịch xảy ra trong khi xây dựng ứng dụng. Những lỗi này hầu hết là lỗi cú 
pháp, các vấn đề về phạm vi của biến, hoặc lỗi nhập dữ liệu. Trong VBA, những 
kiểu lỗi như vậy thường được phát hiện bởi môi trường phát triển. Khi soạn một 
dòng lệnh sai thì dòng đó sẽ được đánh dấu và thông báo lỗi sẽ xuất hiện và nhắc 
nhở về lỗi đó. Các lỗi biên dịch cần phải được sửa trước khi ứng dụng có thể hoạt 
động. 
Lỗi thực thi thường khó tìm và sửa hơn. Chúng thường xảy ra trong khi thi hành các 
dòng lệnh và thường do nhận thông tin từ người dùng. Ví dụ nếu ứng dụng yêu cầu 
người dùng nhập tên của bản vẽ và người dùng nhập tên của một bản vẽ không tồn 
 Phát triển AutoCAD bằng ActiveX và VBA | 281 
tại thì lỗi thực thi sẽ xảy ra. Để xử lý lỗi loại này một cách hiệu quả cần dự đoán các 
dạng vấn đề sẽ gặp phải để bẫy chúng và viết mã lệnh xử lý các tình huống đó. 
Lỗi logic là khó tìm và sửa nhất. Hiện tượng của lỗi logic thường nằm trong các 
tình huống khi lỗi biên dịch và lỗi thực thi không xảy ra nhưng kết quả do ứng dụng 
tạo ra vẫn không đúng. Người lập trình coi đây là một loại lỗi mà có thể rất dễ hoặc 
rất khó để tìm và bẫy được. 
Các thông tin để tìm và sửa ba loại lỗi nói trên có thể được tìm thấy trong tài liệu 
của môi trường lập trình. Các lỗi của AutoCAD thường là lỗi thực thi nên chúng sẽ 
được nói đến kỹ hơn trong các phần sau của chương này. 
CHÚ Ý Hầu hết các ví dụ mẫu được cấp trong tài liệu của AutoCAD đều không sử dụng 
các bẫy lỗi. Điều này nhằm mục đích làm cho các ví dụ đơn giản và tập trung vào nội dung 
chính của nó. Tuy nhiên, cũng như các ngôn ngữ lập trình khác, xử lý lỗi và bẫy lỗi hợp lý 
là điều cần thiết để tăng hiệu quả của ứng dụng. 
Có cần phải bẫy lỗi thực thi không? 
Hầu hết các môi trường lập trình phải cung cấp công cụ xử lý lỗi mặc định. Với VB 
và VBA, các phản ứng lỗi mặc định là sự xuất hiện của các thông báo lỗi và ngắt 
ứng dụng. Trong khi xây dựng ứng dụng thì kiểu phản ứng này là phù hợp, nhưng 
sẽ không được phép xuất hiện đối với người dùng. Khi lập trình, người lập trình có 
thể muốn bỏ qua hoặc cung cấp các phản ứng lỗi riêng cho một số lỗi; muốn ngăn 
sự xuất hiện của các thông báo của các lỗi hoặc đơn giản là điều khiển sự xuất hiện 
của các thông báo lỗi đối với người dùng. Bên cạnh đó, người dùng hầu như không 
thể chấp nhận việc tự động ngắt ứng dụng. 
Nói chung, xử lý lỗi là cần thiết mỗi khi cần nhập các thông số đầu vào từ người 
dùng và mỗi khi làm việc với nhập/xuất các tệp. Lưu ý rằng, ngay cả khi tệp cần 
dùng đã sẵn sàng để được xử lý, nhưng có thể xuất hiện những yếu tố gây ra lỗi mà 
người lập trình chưa nghĩ đến. 
3.1. Bẫy lỗi thực thi 
Trong VB và VBA, các lỗi thực thi được bẫy bằng cách sử dụng lệnh On Error. Câu 
lệnh này sẽ tạo bẫy cho hệ thống. Mỗi khi có lỗi xảy ra, lệnh này sẽ tự động chuyển 
hướng sang phần xử lý riêng biệt được thiết kế cho lỗi đó. Khi đó các xử lý lỗi mặc 
định của hệ thống sẽ bị bỏ qua. 
Lệnh On Error có 3 dạng như sau: 
On Error Resume Next 
On Error GoTo Label 
On Error GoTo 0 
Lệnh On Error Resume Next được sử dụng khi người lập trình muốn bỏ qua lỗi. 
Lệnh này sẽ chỉ thực hiện bẫy lỗi thay vì sự xuất hiện của các thông báo và dừng 
chương trình, bằng cách nhảy đến thực hiện dòng lệnh tiếp theo. Ví dụ, nếu muốn 
tạo một thủ tục duyệt qua tất cả các đối tượng trong không gian vẽ để đổi màu cho 
chúng, người lập trình cần biết rằng khi một trong các đối tượng nằm trong một lớp 
bị khoá thì AutoCAD sẽ báo lỗi. Do vậy, thay vì phải dừng chương trình lại, chỉ 
cần bỏ qua các đối tượng thuộc lớp bị khoá đó để tiếp tục đổi màu cho các đối 
tượng còn lại. 
 282 | Chương 11: Phát triển ứng dụng bằng VBA 
Xử lý lỗi sử dụng lệnh On Error Resume Next 
Ví dụ dưới đây là một chương trình con duyệt qua tất cả các đối tượng trong không 
gian vẽ và đổi màu chúng thành đỏ. Áp dụng chương trình con này trong một bản 
vẽ có sẵn một số đối tượng mà trong đó có đối tượng thuộc một lớp bị khoá. Tiếp 
đó, giải thích lệnh On Error Resume Next và tiếp tục chạy chương trình. Chương 
trình sẽ dừng lại ở đối tượng đầu tiên thuộc lớp bị khoá. 
Sub Ch11_ColorEntities() 
Dim entry As Object 
On Error Resume Next 
For Each entry In ThisDrawing.ModelSpace 
entry.Color = acRed 
Next entry 
End Sub 
Câu lệnh On Error GoTo Label được dùng khi người lập trình muốn khai báo xử 
lý lỗi. Câu lệnh này sẽ bẫy lỗi và thay vì thông báo các lỗi và ngừng chương trình, 
nó sẽ nhảy đến đoạn mã lệnh ở vị trí được định sẵn. Đoạn mã chương trình này sẽ 
thực hiện các thao tác theo người lập trình muốn khi lỗi xuất hiện. Ví dụ, mở rộng 
ví dụ nêu trên bằng cách tạo ra các thông báo để xử lý trong trường hợp gặp đối 
tượng nằm trong lớp bị khoá. 
Xử lý lỗi sử dụng lệnh On Error GoTo 
Ví dụ dưới đây là một chương trình con duyệt qua tất cả các đối tượng trong không 
gian mô hình và đổi màu thành đỏ. Khi gặp đối tượng thuộc lớp bị khoá, chương 
trình sẽ xuất hiện một hộp thoại để thông báo kiểu lỗi và thẻ của đối tượng. Áp 
dụng chương trình con này trong một bản vẽ có sẵn một số đối tượng và trong đó có 
đối tượng thuộc một lớp bị khoá. Tiếp đó, thêm dấu chú thích trước dòng lệnh On 
Error GoTo MyErrorHandling và tiếp tục chạy chương trình. Chương trình sẽ dừng 
lại ở đối tượng đầu tiên thuộc lớp bị khoá. 
Sub Ch11_ColorEntities2() 
Dim entry As Object 
On Error GoTo MyErrorHandler 
For Each entry In ThisDrawing.ModelSpace 
entry.Color = acRed 
Next entry 
’ Quan trọng! Thoát khỏi thủ tục trước khi xử lý lỗi 
Exit Sub 
MyErrorHandler: 
Msgbox entry.EntityName + " is on a locked layer." + _ 
" The handle is: " + entry.Handle 
Resume Next 
End Sub 
Lệnh On Error GoTo 0 sẽ huỷ toàn bộ các xử lý lỗi hiện tại trong chương trình 
con. Lệnh On Error Resume Next và On Error GoTo Label giữ nguyên thông tin 
trong bộ xử lý lỗi hiện tại cho đến khi thủ tục kết thúc, hoặc khi có một bộ xử lý lỗi 
khác được khai báo, hoặc khi bộ xử lý lỗi bị hủy do lệnh On Error GoTo 0. 
3.2. Xử lý lỗi đã bẫy được 
Sau khi bẫy được một lỗi, việc xử lý lỗi đó phụ thuộc vào ứng dụng và bản chất của 
lỗi. VB và VBA cung cấp các thông tin của lỗi đã bẫy được thông qua đối tượng 
 Phát triển AutoCAD bằng ActiveX và VBA | 283 
Err. Đối tượng Err có các thuộc tính: Number, Description, Source, HelpTệp, 
HelpContext, LastDLLErr. Các thuộc tính nêu trên luôn nhận giá trị của lỗi gần 
nhất. Thuộc tính quan trọng nhất là Number và Description. Thuộc tính Number 
chứa mã của lỗi và thuộc tính Description chứa các thông báo xuất hiện khi có lỗi. 
Trong phần xử lý lỗi, người lập trình có thể so sánh giá trị của Number, từ đó có thể 
xác định được loại lỗi để có hướng xử lý phù hợp. 
3.3. Xử lý lỗi nhập dữ liệu người dùng trong AutoCAD 
Phương thức nhập dữ liệu từ người dùng cần có những bẫy lỗi để yêu cầu người 
dùng nhập vào loại dữ liệu nhất định theo đúng định dạng mà người lập trình mong 
muốn. Nếu người dùng nhập các loại dữ liệu khác, AutoCAD sẽ từ chối dữ liệu và 
đưa ra lời nhắc nhở. Sử dụng phương thức InitializeUserInput cùng với những chức 
năng nhập dữ liệu, không những tạo ra một công cụ tổng hợp để kiểm soát việc 
nhập số liệu từ người dùng mà còn gợi ý cho người lập trình thêm một số điều kiện 
cần được kiểm tra khi bẫy lỗi. Tham khảo về bẫy lỗi từ số liệu do người dùng nhập 
vào trong ví dụ ở phần “Nhắc người dùng nhập liệu” trang 84. 
4. Bảo mật mã nguồn chương trình VBA 
Mặc dù không hỗ trợ tạo ra các chức năng bảo vệ, nhưng VBA cung cấp mật khẩu 
bảo vệ cho các đối tượng nhìn thấy được của một dự án gồm các Form, các lớp, 
môđun. Có thể tìm thấy chức năng bảo mật trong trình đơn của VBA IDE như sau: 
Chọn Tools ˜ Project Properties ˜ Protection. 
5. Thực thi Macro từ trình đơn hoặc thanh công 
cụ 
Macro có thể được gọi từ thanh công cụ hoặc trình đơn của AutoCAD bằng cách 
thay đổi thuộc tính Macro của thanh công cụ hoặc trình đơn đó. Thuộc tính Macro 
phải gán bằng: 
-VBARUN Tên_tệp.dvb!Tên_dự_án.Tên_Macro 
trong đó: tên tệp, tên dự án, và tên Macro được chỉ ra trên dòng lệnh cùng với lệnh 
VBARUN. Tên tệp chỉ cần thiết khi tệp đó chưa được tải vào phiên làm việc hiện 
tại của AutoCAD, nếu đã có tên tức là tệp đó đã được tải vào. 
Tham khảo thêm các thông tin cụ thể về thay đổi trình đơn và thanh công cụ trong 
chương 6 “TÙY BIẾN THANH CÔNG CỤ VÀ TRÌNH ĐƠN” trang 175. 
6. Tự động tải dự án VBA 
Có 2 cách khác nhau để tải tự động một dự án: 
ƒ Khi khởi động, VBA sẽ tìm trong đường dẫn của AutoCAD một dự án có 
tên là acad.dvb. Tệp này sẽ tự động tải như một dự án mặc định; 
ƒ Tất cả các dự án có tên khác với acad.dvb đều có thể được sử dụng sau khi 
tải vào bằng lệnh VBALOAD. Đoạn mã lệnh dưới đây sử dụng tệp khởi 
động của AutoLISP để tải VBA cũng như dự án VBA có tên là myproj.dvb 
 284 | Chương 11: Phát triển ứng dụng bằng VBA 
khi AutoCAD bắt đầu hoạt động. Chạy trình soạn thảo notepad.exe và tạo 
(hoặc thêm vào) tệp acad.lsp như sau: 
(defun S::STARTUP() 
(command "_VBALOAD" "myproj.dvb") 
) 
7. Tự động thực thi Macro 
Tự động thực thi Macro khi khởi động AutoCAD 
Bất cứ Macro nào trong tệp acad.dvb đều có thể tự động thực hiện bằng cách gọi 
gián tiếp macro đó qua câu lệnh VBARUN từ một tiện ích khởi động nào đó của 
AutoCAD, như tệp acad.lsp. Ví dụ, để tự động thực hiện macro tên là drawline, 
trước hết lưu macro đó vào tệp acad.dvb, tiếp đó khởi động chương trình soạn thảo 
notepad.exe và tạo mới (hoặc thêm vào) tệp acad.lsp như sau : 
(defun S::STARTUP() 
(command "_-vbarun" "drawline") 
) 
Tự động thực thi Macro khi tải VBA 
Ta có thể tự động chạy một Macro trong tệp acad.dvb bằng cách đặt tên cho Macro 
là AcadStartup. Bất cứ Macro nào trong tệp acad.dvb có tên như vậy sẽ được tự 
động chạy khi tải VBA. 
8. Tự động mở VBA IDE mỗi khi tải một dự án 
Trên hộp thoại Open VBA Project có một tuỳ chọn cho phép môi trường IDE được 
mở tự động khi một dự án VBA được tải. Tuỳ chọn này nằm ở góc dưới bên trái của 
hộp thoại và khi đã được chọn thì nó sẽ được giữ nguyên như vậy cho đến khi bị tắt 
đi. 
CHÚ Ý Mở hộp thoại Open VBA Project từ dòng lệnh VBALOAD. Hộp thoại sẽ xuất hiện và 
cho phép người dùng lựa chọn dự án để tải vào. Nếu không nhìn thấy hộp thoại thì có thể 
do biến FILEDIA đã bị tắt đi. Đó là biến điều khiển sự xuất hiện của các hộp thoại, và để 
bật trở lại thì gán cho biến giá trị bằng 1. 
9. Làm việc khi không có bản vẽ được mở 
Một số điều cần lưu ý khi làm việc ở chế độ không có bản vẽ nào được mở: 
ƒ Đối tượng ThisDrawing chưa được định nghĩa ở trường hợp này. Khi đó 
việc sử dụng đối tượng này sẽ gây ra lỗi. 
ƒ Các đối tượng phụ thuộc vào bản vẽ cũng không được định nghĩa ở trường 
hợp này. Các đối tượng thuộc nhóm này là những đối tượng nằm dưới nhánh 
của đối tượng Document trong mô hình đối tượng của AutoCAD. Với 
những đối tượng không phụ thuộc bản vẽ như Application hoặc MenuBar thì 
được phép làm việc ở trạng thái này. 
 Phát triển AutoCAD bằng ActiveX và VBA | 285 
ƒ AutoCAD không hiện dòng lệnh khi không có bản vẽ nào mở, nên bất cứ sự 
cố gắng dùng qua dòng lệnh của chương trình ở trạng thái này đều sẽ gây 
lỗi. 
10. Phân phối ứng dụng 
Ứng dụng VBA có thể được phân phối theo hai cách sau: 
ƒ Nhúng vào bản vẽ AutoCAD 
ƒ Lưu dự án VBA vào tệp 
Hình thức phân phối cần được lựa chọn cho phù hợp với ứng dụng. Những ứng 
dụng có thể áp dụng trong bản vẽ hiện tại và không can thiệp vào các bản vẽ khác 
thường được nhúng luôn vào bản vẽ đó. Bằng cách này, ta có thể chắc chắn là ứng 
dụng đã được tải và sẵn sàng để sử dụng mỗi khi bản vẽ được mở. 
Những ứng dụng được sử dụng bởi nhiều người và được cập nhật một cách thường 
xuyên, cần đóng mở nhiều bản vẽ khác, hoặc không được sử dụng thường xuyên, 
thì nên lưu thành tệp dự án của VBA riêng. Theo cách này, có một nơi tập trung 
ứng dụng và tất cả mọi người sẽ được đảm bảo sử dụng phiên bản mới nhất. 
Các thông tin chi tiết về dự án được nhúng và tệp dự án VBA, tham khảo trong 
phần “Khái niệm về dự án VBA nhúng và độc lập” trang 28. 
10.1. Phân phối ứng dụng Visual Basic 
Ứng dụng Visual Basic hay bất cứ ứng dụng chạy độc lập nào đều không thể lưu 
trong một bản vẽ của AutoCAD. Chúng được biên dịch thành những tệp thực thi 
độc lập (EXE) và có thể chạy bằng lệnh APPLOAD của AutoCAD. 

File đính kèm:

  • pdfgiao_trinh_phat_trien_autocad_bang_activex_vba_chuong_11_pha.pdf