intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

Tự động hóa trong thiết kế cầu đường part 2

Chia sẻ: Pham Duong | Ngày: | Loại File: PDF | Số trang:0

113
lượt xem
19
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

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.

Chủ đề:
Lưu

Nội dung Text: Tự động hóa trong thiết kế cầu đường part 2

  1. 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. 22
  2. CHƯƠNG II: TỔNG QUAN VỀ VBA  4. Cửa sổ tra cứu đối tượng (Object Browser Window): hiển thị các lớp, phương thức, thuộc tính, sự kiện và hằng số có trong thư viện đối tượng và trong dự án mà người dùng vừa tạo. Ta có thể sử dụng cửa sổ này để tìm kiếm, tra cứu tất cả các đối tượng mà ta vừa tạo ra cũng như các đối tượng trong các chương trình khác. 5. Cửa sổ đối tượng trực quan (Visual Object Window): khi người dùng tạo các đối tượng trực quan thì cửa sổ này sẽ cho phép người dùng thao tác trên các điều khiển một cách dễ dàng và thuận tiện. 6. Hộp công cụ chứa điều khiển (Tool Box): chứa các thanh công cụ giúp người dùng có thể chèn các điều khiển vào cửa sổ người dùng (UserForm). 7. Cửa sổ thuộc tính (Properties Window): cửa sổ này liệt kê tất cả các thuộc tính của đối tượng, qua đó người dùng có thể tham khảo và thay đổi các thuộc tính khi cần như màu chữ, tên đối tượng… 5. Ví dụ đầu tiên với VBA Ví dụ này được trình bày với mục đích giúp người dùng làm quen với VBA IDE trong Excel. Kết quả của ví dụ là hiển thị nội dung ô A1 trong Sheet1 của bảng tính lên tiêu đề của một hộp thoại người dùng (UserForm). Trình tự thực hiện như sau: 1. Mở ứng dụng Excel, nhấn tổ hợp phím ALT+F11 để vào VBA IDE. 2. Trong VBA IDE, chọn menu Insert UserForm để thêm một hộp thoại người dùng vào trong dự án. 3. Chọn tiếp menu Insert Module để thêm một mô-đun chuẩn vào trong dự án. 4. Chọn Module1 và soạn thảo mã lệnh trong mô-đun đó như sau: 23
  3. Public Sub FirstPro() UserForm1.Show UserForm1.Caption = Sheets("Sheet1").Range("A1").Value End Sub Sau đó quay trở lại Excel, và chạy chương trình theo trình tự: 1. Gõ vào ô A1 của Sheet1 nội dung “Hello, World”. 2. Chọn menu Tools Macro Macros (hoặc nhấn tổ hợp phím ALT+ F8). 3. Trong hộp thoại Macro, chọn macro có tên FirstPro rồi nhấn nút Run. Kết quả chương trình sẽ hiển thị như hình dưới đây: Hộp thoại Macro Kết quả trên Excel Mr. Soat -TEL: (0989)744887 -Email: kimjuso1987@gmail.com -Y! kimjuso1987 -Web: http://soat.tk
  4. CHƯƠNG III: CƠ BẢN VỀ NGÔN NGỮ LẬP TRÌNH VISUAL BASIC  CHƯƠNG III: CƠ BẢN VỀ NGÔN NGỮ LẬP TRÌNH VISUAL BASIC Trong chương này sẽ trình bày những kiến thức cơ bản trong ngôn ngữ lập trình Visual Basic (VB) như: cú pháp, các từ khoá, các kiểu dữ liệu, các khai báo,… Tất cả các ví dụ sẽ được viết và trình bày kết quả trong VBA IDE. 1. Những qui định về cú pháp Cú pháp được hiểu là một một tập hợp bao gồm các quy tắc, luật lệ về trật tự và hình thức viết của một câu lệnh hay một cấu trúc lệnh. Trong ngôn ngữ lập trình Visual Basic (VB), cũng như các ngôn ngữ lập trình khác, đều có những quy định về cú pháp cho việc viết mã lệnh và người lập trình cần phải tuân theo các quy tắc này để trình biên dịch có thể dịch mã lệnh mà không phát sinh lỗi. Sau đây là các quy định cơ bản về cú pháp của VB: Các câu lệnh phải là các dòng riêng biệt. Nếu có nhiều lệnh trên cùng một dòng thì giữa các lệnh ngăn cách nhau bằng dấu hai chấm (:). Nếu dòng lệnh quá dài, muốn ngắt lệnh thành hai dòng thì sử dựng dấu cách và dấu gạch dưới ( _ ). Nếu muốn chèn thêm ghi chú, phải bắt đầu dòng chú thích bằng dấu nháy đơn (’). Qui ước khi đặt tên: phải bắt đầu bằng kí tự kiểu chữ cái thông thường; không chứa dấu chấm, dấu cách hay các ký tự đặc biệt khác; không quá 255 kí tự; không trùng với các từ khoá; các biến có cùng một phạm vi thì không được đặt tên trùng nhau. 2. Các trợ giúp về cú pháp trong quá trình viết mã lệnh Các quy tắc về cú pháp thường khó nhớ đối với những người mới học lập trình hay mới sử dụng ngôn ngữ lập trình mới, cho nên, để thuận tiện cho người lập trình, VBA IDE cung cấp tính năng tự động phát hiện lỗi cú pháp trong quá trình viết mã lệnh. Tuy nhiên việc kiểm tra tự động này có thể gây khó chịu cho những lập trình viên chuyên nghiệp, những người rất hiếm khi mắc lỗi cú pháp khi lập trình, cho nên chức năng này chỉ hoạt động khi được kích hoạt, bằng cách chọn trình đơn Tools Options Editor Code Settings. Hình III-1: Bật / Tắt trợ giúp phát hiện lỗi cú pháp của VBA IDE Ý nghĩa của hai tùy chọn này như sau: Tự động kiểm tra lỗi cú pháp (Auto Systax Check): Tùy chọn này cho phép VBA IDE tự động phát hiện lỗi cú pháp ngay sau khi người dùng kết thúc dòng lệnh (xuống dòng mới), một hộp thoại (như hình dưới đây) sẽ thông báo vị trí gây lỗi cũng như nguyên nhân gây lỗi. Nếu người dùng bỏ qua không sửa ngay thì dòng lệnh có lỗi sẽ được đánh dấu. 25
  5. Hình III-2: VBA IDE tự động kiểm tra lỗi cú pháp và thông báo cho người dùng Kiểm tra các biến (Require Variable Declaration): Trong VB, người dùng có thể sử dụng một biến mà không cần khai báo. Trong trường hợp này biến sẽ được khởi tạo và nhận một giá trị mặc định. Tuy nhiên, nếu lạm dụng điều này, rất có thể sẽ làm cho chương trình khó quản lý và dễ nhầm lẫn, vì thế VBA IDE cung cấp tùy chọn này để cho phép người dùng thiết lập tính năng kiểm soát quá trình khai báo biến. Khi tùy chọn này được kích hoạt, tất cả các biến đều phải khai báo trước khi sử dụng và VBA IDE sẽ tự động thêm vào đầu của mỗi mô-đun dòng lệnh “Option Explicit”. Hình III-3: VBA IDE tự động thông báo lỗi khi biến được sử dụng mà chưa khai báo 3. Tính năng gợi nhớ và tự hoàn thiện mã lệnh Mã lệnh, thông thường là một tập hợp bao gồm các từ khóa, câu lệnh, tên biến hay toán tử được sắp xếp theo một trật tự nhất định. Tên của các thành phần này có thể khó nhớ chính xác hoặc quá dài, cho nên VBA IDE đưa ra tính năng này bằng cách hiển thị những thành phần có thể phù hợp với vị trí dòng lệnh đang soạn thảo trong một danh sách và sẽ tự động điền vào chương trình theo lựa chọn của người dùng (bấm phím Tab). Để kích hoạt tính năng này, trong VBAIDE, chọn trình đơn Tools Options Editor. Hình III-4: Bật / tắt trợ giúp hoàn thiện mã lệnh tự động trong VBA IDE 26
  6. CHƯƠNG III: CƠ BẢN VỀ NGÔN NGỮ LẬP TRÌNH VISUAL BASIC  Ý nghĩa của các tùy chọn này như sau: Tự động hiển thị danh sách các thành phần của đối tượng (Auto List Member): Với tùy chọn này, khi một đối tượng của ứng dụng nền hay của chương trình được gọi ra để sử dụng thì một danh sách các thành phần của nó (bao gồm các phương thức và thuộc tính) sẽ được tự động hiển thị để người dùng chọn, sau khi bấm phím Tab, tên của thành phần này sẽ được tự động điền vào vị trí thích hợp trong dòng lệnh. Hình III-5: Danh sách các thành phần được tự động hiển thị. Tự động hiển thị cú pháp cho chương trình con (Auto Quick Info): Với tùy chọn này, VBA IDE sẽ hiển thị những thông tin về tham số của một hàm hay thủ tục (đã được xây dựng từ trước) khi người dùng sử dụng nó. Các thông tin này bao gồm tên của tham số cùng với kiểu của nó. Hình III-6: Tự động hiển thị thông tin của các tham số trong chương trình con. Tự động hiển thị giá trị của biến (Auto Data Tips): Với tùy chọn này, trong chế độ gỡ rối (Break mode), giá trị của biến (được gán trong quá trình chạy của chương trình) sẽ được hiển thị khi người dùng đặt chuột tại vị trí biến. Ngoài ra, nếu những tính năng trợ giúp trên chưa được kích hoạt, trong quá trình viết mã lệnh, người dùng có thể kích hoạt tạm thời chúng bằng cách nhấn tổ hợp phím Ctrl + Space. Cần chú ý rằng, khi danh sách trợ giúp hiện ra, người dùng có thể sử dụng chuột hoặc phím mũi tên để lựa chọn mục cần sử dụng trong danh sách đó rồi bấm phím Tab để xác nhận. 4. Từ khoá trong VB Từ khoá là tập hợp các từ cấu thành một ngôn ngữ lập trình. Mỗi ngôn ngữ lập trình đều có một bộ từ khoá riêng, dưới đây là danh sách các từ khoá trong ngôn ngữ lập trình VB: 27
  7. As For Mid Print String Binary Friend New Private Then ByRef Get Next Property Time ByVal Input Nothing Public To Date Is Null Resume True Else Len On Seek WithEvents Empty Let Option Set Error Lock Optional Static False Me ParamArray Step Các từ khóa là những từ được dùng riêng cho những chức năng khác nhau trong ngôn ngữ lập trình, ví dụ từ khóa “Private” hạn chế phạm vi sử dụng của biến hay chương trình con. Do đó việc đặt tên (biến, chương trình con) bắt buộc phải khác so với các từ khóa, nếu không sẽ phát sinh lỗi cú pháp. Hình III-7: VBA IDE báo lỗi do tên biến trùng tên với từ khóa 5. Các kiểu dữ liệu cơ bản Khi một chương trình vận hành, nó sẽ tác động và làm thay đổi giá trị của một vài thông số trong chương trình, ví dụ trong chương trình giải phương trình bậc 2, các thành phần trong phương trình: y=ax2+bx+c sẽ cần thay đổi giá trị khi chương trình hoạt động. Như vậy giá trị của các thông số này có nhu cầu thay đổi trong những lần hoạt động khác nhau của chương trình cũng như trong một lần hoạt động nào đó, ví dụ giá trị của y sẽ thay đổi khi ta thay đổi giá trị của a trong phương trình trên. Chính bởi nhu cầu thay đổi giá trị này mà người ta đưa khái niệm “biến” để mô tả sự “động” của những thông số này. Với mỗi biến, giá trị của nó luôn được quy định là phải thuộc một kiểu dữ liệu nào đó, ví dụ giá trị của y trong phương trình trên phải là kiểu số thực. Do ngôn ngữ lập trình được thiết kế để thực hiện nhiều nhiệm vụ khác nhau cho nên trong ngôn ngữ lập trình nào cũng luôn có nhiều kiểu dữ liệu để thích ứng với nhu cầu đa dạng của việc lập trình. Kiểu dữ liệu là loại giá trị mà một biến có thể nhận, nói cách khác, khi một biến được khai báo thì ta buộc phải gán cho nó một kiểu dữ liệu nhất định. Về tổng thể có thể chia các kiểu dữ liệu trong VB ra làm hai loại: 28
  8. CHƯƠNG III: CƠ BẢN VỀ NGÔN NGỮ LẬP TRÌNH VISUAL BASIC  Các kiểu dữ liệu được định nghĩa sẵn trong VB: là những kiểu dữ liệu cơ bản và thường gặp như kiểu số thực (Double), số nguyên (Integer), Chuỗi (String)... Các kiểu dữ liệu do người dùng tự định nghĩa: là kiểu dữ liệu được tự xây dựng dựa trên những thành phần dữ liệu cơ bản trong VB. Cách xây dựng kiểu dữ liệu này được đề cập trong phần dưới. 5.1. Kiểu logic (boolean) Chỉ chứa hai giá trị TRUE và FALSE (đúng và sai). Khi chuyển từ các dữ liệu dạng số sang kiểu logic, 0 sẽ được chuyển thành FALSE còn giá trị khác sẽ được chuyển thành TRUE. Khi chuyển từ kiểu logic sang kiểu số, giá trị FALSE sẽ được chuyển thành 0 còn giá trị TRUE sẽ được chuyển thành -1. ‘Khai báo biến A là kiểu logic Dim A As Boolean Biến A lúc này chỉ có thể nhận cặp giá trị: True hay False. 5.2. Kiểu số nguyên Dùng để chứa các giá trị là số nguyên và có vài loại dữ liệu kiểu này. Sự khác nhau của những loại dữ liệu này là giới hạn giá trị (lớn nhất và nhỏ nhất) mà biến có thể nhận được (tham khảo bảng dưới). Kiểu số nguyên Kích thước Phạm vi Byte 1 byte 0 đến 255 Integer 2 bytes -32,768 đến 32,767 Long 4 bytes -2,147,483,648 đến 2,147,483,647 5.3. Kiểu số thực Dùng để chứa các giá trị là số thực. Các kiểu số thực thường dùng được trình bày trong bảng dưới đây: Kiểu số thực K.thước Phạm vi Single 4 byte Từ -3.402823E38 đến -1.401298E-45 và từ 1.401298E-45 đến 3.402823E38 Double 8 bytes -1.79769313486231E308 đến -4.94065645841247E-324 và từ 4.94065645841247E-324 đến 1.79769313486232E308 Currency 8 bytes Từ -922,337,203,685,477.5808 đến 922,337,203,685,477.5807 5.4. Kiểu mảng (array) Khi gặp trường hợp phải sử 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, thay vào đó 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. ‘Khai báo mảng Dim Matrix_1(10) As Double Mảng Matrix_1 trên có 11 phần tử liên tục được đánh số từ 0 đến 10 (ma trận có 1 hàng và 11 cột). Khi sử dụng ta chỉ việc gọi phần tử cần dùng theo chỉ số tương ứng. 29
  9. ‘Gán giá trị 100 cho phần tử thứ 2 Matrix_1(1)=100 ‘Gán giá trị 100 cho phần tử cuối cùng Matrix_1(10)=100 Ta cũng có thể cố định phạm vi chỉ số của mảng bằng cách khai báo như sau: ‘Khai báo mảng Dim Matrix_2(1 To 10) As Double Lúc này chỉ số của mảng Matrix_2 sẽ bắt đầu từ 1 và mảng này có 10 phần tử. ‘Gán giá trị 200 cho phần tử thứ 2 Matrix_2(2)=200 ‘Gán giá trị 200 cho phần tử cuối cùng Matrix_2(10)=200 Ví dụ sau khai báo và sử dụng (gán giá trị cho phần tử) một ma trận 3 hàng 5 cột ‘Khai báo mảng (3x5) Dim Matrix_3(1 To 3, 1 To 5) As Double ‘Gán giá trị 100 cho phần tử tại hàng thứ 2 cột thứ 3 Matrix_3(2,3)=100 Trong VB, mảng có thể có một chiều hoặc nhiều chiều, kích thước của mảng được xác định dựa trên số chiều và biên trên, biên dưới của mỗi chiều. Các thành phần trong mảng là liên tục giữa hai biên. Trong các ví dụ trên, các mảng có kích thước (hay số lượng phần tử) là không thay đổi trong suốt quá trình hoạt động của chương trình. Người ta gọi loại mảng này là mảng tĩnh và thường được dùng cho những bài toán biết trước số phần tử của mảng hay kích thước mảng không lớn. Ngoài loại mảng tĩnh này, trong VB còn cho phép định nghĩa một loại mảng khác mà kích thước (hay số lượng phần tử) của nó có thể thiết lập lại ngay trong lúc chương trình đang hoạt động, người ta gọi loại mảng này là mảng động. Với mảng động, người lập trình không cần biết số phần tử của mảng trong lúc lập trình, số phần tử này sẽ được thiết lập trong quá trình chương trình hoạt động dựa theo nhu cầu của từng bài toán cụ thể. Khi một mảng động, mà các phần tử của nó đã được gán giá trị, cần thay đổi kích thước, sẽ có hai tình huống cần xét đến: Toàn bộ giá trị ban đầu (trước lúc thay đổi kích thước mảng) sẽ bị hủy bỏ, các phần tử mảng mới (sau khi thay đổi kích thước) sẽ nhận giá trị mặc định. ‘ Khai báo mảng A là mảng động Dim A() As Long ‘ Xác định kích thước cho mảng động A: mảng 1 chiều có 5 phần tử Redim A(1 to 5) As Long ‘ Gán giá trị cho phần tử của mảng A A(1) = 100: A(2) = 200 ‘ Định lại kích thước cho mảng A: mảng hai chiều với 3x3=9 phần tử Redim A(1 to 3, 2 to 4) as Long Sau dòng cuối cùng này, toàn bộ giá trị của mảng A cũ (có A[1]=100 và A[2]=200) sẽ bị xóa bỏ và tất cả các phần tử mới của mảng A (9 phần tử) sẽ nhận giá trị mặc định (thường được gán bằng 0). Giá trị cũ của các phần tử mảng sẽ được giữ lại khi cả hai điều kiện sau thỏa mãn: 30
  10. CHƯƠNG III: CƠ BẢN VỀ NGÔN NGỮ LẬP TRÌNH VISUAL BASIC  Sử dụng lệnh ReDim với từ khóa Preserve. Sự thay đổi kích thước 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ữ lại giá trị có chỉ số không đổi ngay cả khi mảng được định lại kích thước. ‘Khai báo mảng động A Dim A() As Long ‘Gán kích thước cho mảng A ReDim A(1 To 3, 1 To 3) As Long ‘Gán giá trị cho phàn tử của mảng A A(1,1) = 100: A(1,2) = 200 A(2,1) = 150: A(2,2) = 250 ‘Định lại kích thước cho mảng A, giữ lại giá trị ban đầu ‘của các phần tử, lưu ý đến phạm vi của mảng mới ReDim Preserve A(1 To 3, 1 To 5) As Long Hình III-8: Các phần tử có thể giữ lại giá trị ban đầu và các phạm vi có thể thay đổi kích thước của mảng động Trong ví dụ trên, các phần tử của mảng A được giữ lại giá trị sau khi kích thước của mảng được thay đổi lại. Lưu ý, ta chỉ có thể giữ lại giá trị của mảng ban đầu khi sự mở rộng được thực hiện ra biên cuối cùng của nó như hình trên. 5.5. Kiểu chuỗi (String) Chuỗi là một hàng bao gồm các ký tự liên tục nhau, các ký tự ở đây rất đa dạng: có thể là chữ số, chữ cái, dấu cách (space), ký hiệu. Số lượng ký tự trong một chuỗi là rất lớn (216 ký tự). Mặc định trong VB, các biến hay tham số kiểu chuỗi có chiều dài thay đổi tùy theo giá trị dữ liệu được gán cho nó. Dim S As String S=”ABCD 1234 @#$%” Để tạo điều kiện thuận lợi cho người dùng, bên trong VB có sẵn một số hàm liên quan đến xử lý chuỗi, ví dụ như cắt chuỗi, tách chuỗi, ghép chuỗi, tìm kiếm, … Các hàm cơ bản này được trình bày ở phần sau trong giáo trình này hoặc có thể tra cứu toàn bộ các hàm liên quan trong MSDN (Microsoft Developer Network) hoặc Object Browser (thư viện Strings) bằng cách nhấn phím F2 trong giao diện lập trình VBA IDE 31
  11. Hình III-9: Thông tin về các hàm trong thư viện lập trình của VBA được hiển thị trong Object Browser 5.6. Kiểu thời gian (Date) Dùng để lưu trữ và thao tác trên các giá trị thời gian (ngày và giờ). Định dạng ngày và giờ phụ thuộc vào các thiết lập về hiển thị trong hệ thống của người dùng. Khi chuyển từ các dữ liệu kiểu số sang kiểu ngày tháng, các giá trị ở bên trái dấu phẩy chuyển thành thông tin về ngày còn giá trị ở bên phải dấu phẩy sẽ được chuyển thành thông tin về giờ. Dim D As Date Dim S As String D = Now() S = "Ngay: " & Day(D) & " - Thang: " & Month(D) & " - Nam: " & Year(D) Debug.Print (S) Ví dụ trên sẽ hiển thị thông tin về thời gian (ngày – tháng – năm) trong cửa sổ Immediate của VBA IDE. 5.7. Kiểu Variant Kiểu Variant là một kiểu dữ liệu đặc biệt có thể chứa tất cả các loại dữ liệu, ngoại trừ kiểu chuỗi có chiều dài cố định. Kiểu Variant cũng có thể chứa các giá trị đặc biệt như Empty, Error, Nothing và Null. Tuy kiểu dữ liệu Variant có vẻ tiện dụng nhưng khi sử dụng một cách quá thoải mái thì nguy cơ gây lỗi của loại biến này là rất lớn, đặc biệt khi thao tác với các toán tử. Dim V As Variant ‘ Gán biến V với một chuỗi V = “String” ‘ Gán biến V với một số V = 16 ‘ Gán biến V với giá trị kiểu logic V = True ‘ Gán biến V với một dữ liệu kiểu thời gian V = #01/06/2007# 32
  12. CHƯƠNG III: CƠ BẢN VỀ NGÔN NGỮ LẬP TRÌNH VISUAL BASIC  Sử dụng hàm VarType(vVariant) sẽ cho ta mã của kiểu dữ liệu hiện đang lưu trữ trong biến Variant. Giá trị VarType Chú thích Không có gì trong variant 0-vbEmpty Không có dữ liệu hợp lệ trong variant 1-vbNull Variant chứa Integer 2-vbInteger Variant chứa Single 4-vbSingle Variant chứa Date/Time 7-vbDate Variant chứa String 8-vbString Variant chứa một Object 9-vbObject Variant chứa Boolean 11-vbBoolean 5.8. Kiểu tự định nghĩa (user-defined type) Kiểu tự định nghĩa là kiểu dữ liệu do người dùng định nghĩa, tương tự như kiểu bản ghi (Record) trong ngôn ngữ lập trình Pascal hay kiểu cấu trúc (Struct) trong ngôn ngữ lập trình C. Kiểu tự định nghĩa bao gồm nhiều trường dữ liệu, mỗi trường dữ liệu có thể là các kiểu dữ liệu cơ bản hoặc các kiểu tự định nghĩa khác. Ví dụ, khi đo toàn đạc bằng máy kinh vĩ cơ, với mỗi điểm đo ta cần lưu lại các thông tin sau: Ký hiệu Ý nghĩa Kiểu giá trị Số hiệu trạm đặt máy Integer TrM Thứ tự của điểm đo Integer STT Số đọc dây trên Double DT Số đọc dây giữa Double DG Số đọc dây dưới Double DD Góc bằng Double H Góc đứng Double V Mô tả đặc điểm của điểm đo String MT Với một chương trình xử lý số liệu đo toàn đạc, cách tốt nhất là quản lý theo điểm đo, và do đó mỗi điểm đo là một biến có kiểu dữ liệu phù hợp với bảng trên. Đó chính là kiểu dữ liệu tự định nghĩa. ‘Định nghĩa kiểu dữ liệu cho điểm đo toàn đạc Type DiemDo TrM As Integer 33
  13. STT As Integer DT As Double DG As Double DD As Double H As Double V As Double MT As String End Type Sau khi định nghĩa kiểu dữ liệu DiemDo xong, ta có thể sử dụng nó như những kiểu dữ liệu thông thường khác. ‘Khai báo biến sử dụng kiểu dữ liệu tự định nghĩa Dim P1 As DiemDo Dim P_Array(1 to 1000) As DiemDo With P1 .TrM = 1 .STT = 1 .DT = 2130 .DG = 2120 .DD = 2110 .H = 130.5 .V = 78.25 .MT = “Goc nha C4” End With P_Array(1) = P1 Từ khóa: With … End With dùng để tránh phải nhập lại nhiều lần tên biến kiểu dữ liệu tự định nghĩa. Dấu chấm ( . ) được sử dụng để thao tác với các thành phần bên trong của biến có kiểu dữ liệu tự định nghĩa. Ví dụ sau là tương đương với ví dụ trên, nhưng không sử dụng cặp từ khóa With … End With, chú ý là dấu chấm ( . ) luôn có: ‘Khai báo biến sử dụng kiểu dữ liệu tự định nghĩa Dim P1 As DiemDo Dim P_Array(1 to 1000) As DiemDo P1.TrM = 1 P1.STT = 1 P1.DT = 2130 P1.DG = 2120 P1.DD = 2110 P1.H = 130.5 P1.V = 78.25 P1.MT = “Goc nha C4” P_Array(1) = P1 5.9. Kiểu lớp (Class) Kiểu lớp (Class) là một mở rộng của kiểu dữ liệu tự định nghĩa, sự khác biệt cơ bản ở đây là trong kiểu lớp còn có những đoạn chương trình dùng để xử lý chính những dữ liệu trong nó. Dữ liệu bên trong lớp thường được gọi là các thuộc tính (Properties), còn những đoạn chương trình trong lớp để xử lý dữ liệu này thực chất là các Hàm / Thủ tục (Function / Sub) được định nghĩa bên trong lớp và thường được gọi là các Phương thức (Methods). Một biến có kiểu dữ liệu là lớp được gọi là một đối tượng (Object) và cách sử dụng các Properties, Methods của đối tượng này tương tự như cách sử dụng các thành phần của kiểu dữ liệu tự định nghĩa. Lớp cần được xây dựng trong Class Module hoặc ta có thể sử dụng lại các lớp sẵn có từ các thư viện lập trình. 34
  14. CHƯƠNG III: CƠ BẢN VỀ NGÔN NGỮ LẬP TRÌNH VISUAL BASIC  Như vậy lớp có thể gồm các thành phần sau: Các thuộc tính (Property): là các dữ liệu mô tả trạng thái của bản thân đối tượng hoặc các quan hệ của nó với các đối tượng khác.Về bản chất, thuộc tính là các biến được khai báo trong lớp đó. Kiểu dữ liệu của các thuộc tính có thể là các kiểu dữ liệu cơ bản hoặc có thể là một lớp khác (kiểu Class). Các phương thức (Method): mô tả hành vi, chức năng của đối tượng. Về bản chất, phương thức là các chương trình con được xây dựng bên trong lớp và chúng có nhiệm vụ xử lý các dữ liệu của chính lớp đó. Các sự kiện (Event): Sự kiện giúp cho lớp có khả năng giao tiếp với các lớp khác hoặc với môi trường ngoài. Trong khuôn khổ của giáo trình này, các vấn đề liên quan đến xây dựng lớp sẽ không được đề cập chi tiết. Tuy nhiên nếu ai quan tâm có thể tìm hiểu thêm trong giáo trình “Lập trình hướng đối tượng trong xây dựng” của bộ môn Tự động hóa thiết kế Cầu đường. 6. Khai báo biến trong VB Trong VB, muốn sử dụng một biến có thể không cần khai báo, tuy nhiên cách làm này chỉ nên dùng khi viết các chương trình nhỏ, còn đối với các chương trình lớn, có nhiều mô-đun, thì nên bắt buộc khai báo biến trước khi sử dụng (theo cách thiết lập ở mục 2 của chương này). Khai báo biến, về thực chất, chính là việc tạo mã lệnh (lập trình) cho nên các đoạn mã lệnh khai báo biến có thể đặt ở bất cứ thành phần nào trong dự án VBA (mô-đun chuẩn, mô-đun lớp, và Userform). Tùy theo nhu cầu sử dụng biến mà người ta giới hạn phạm vi sử dụng của biến đó sao cho việc lập trình được thuận tiện nhất dựa trên những nguyên tắc sau: Khi biến khai báo trong chương trình con nào thì phạm vi sử dụng của nó được giới hạn trong chính chương trình con đó. Biến loại này được gọi là biến cục bộ. Hình III-10: Phạm vi sử dụng của biến được khai báo trong chương trình con Nếu biến được khai báo ở cấp mô-đun và biến được khai báo trong chương trình con có tên trùng nhau thì ở bên trong chương trình con, biến được sử dụng là biến được khai báo bên trong nó. Ta xét ví dụ sau: Option Explicit Dim a As Double, b As Double Public Sub Test1() a = 100 : b = 200 35
  15. End Sub Public Sub Test2() Dim a As Double, c As Double Test1 c=a+b Debug.Print "a = "; a; Debug.Print "b = "; b; Debug.Print "c = "; c; End Sub Biến a và b được khai báo ở cấp mô-đun, nghĩa là mọi chương trình con trong mô-đun này đều có thể sử dụng và tác động lên chúng. Giá trị của a và b được gán trong chương trình con Test1. Trong chương trình con Test2 một biến a khác được khai báo (trùng tên với biến a của mô- đun), và giá trị khởi tạo của nó bằng 0. Kết quả chạy chương trình con Test2 như sau: Hình III-11: Mức độ ưu tiên trong sử dụng biến Sử dụng từ khóa Public để xác định phạm vi sử dụng biến là trong toàn bộ dự án, nghĩa là từ bất cứ nơi đâu trong dự án (mô-đun chuẩn, mô-đun lớp, và Userform) đều có thể sử dụng biến này. Biến được khai báo với từ khóa Public thường được gọi là biến toàn cục. Trong mô-đun nào đó, 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ộ, nghĩa là tương đương với việc sử dụng từ khóa Private. CHÚ Ý Không sử dụng các từ khoá Public,Private hay Friend cho khai báo dữ liệu nằm bên trong chương trình con. Hình III-12: Phạm vi sử dụng biến toàn cục Ở mức độ rộng hơn, có thể coi biến như một khối dữ liệu của chương trình và mức độ toàn cục được chia làm hai loại như sau: 36
  16. CHƯƠNG III: CƠ BẢN VỀ NGÔN NGỮ LẬP TRÌNH VISUAL BASIC  Toàn cục ở mức ứng dụng: Trong trường hợp ứng dụng gồm nhiều dự án (multi- projects), nếu trong một mô-đun không có khai báo lựa chọn Option Private Module thì tất cả các thành phần dữ liệu hay chương trình được khai báo Public trong mô-đun đó có phạm vi hoạt động toàn bộ ứng dụng – nghĩa là chúng còn có thể được tham chiếu từ những dự án khác trong ứng dụng. Toàn cục ở mức dự án: Trong trường hợp ứng dụng gồm nhiều dự án (multi-projects), nếu trong một mô-đun có khai báo lựa chọn Option Private Module thì tất cả các thành phần dữ liệu hay chương trình được khai báo Public trong mô-đun đó chỉ có phạm vi hoạt động trong nội bộ dự án chứa mô-đun mà không thể được tham chiếu từ những dự án khác trong ứng dụng. Hình III-13: Khai báo tùy chọn phạm vi biến ở mức dự án. Sử dụng từ khóa Private để xác định phạm vi hoạt động của biến là trong nội bộ của mô-đun đó, tất cả các chương trình con hay bất cứ thành phần nào của mô-đun này đều có thể sử dụng biến loại này nhưng chúng không thể truy cập được từ những mô-đun hay Userform khác trong dự án. Hình III-14: Phạm vi sử dụng của biến tương ứng với từ khóa Public và Private. CHÚ Ý Khi khai báo kiểu dữ liệu người dùng tự định nghĩa hoặc các chương trình con trong một mô-đun, nếu không chỉ rõ phạm vi hoạt động thì pham vi hoạt động mặc định là Public. Để tránh các nhầm lẫn do không nhớ phạm vi hoạt động mặc định, người dùng nên chỉ rõ phạm vi hoạt động của chương trình hay dữ liệu ngay khi khai báo. Ngoài ra, trong các mô-đun lớp (Class Module) hoặc mô-đun lệnh của UserForm còn có thể sử dụng từ khóa Friend để xác định phạm vi hoạt động của một chương trình con (phương thức). Khi sử dụng từ khóa này, chương trình con có thể được truy xuất từ mọi nơi trong nội bộ dự án (Project) chứa nó nhưng không thể được truy xuất trong những dự án khác của ứng dụng (khác với khi dùng từ khóa Public – chương trình con có thể được truy xuất từ mọi nơi của ứng dụng). 37
  17. CHÚ Ý Các khai báo dữ liệu với các từ khoá trên được thực hiện trong phần General của một mô-đun. Các dữ liệu đó còn được gọi là dữ liệu cấp mô-đun (module level). Trong mỗi mô-đun, phần đầu tiên (của phần viết mã lệnh) được gọi là phần General của mô-đun đó. Theo quy ước, các thiết lập cho mô-đun được đặt ở đây và VBA IDE sẽ tự động phân cách phần này. Không có giới hạn về kích thước cho phần này. Hình III-15: Phần General trong mô-đun 6.1. 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. Ta nên dùng cách này cho những hằng số hay phải dùng lặp lại trong chương trình, ví dụ như hằng số π = 3.14159. Sau khi khai báo hằng số này: Const Pi=3.14159 ta luôn có thể sử dụng giá trị 3.14159 bất cứ chỗ nào trong chương trình với cái tên dễ nhớ hơn là Pi. Cú pháp: [Public/ Private] Const = Các từ khoá Public hay Private xác định phạm vi hiệu lực của hằng số, với từ khoá Public, hằng số này có thể sử dụng ở bất cứ đâu trong ứng dụng, còn với từ khoá Private thì hằng số này chỉ có thể sử dụng bên trong mô-đun nơi khai báo hằng số đó. Ý nghĩa của hai từ khóa này cũng không thay đổi cho tất cả các phần khác mà có sử dụng chúng. 6.2. Khai báo biến Cú pháp: Dim as Khi dùng từ khóa Public hay Private nhằm xác định phạm vi hiệu lực của biến thay cho từ khóa Dim trong khai báo biến thì cú pháp như sau: Public as Hay: 38
  18. CHƯƠNG III: CƠ BẢN VỀ NGÔN NGỮ LẬP TRÌNH VISUAL BASIC  Private as 6.3. Khai báo kiểu tự định nghĩa Trong VB có thể khai báo các kiểu dữ liệu theo nhu cầu của người sử dụng. Cú pháp khai báo như sau: Type as as … as End Type Sau khi khai báo kiểu tự định nghĩa, người dùng có thể sử dụng các biến có kiểu tự định nghĩa bằng cách khai báo như các biến thông thường, với được thay bằng . Để truy cập tới một trường của biến kiểu bản ghi, dùng toán tử (.) hoặc dùng cặp từ khóa With… End With. CHÚ Ý Các từ khoá Public hay Private nhằm xác định phạm vi hoạt động của kiểu dữ liệu được khai báo. Đồng thời khai báo kiểu chỉ được thực hiện ở cấp mô-đun (không thực hiện được trong các chương trình con). Khi không chỉ rõ thì phạm vi hoạt động thì mặc định của một kiểu dữ liệu tự định nghĩa là Public. 6.4. Khai báo mảng tĩnh Cú pháp: [Public/Private/Dim] () as Các thông số về chiều có thể biểu diễn qua các ví dụ sau: Dim a(3 To 5) As Integer ‘ Mảng 1 chiều với các chỉ số từ 3 đến 5 Dim A(3) As Long ‘ Mảng 1 chiều với chỉ số đến 3 (mảng 1 chiều có 4 phần tử với chỉ số từ 0 đến 3) Dim A(2 To 4, 6) As Double ‘ Mảng 2 chiều với một miền chỉ số từ 2 tới 4 và một miền có chỉ số từ 0 đến 6. GỢI Ý Các từ khoá Public hay Private xác định phạm vi hoạt động của biến mảng (trong trường hợp mảng được khai báo mức mô-đun). Các qui định về phạm vi hoạt động của mảng tương tự với biến thông thường - đã được trình bày ở phần trước. 6.5. Khai báo mảng động Cú pháp: 39
  19. [Public/ Private/ Dim] () as Trong khai báo trên không chứa các thông số về chiều và đó thuần túy chỉ là một khai báo. Các phần tử của mảng chưa được tạo ra (hay nói cách khác mảng vẫn chưa thực sự được cấp phát bộ nhớ) và vẫn chưa sẵn sàng để sử dụng. Trước khi sử dụng mảng động hoặc khi muốn thay đổi kích thước của mảng, sử dụng lệnh Redim. Cú pháp như sau: Redim () as Chú ý rằng phải đúng như khai báo ban đầu, các thông số về chiều có thể khác trước cả về số chiều và kích thước của từng chiều. Khi đó, các dữ liệu cũ trong mảng không còn nữa, thay vào đó là những phần tử mới được khởi tạo. 6.6. Khai báo, tạo và làm việc với biến đối tượng Khai báo và tạo biến đối tượng phải dùng thêm từ khóa New Dim as New là lớp (class) đã được định nghĩa từ trước. Phép gán đối tượng được thực hiện với từ khóa Set Set = Chú ý rằng nếu thực hiện khai báo một biến đối tượng như thông thường (không có từ khóa New) thì biến thực sự chưa được tạo ra. Trong trường hợp đó, người sử dụng phải tạo và gán đối tượng với các từ khoá tương ứng là New và Set. Dim as Set = New CHÚ Ý Câu lệnh Set không phải là câu lệnh khai báo, vì vậy nó phải được viết trong một chương trình con nào đó chứ không thể nằm trong phần General của một mô-đun. Làm việc với một biến đối tượng tức là quá trình thao tác với đối tượng thông qua các thuộc tính, phương thức và các sự kiện của đối tượng đó. Để truy cập tới các thuộc tính và phương thức của đối tượng ta sử dụng theo cú pháp sau, chú ý đến dấu chấm ( . ) giữa tên biến và tên thuộc tính hay tên phương thức: . . 7. Các toán tử và hàm thông dụng 7.1. Các toán tử Toán tử được sử dụng cho mục đích xử lý dữ liệu. Ta sử dụng các toán tử để thực hiện tính toán, so sánh, gán và thực hiện nhiều thao tác khác. Dưới đây là danh sách và ý nghĩa của một số toán tử thông dụng: 40
  20. CHƯƠNG III: CƠ BẢN VỀ NGÔN NGỮ LẬP TRÌNH VISUAL BASIC  Toán tử Mô tả Toán tử gán = Gán giá trị cho biến hoặc thuộc tính Toán tử toán học + Cộng - Trừ * Nhân / Chia \ Chia lấy phần nguyên Mod Chia lấy phần dư ^ Luỹ thừa Toán tử logic Not Trả về giá trị phủ định với giá trị biểu thức. Not(TRUE)=FALSE And Nối logic hai biểu thức. (TRUE And TRUE)=TRUE; các trường hợp khác cho kết quả bằng FALSE Or (FALSE or FALSE)=FALSE; các trường hợp khác cho kết quả là TRUE Xor Cho kết quả TRUE nếu hai đối số có cùng giá trị; ngược lại cho kết quả là FALSE Eqv So sánh hai giá trị logic; cách thức xử lý tương tự như toán tử Xor Toán tử so sánh = So sánh bằng Khác nhau > Lớn hơn >= Lớn hơn hoặc bằng < Nhỏ hơn
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
20=>2