C C H H Ư Ư Ơ Ơ N N G G I I : : K K H H Á Á I I N N I I Ệ Ệ M M 13 Hình I-1: Lập bảng tính kết cấu mặt đường trên Excel Hình I-2: Tạo bản vẽ bình đồ tuyến đường ô tô trên AutoCAD Để có thể kết nối với nhau, các phần mềm chuyên dụng thường cung cấp kết quả tính toán dưới dạng dữ liệu có cấu trúc và được lưu trữ trong các tệp có định dạng TEXT, ví dụ như CSV hay DXF. Với các dữ liệu có cấu trúc này, người dùng sẽ tự thực hiện việc kết nối các phần mềm lại với nhau. Việc kết nối này cũng chỉ có thể giải quyết thêm m ột số bài toán phát sinh, cho nên một số phần mềm đã cho phép người dùng có thể can thiệp sâu hơn nữa vào bên trong nó bằng các công cụ lập trình, để họ có thể tự giải quyết các bài toán phát sinh mà người thiết kế phần mềm không thể dự kiến trước được. Khi người dùng xây dựng những chương trình của họ dựa trên những ứng dụng được thiết kế theo cấu trúc mở này, họ sẽ tậ n dụng những khả năng 14 sẵn có của chúng để làm nền, giúp cho việc lập trình được nhanh và hiệu quả hơn rất nhiều so với cách lập trình thông thường, và do đó, có thể gọi chúng là các ứng dụng nền, điển hình và được sử dụng nhiều nhất làm ứng dụng nền trong lĩnh vực thiết kế là AutoCAD và Excel, ngoài việc phù hợp với định dạng tài liệu trong hồ sơ thiết kế (bản vẽ và bảng tính) chúng còn cho phép ng ười dùng xây dựng các chương trình chạy cùng với mục đích bổ sung thêm các chức năng chuyên biệt. Như vậy, một phần mềm được gọi là ứng dụng nền khi nó thỏa mãn đồng thời các tiêu chí sau: Ø Ø Cho phép một chương trình chạy bên trong và cùng với nó (tương tự như một lệnh). Ø Ø Cho phép sử dụng các tính năng của nó thông qua công cụ lập trình thích hợp. Hình I-3: Mô hình lập trình trên ứng dụng nền Một lệnh mới hay một chức năng mới được xây dựng trên ứng dụng nền thực chất là một chương trình hoàn chỉnh, vì vậy, để xây dựng nó cần có công cụ lập trình tương ứng. Thông thường công cụ lập trình được hiểu như là một tập hợp bao gồm: Ø Ø Ngôn ngữ lập trình. Ø Ø Môi trường lập trình. Ø Ø Thư việ n hỗ trợ lập trình. Một ví dụ về công cụ lập trình trên AutoCAD, đó là AutoLISP. Với công cụ lập trình này, không nhất thiết phải có môi trường lập trình và thư viện hỗ trợ lập trình, ta chỉ cần tạo ra một tệp dạng TEXT chứa các mã lệnh viết bằng ngôn ngữ AutoLISP. Tuy nhiên từ phiên bản AutoCAD R14, để thuận tiện cho người lập trình, một môi trường lập trình dành cho AutoLISP đã được bổ sung, đó là Visual LISP. Với môi tr ường lập trình này, việc lập và kiểm soát chương trình trở nên thuận lợi hơn rất nhiều, bởi Visual LISP đã được tích hợp nhiều tính năng hỗ trợ lập trình chuyên nghiệp, trong khi đó, nếu ta không sử dụng môi trường lập trình, thì tuy ta có thể viết được một chương trình AutoLISP hoàn chỉnh, song trong suốt quá trình xây dựng chương trình này ta luôn phải vất vả để tự kiểm soát chương trình. C C H H Ư Ư Ơ Ơ N N G G I I : : K K H H Á Á I I N N I I Ệ Ệ M M 15 Hình I-4: Xây dựng chương trình bằng ngôn ngữ AutoLISP khi không sử dụng môi trường lập trình, ta sẽ luôn phải tự kiểm soát cú pháp và các lệnh mà không có bất cứ hỗ trợ nào vì thế khả năng nhầm lẫn là rất lớn. Hình I-5: Lập trình bằng ngôn ngữ AutoLISP trên môi trường lập trình Visual LISP, ta luôn nhận được sự hỗ trợ tự động bằng màu sắc hay các tính năng khác trong môi trường lập trình. Thư viện hỗ trợ lập trình có thể rất đa dạng và thường là những phần bổ sung giúp cho việc xây dựng chương trình được nhanh hơn thông qua sự kế thừa những thứ đã được làm từ trước. Khi lập trình bằng AutoLISP thì thư viện hỗ trợ lập trình là tập hợp các chương trình hoàn chỉnh cũng viết bằng AutoLISP. Để sử dụng thư viện hỗ trợ lậ p trình thì mỗi công cụ lập trình có một quy định về cách thức sử dụng riêng, ví dụ với AutoLISP, để sử dụng một chương trình con trong thư viện, ta chỉ cần tải chương trình AutoLISP chứa chương trình con đó thông qua một câu lệnh từ chương trình chính. 16 Tương ứng với từng ứng dụng nền thì sẽ có các công cụ lập trình phù hợp. Một ứng dụng nền có thể hỗ trợ một hay nhiều công cụ lập trình khác nhau, tùy mục đích sử dụng. AutoCAD hỗ trợ các công cụ lập trình trên ứng dụng nền sau: Ø Ø AutoLISP Ø Ø ObjectARX Ø Ø VBA (Visual Basic for Applications) Còn Excel hỗ trợ các công cụ lập trình: Ø Ø VBA Ø Ø VSTO (Visual Studio Tools for Office) Mỗi công cụ lập trình luôn có những đặc điểm riêng và khó có thể phán xét cái nào hay hơn hoặc kém hơn một cách tổng quát. Do đó, để lựa chọn được công cụ lập trình thích hợp khi lập trình trên ứng dụng nền, cần dựa vào mục đích cụ thể. Ví dụ khi lập trình trên AutoCAD, để tạo các công cụ trợ giúp vẽ thì AutoLISP là lựa chọn hợp lý. Nhưng để xây dựng những ứng dụng l ớn, phức tạp, đòi hỏi phải can thiệp sâu vào bên trong AutoCAD thì chỉ có thể dùng ObjectARX mới làm được. Trong lĩnh vực tự động hóa thiết kế công trình giao thông, hầu hết các bài toán lớn và cơ bản đã được giải quyết, nhưng còn rất nhiều các bài toán khác, tuy không lớn và không quá phức tạp, nhưng lại rất đa dạng và khó khái quát, vẫn chưa có phần mềm thực hiện, và do đó, phạm vi ứng dụng của lập trình trên ứng dụng nền là rất lớn và có tính hiệu quả cao. Hơn nữa, với quy mô của các bài toán này, thì việc lựa chọn VBA làm công cụ lập trình là rất phù hợp bởi: Ø Ø Ngôn ngữ lập trình Visual Basic (VB) là một loại ngôn ngữ dễ sử dụng, có số lượng người dùng đông đảo và tài liệu tham khảo rất phong phú. Điều này cho phép người dùng trao đổi kỹ năng, tìm kiếm tài liệu, mã nguồn một cách dễ dàng. Ø Ø Môi trường lập trình thân thiện, dễ dùng và đầy đủ nên việc xây dựng ứng dụng sẽ nhanh và không cần thêm công cụ lập trình nào khác. Ø Ø Trên tất cả các ứng dụng nền hỗ trợ VBA, giao diện lập trình là đồng nhất, do đó người dùng có thể lập trình mở rộng trên nhiều ứng dụng nền một cách thuận lợi. Ø Ø Thư viện lập trình có rất nhiề u và đa dạng cho nên người dùng có thể xây dựng ứng dụng của mình nhanh và chuyên nghiệp. Ø Ø Tốc độ thực thi của chương trình nhanh. Ø Ø Khai thác được hầu hết các tính năng sẵn có của ứng dụng nền. Ø Ø Chương trình VBA có thể được nhúng trong tệp của ứng dụng nền (chẳng hạn như tệp bảng tính của Excel hay tệp bản vẽ của AutoCAD) hoặ c có thể được lưu dưới dạng một dự án độc lập. Điều này giúp cho việc phân phối, chia sẻ mã lệnh được thuận tiện. Kếtchương Tự động hóa công tác lập hồ sơ thiết kế công trình giao thông là hoàn toàn khả thi và có thể được thực hiện theo nhiều cách khác nhau. Dự án VBA nên xây dựng theo hướng gộp cả phần tính toán và xuất kết quả vào một mô-đun thống nhất. Sử dụng AutoCAD và Excel làm ứng dụng nền để xây dựng các ứng dụng bằng VBA nhằm mục đích hỗ trợ thiết kế là lựa chọn mang tính khả thi cao và có nhiều ưu điểm. Để lập trình với VBA, cách tốt nhất, là làm chủ từng phần. Đầu tiên cần nắm vững ngôn ngữ lập trình Visual Basic và cách sử dụng VBA IDE để viết mã lệnh cũng như thiết kế giao diện. C C H H Ư Ư Ơ Ơ N N G G I I : : K K H H Á Á I I N N I I Ệ Ệ M M 17 Sau đó nghiên cứu mô hình đối tượng của ứng dụng nền (là những thành phần của ứng dụng nền mà người dùng có thể sử dụng) cũng như cách sử dụng chúng bằng VBA. 18 C C H H Ư Ư Ơ Ơ N N G G I I I I : : T T Ổ Ổ N N G G Q Q U U A A N N V V Ề Ề V V B B A A 19 CHƯƠNG II: TỔNG QUAN VỀ VBA 1. Đặc điểm của VBA Từ các đặc điểm cơ bản đã được phân tích ở cuối chương 1 ta có thể thấy rằng VBA là một công cụ lập trình cho phép phát triển nhanh phần mềm và được tích hợp vào trong ứng dụng nền. Về thực chất, VBA được xây dựng dựa trên kiến trúc COM 1 , cho nên người dùng có thể sử dụng các thành phần sẵn có của ứng dụng nền trong việc xây dựng chương trình của mình với VBA. Một dự án được xây dựng bằng VBA dựa trên ứng dụng nền nào thì nó phụ thuộc chặt chẽ vào ứng dụng nền đó, bởi theo mặc định, dự án VBA sẽ hoạt động và sử dụng các thành phần trong chính ứng dụng nền đó. Điều này có ngh ĩa là ta rất khó có thể chuyển đổi một dự án VBA từ loại ứng dụng nền này sang một ứng dụng nền khác cũng như tạo ra một ứng dụng chạy độc lập. Sự khác biệt cơ bản nhất của VBA trong các ứng dụng nền (ví dụ giữa VBA trong AutoCAD và VBA trong Excel) là cách thức sử dụng các thành phần (đối tượng) của ứng dụng nền. Cho nên khi xây dựng ứng d ụng bằng VBA, việc đầu tiên là phải tìm hiểu mô hình đối tượng của ứng dụng nền và cách sử dụng chúng. Như trong chương trước đã trình bày, xây dựng một dự án VBA, một cách tổng quát, người dùng cần nắm vững hai phần: Ø Ø Ngôn ngữ lập trình Visual Basic và giao diện lập trình VBA IDE. Phần này sẽ bao gồm các nội dung kiến thức trong chương 2 và 3. Ø Ø Mô hình đối tượng của ứng dụng n ền và cách sử dụng chúng. Nội dung kiến thức của phần này sẽ được trình bày trong chương 4 và 5. 2. Trình tự xây dựng một dự án bằng VBA Về mặt trình tự thực hiện, việc xây dựng một dự án VBA bao gồm các bước sau: 1. Xác định rõ nhu cầu xây dựng chương trình. Nhu cầu này được xác định dựa trên hoạt động thực tế của người dùng và thường do chính người dùng đề xuất. Đây là bước xác định các chức năng của chương trình. 2. Xác định rõ mục tiêu mà chương trình cần đạt được. Bước này là phần cụ thể hóa củ a bước 1, ví dụ như bước 1 có nhu cầu hoàn thiện bản vẽ kết cấu BTCT, còn bước này sẽ cụ thể mức độ hoàn thiện (đến đâu và như thế nào). 3. Lựa chọn ứng dụng nền và công cụ lập trình phù hợp cho việc xây dựng chương trình. Ví dụ với nhu yêu cầu tính và tạo bản vẽ của cấu kiện BTCT, thì ứng dụng nền thích hợp là AutoCAD và công cụ lậ p trình có thể là AutoLISP, VBA, ObjectARX. Tùy theo mức độ phức tạp của bài toán mà ta lựa chọn công cụ lập trình phù hợp. Ở đây VBA đảm bảo sự thuận tiện trong việc xây dựng các mô-đun tính toán và tạo bản vẽ đối với những bài toán thông thường. 4. Thiết kế hệ thống cho chương trình (hay dự án): bao gồm việc lập sơ đồ khối, xác định các mô-đun của chương trình, thiết kế giao diệ n nhập xuất dữ liệu và kết quả, xây dựng hệ thống cơ sở dữ liệu sao cho thỏa mãn những đề xuất ở bước 1 và 2. 1 COM (Component Object Model): là một kiến trúc lập trình được thiết kế bởi Microsoft. Mục đích của công nghệ này là tạo ra một chuẩn công nghệ trong lập trình, mà ở đó cho phép xây dựng chương trình theo mô hình lắp ghép hay sử dụng lại các sản phẩm đã được hoàn thiện từ trước theo chuẩn COM. 20 5. Viết mã lệnh (lập trình): là việc sử dụng công cụ lập trình để tạo ra chương trình phù hợp với hệ thống đã được thiết kế ở bước 4. 6. Kiểm thử chương trình: là công đoạn hoàn thiện và chuẩn bị đưa chương trình vào sử dụng. Những công việc chính của bước này bao gồm: Ø Ø Kiểm tra xem các chức năng của chương trình đã th ỏa mãn các yêu cầu đề ra từ trước chưa bằng cách chạy thử tất cả các tính năng của chương trình dựa trên một kịch bản cụ thể. Ø Ø Kiểm tra hiệu năng của chương trình: xem thời gian thực hiện và quy trình sử dụng chương trình có hợp lý không. Ø Ø Kiểm tra khả năng chịu lỗi của chương trình, ví dụ như khi nhập số liệu sai. M ột chương trình đảm bảo khả năng chịu lỗi là nó sẽ không bị dừng lại đột ngột do lỗi thao tác của người dùng hay dữ liệu sai. 7. Đóng gói, đưa chương trình vào sử dụng: bao gồm việc xây dựng tài liệu hướng dẫn cài đặt và sử dụng chương trình nhằm mục đích giúp người dùng có thể triển khai chương trình vào thực tế. 8. Tiếp nhận các góp ý, phản h ồi của người dùng để bổ sung hay hoàn thiện những khiếm khuyết của chương trình mà trong quá trình thiết kế hệ thống hay kiểm thử đã bỏ qua hoặc chưa phát hiện được. 9. Nâng cấp chương trình: sau một thời gian sử dụng, dựa trên những phản hồi của người dùng, nếu thấy rằng chương trình cần bổ sung thêm những tính năng mới thì người phát triển phần m ềm sẽ thực hiện sự bổ sung này dựa trên những thành phần đã có từ trước. 3. Cấu trúc của một dự án VBA Khi nói đến các thành phần tạo nên một dự án VBA thì cấu trúc của nó, về tổng quát, như sau: Ø Ø Mô-đun chuẩn (Module): là nơi chứa các mã lệnh khai báo, các chương trình con (hàm và thủ tục). Việc tạo ra các mô-đun chuẩn thường căn cứ theo các khối chức năng mà người thiết kế hệ thống đặt ra. Ø Ø Mô-đun lớp (Class Module): là nơi chứa định nghĩa cho các lớp của dự án. Ø Ø Userform: là giao diện dạng hộp thoại giúp cho việc giao tiếp giữa người sử dụng và chương trình được thuận tiện. Thông thường người ta sử dụng Userform để nhập số liệu, xuất kết quả của chương trình. Trong một số dự án, nếu việc nhập số liệu và biểu diễn kết quả được thực hiện trực tiếp trên ứng dụng nền, thì có thể không cần sử dụng Userform. Những thành phần này là bộ khung để người dùng xây dựng chương trình của mình lên trên đó, ví dụ như viết mã lệnh hay thiết kế giao diện cho chương trình. Mô-đun lớp và UserForm là hai thành phần có thể xuất hiện hoặc không thùy thuộc vào từng dự án và tất cả những thành phần sử dụng trong dự án đều được hiển thị trên giao diện của VBA IDE. C C H H Ư Ư Ơ Ơ N N G G I I I I : : T T Ổ Ổ N N G G Q Q U U A A N N V V Ề Ề V V B B A A 21 Hình II-1: Cấu trúc của dự án thể hiện trên VBA IDE Tuy nhiên, khi xây dựng chương trình (viết mã lệnh) cụ thể thì khái niệm cấu trúc của một chương trình là sự bố trí, sắp xếp các câu lệnh trong chương trình đó. Như vậy khái niệm cấu trúc này phụ thuộc vào từng loại ngôn ngữ lập trình. Đối với ngôn ngữ lập trình Visual Basic (VB), cấu trúc của nó chỉ tập trung vào chương trình con (hàm và thủ tục) chứ không có một quy định về cấu trúc nào đối với chương trình chính. Chi tiết c ủa cấu trúc của chương trình con sẽ được đề cập đến trong các phần sau. 4. Môi trường phát triển tích hợp VBA IDE Trong mỗi công cụ lập trình trên ứng dụng nền, luôn có một môi trường lập trình nhằm hỗ trợ người dùng có thể xây dựng, thử nghiệm và hoàn thiện chương trình của mình. Trong AutoCAD và Excel, khi sử dụng VBA để lập trình, môi trường lập trình được gọi là Môi trường phát triển tích hợp (viết tắt là VBA IDE). Trên tất cả các ứng dụng nền, VBA IDE có cấu trúc và hoạt động tương đương nhau với giao diện cơ bản và cách g ọi giao diện VBA IDE từ ứng dụng nền như sau: Ø Ø Phím tắt: từ giao diện chính của ứng dụng nền, nhấn tổ hợp phím Alt+F11. Ø Ø Menu: Tools Ö Macro Ö Visual Basic Editor. 22 Hình II-2: Giao diện chính của VBA IDE 1. Thanh trình đơn (Menu bar): chứa tất cả các lựa chọn cần thiết để thao tác với VBA IDE 2. Cửa sổ dự án (Project Explorer Window): liệt kê dưới dạng cây phân cấp các dự án hiện đang được mở trong VBA IDE và các thành phần có trong từng dự án như các tài liệu thành phần, các mô-đun chứa chương trình con, các mô-đun lớp, các cửa sổ do người dùng tạo. GỢI Ý Việc thêm các thành phần mới vào trong một dự án được thực hiện trong menu Insert của VBA IDE. Ví dụ muốn thêm một mô-đun chuẩn vào trong dự án, chọn Insert Ö Module 3. Cửa sổ mã lệnh (Code Window): mỗi thành phần được liệt kê trong cửa sổ dự án đều có một cửa sổ mã lệnh riêng, chứa mã lệnh cho thành phần đó. Người dùng có thể hiệu chỉnh mã lệnh, tạo ra mã lệnh mới trong cửa sổ mã lệnh. . sẽ có các công cụ lập trình phù hợp. Một ứng dụng nền có thể hỗ trợ một hay nhiều công cụ lập trình khác nhau, tùy mục đích sử dụng. AutoCAD hỗ trợ các công cụ lập trình trên ứng dụng nền sau:. thông qua công cụ lập trình thích hợp. Hình I-3: Mô hình lập trình trên ứng dụng nền Một lệnh mới hay một chức năng mới được xây dựng trên ứng dụng nền thực chất là một chương trình hoàn. nhiều so với cách lập trình thông thường, và do đó, có thể gọi chúng là các ứng dụng nền, điển hình và được sử dụng nhiều nhất làm ứng dụng nền trong lĩnh vực thiết kế là AutoCAD và Excel,