I. Mở đầu.
Excel là công cụ phổ biến trong việc lưu dữ liệu, xử lý số liệu cũng như thực hiện các phép toán. Bản thân cái tên Excel (excellent) cũng thể hiện niềm tự hào không nhỏ của Microsoft khi sáng tạo ra chương trình này. Đối với các kỹ sư xây dựng, việc xử dụng các bảng tính từ excel để thiết kế kết cấu đã không còn gì là lạ lẫm. Dưới đây xin được trình bày các kỹ năng cơ bản để các bạn muốn tím hiểu về lập trình cho excel có thể chủ động hơn trong việc thành lập các bảng tính.
II. VBA.
VBA (Visual Basic for Application) là công cụ hữu hiệu và chủ yếu để lập trình cho Excel.
Để mở cửa sổ VBA, bạn dùng menu: Tools à Macro à Visual Basic Editor hoặc dùng tổ hợp phím Alt + F11.
Giao diện của VBA gồm 3 phần cơ bản và được mặc định là:
1. Cửa sổ Object, là nơi bạn kích vào các đối tượng để làm việc.
2. Cửa sổ Properties, là nơi bạn thay đổi thuộc tính các đối tượng (Chủ yếu dùng để tạo form)
3. Cửa sổ soạn thảo, là nơi để bạn tiến hành viết code.
III. Nhập môn Coding.
Bây giờ chúng ta bắt đầu làm quen với việc viết code qua một ví dụ đơn giản.
Các đoạn mã thông thường được viết trong các Module của VBA, bạn create một module bằng menu Insert à Module hoặc làm như Picture ở dưới.
Khi một Module được khởi tạo, cửa sổ soạn thảo 3 (bài 1) cũng đổi sang nền trắng cho thấy nội dung (mới đầu là rỗng) và bạn hoàn toàn có thể bắt đầu viết code cho nó.
Đây là một đoạn code đơn giản:
Có hai loại tổ hợp mã (chương trình con) cơ bản là Sub và Fucntion.
- Sub (hay thường được gọi là thủ tục) là một đoạn mã mang chức năng điều khiển: lấy dữ liệu, xử lý và xuất dữ liệu. Sub được gọi thông qua các nút lệnh (button của form hoặc MenuButton của Menu trong Excel) hoặc menu Tools à Macro à Macros… Sub cũng có thể được gọi trong các Sub hoặc Function khác.
Sub thường có cấu trúc như sau:
Sub Tên_thủ_tục ()
Lệnh1
Lệnh2
Lệnh3
…
End Sub
Tên_thủ_tục là một chuỗi viết liền, không dấu. Bạn nên đặt tên thủ tục sao cho dễ nhớ trong khi gọi.
- Function (hay thường được gọi là hàm) là một đoạn mã bao gồm các phép toán mà kết quả là trả về một giá trị nào đó thông qua tên hàm. Function (hàm) được gọi trực tiếp trong các Cells (vì nó có chức năng trả về giá trị) như các hàm cơ bản khác của excel (MAX, MIN, SIN, COS, TAN…). Function cũng có thể được gọi trong các Function hoặc Sub khác.
Function thường có cấu trúc như sau:
Function Tên_hàm (Biến_1, Biến_2, Biến 3…)
Lệnh1
Lệnh2
Lệnh3
…
Tên_hàm = …..
End Function
Tên_hàm là một chuỗi viết liền, không dấu. Bạn nên đặt tên hàm sao cho dễ nhớ trong khi gọi. Phép gán “Tên_hàm =” là yêu cầu có thể gọi là bắt buộc. Trong cả hàm bạn tối thiểu phải có một lệnh như thế để định giá trị cho hàm, nếu không thì việc bạn viết code cho nó là vô nghĩa, và giá trị trả về cho nó luôn là 0.
Cách gọi Sub:
Cách gọi Function:
Đến đây sẽ có bạn bật cười mà rằng: việc tính chu vi thì Excel cũng có thể giải quyết ngon lành, việc gì mà phải dùng module với code cho nó to tát!
smile.gif
Thật ra trên chỉ là một ví dụ đơn giản, chúng ta có thể viết những đoạn mã dài mà bạn không thể viết gọn trong sheet của excel được.
Trên đây đã trình bày các bước đơn giản để lập trình cho excel. Bạn cần trang bị cho mình những kiến thức về việc viết mã. Ngôn ngữ của Visual Basic khá đơn giản, và nó rất gần với Turbo Pascan.
IV. Làm việc với dữ liệu.
Bao gồm đọc (load, get…), xử lý, và xuất kết quả.
Tuỳ thuộc vào nguồn của dữ liệu (thu thập bằng tay, bằng các chương trình khác hay SAP hoặc ETABS) mà dữ liệu có thể là: nằm ngay trong một Sheet của Excel, nằm trong một file text (*.txt), hoặc nằm trong file database (*.mdb). Sau đây xin giới thiệu về cách đọc và xuất dữ liệu với 3 dnạg thông thường này.
1. Đọc và xuất dữ liệu từ một Sheet
file: cadvietlisp.lsp
X = Sheet1.Cells(R_ID, C_ID)
Sheet1.Cells(R_ID, C_ID) = Y
Với R_ID và C_ID là số thứ tự của dòng (row) và cột (column).
Dòng thứ nhất là lệnh lấy giá trị của ô có định vị dòng = R_ID, và cột = C_ID trong sheet1 gán cho biến X. Ví dụ: X = sheet1.Cells(2,3) là lấy giá trị của ô C2 ở sheet1 gán cho X.
Dòng thứ hai là lệnh lấy giá trị của biến X đặt vào ô có định vị dòng = R_ID, và cột = C_ID trong sheet1. Ví dụ: Sheet1.Cells(1,1)=2 là đặt giá trị ô A1 bằng 2. hoặc Sheet1.Cells(3,1) = "Hello" là đặt giá trị ô A3 là "Hello". Lúc này trong sheet1 ô A3 sẽ hiện lên chữ: Hello
2. Đọc và xuất dữ liệu từ một file text (*.txt)
Vốn là Visual Basic, VBA cũng hỗ trợ các kiểu đọc file dữ liệu dạng text thông thường. Chẳng hạn: lệnh lấy dữ liệu từ một file
CODE
Exp = "D:\VB\Hung\MagicOfLove\magic.vbp"
Open Exp For Input As #1
Do While EOF(1) = False
i = i + 1
Line Input #1, Dem
Close #1
lệnh xuất (ghi) dữ liệu vào một file:
CODE
Open FileName For Output As #1
For i = 1 To Sec_Num
Print #1, Sec_List(i)
Next
Close #1
3. Đọc dữ liệu từ file Microsoft Data Base (*.mdb)
Với những người có nhu cầu đọc dữ liệu từ SAP, ETABS hay các chương trình khác, làm việc với *.mdb dĩ nhiên rất cần thiết.
Trong VBA, để đọc được dữ liệu từ *.mdb cần có bộ hỗ trợ liên kết động của Micrrosoft - DAO. Nó nằm sẵn trong hệ thống và bạn chỉ việc khai báo.
Bạn khai báo qua menu Tool --> References
Một ví dụ cho việc đọc dữ liệu:
CODE
Dim DB As Database
Dim rstFrameSection As Recordset
Dim VD
Set DB = OpenDatabase("D:\VD.mdb")
Set rstFrameSection = DB.OpenRecordset("SELECT * FROM [Frame Section Assignments]")
rstFrameSection.Filter = "Story = STORY4"
VD = rstFrameSection.Fields("SectionName")
Trong ví dụ trên, DB như mảng dữ liệu đã được mở qua dòng lệnh số 3
Dòng lệnh số 4 mở một bảng (table) trong file dữ liệu này - ở đây là bảng Frame Section Assignments .
Dòng lệnh số 5 lọc bảng dữ liệu trên, chỉ để lại những record thoả mãn cột Story có giá trị là STORY4
Dòng lệnh số 6, đọc giá trị tại cột SectionName của bảng dữ liệu (đã được lọc) trên.
Bạn nên tham khảo cấu trúc một file DataBase được xuất ra từ SAP hay ETABS để hiểu rõ hơn ví dụ trên.
Lập trình viên
(St)