Access

Từ Access "chỏ mũi" sang Excel

20/12/2013 12:40

Access và Excel là anh em một nhà, cho nên chuyện lâu lâu “ngứa ngáy khó chịu” đành “chỏ mũi” từ Access sang Excel là chuyện thường ngày ở huyện.

Trong một ứng dụng Access, ta không những có thể ném dữ liệu từ một bảng sang một sheet của Excel ngay đúng vào một ô (cell) nào đó, mà còn “chơi độc” hơn: định dạng nội dung của sheet y như đang rê chuột tới lui, “bộp” chỗ này chỗ nọ trong Excel.

Cái mấu chốt chính là VBA (Visual Basic for Applications), không biết VBA thì đừng hòng “chỏ mũi” đi đâu hết. Tui sẽ giả đò như bà con đã biết chút đỉnh về lập trình VBA nhé!

Khi cài đặt Microsoft Access, mặc định sẽ được khuyến mãi một căn cứ dữ liệu mẫu: Northwind.MDB (hoặc Nwind.MDB, miễn có chữ N và chữ wind.MDB thì chắc cú rồi đấy). Tui sẽ dùng căn cứ dữ liệu này để minh họa cho bà con dễ thử theo. Bà con mở nó ra nghen!

Trong cửa sổ Database vừa mở, chọn biểu mẫu (form) có tên Customers, vẽ một nút lệnh có tên cúng cơm là cmdXuatRaExcel. Trong cửa sổ Properties của nút lệnh này, chọn tình huống (event) On Click, chọn [Event procedure] cho tình huống này và bấm vào nút 3 chấm (...) để mở cửa sổ gõ mã lệnh VBA. Đoạn mã lệnh (tít bên dưới) sẽ thực hiện các “sứ mệnh” sau:

  • Kết xuất toàn bộ bảng Customers thành tập tin Excel có tên D:\Customers.XLS (xem hình 1).
  • Lén lút mở tập tin D:\Customers.XLS để:
- Thay đổi font cho toàn bộ sheet thành: Verdana
- Làm cho dòng tiêu đề bự hơn và đậm hơn cho nó oai.
- Chỉnh kích thước các cột sao cho hiển thị đầy đủ dữ liệu
- Đổi màu tiêu đề cột thứ nhất thành màu đỏ
- Đổi tiêu đề cột thứ hai thành: “Ten cong ty
- Chèn thêm một dòng bên trên dòng tiêu đề để làm tựa cho báo cáo

Private Sub cmdXuatRaExcel_Click()

Dim sTapTinExcel As String

sTapTinExcel = "D:\Customers.XLS"

Kết xuất ra Excel

DoCmd.OutputTo acOutputTable, "Customers", acFormatXLS, sTapTinExcel

Dim xlApp As Object 'Khởi động Excel

Set xlApp = CreateObject("Excel.Application")

Dim xlBook As Object ' Mở tập tin Excel D:\Customers.XLS

Set xlBook = xlApp.Workbooks.Open(sTapTinExcel)

Dim xlSheet As Object

Set xlSheet = xlBook.Worksheets(1) ‘ Sheet1 trong Excel

xlSheet.Cells.Font.Name = "Verdana" ' Font cho sheet

' Tiêu đề gồm 11 cột từ A đến K

xlSheet.Range("A1:K1").Select

With xlApp.Selection

.Font.Size = 14

.Font.Bold = True

.RowHeight = .Font.Size * 1.4

End With

With xlSheet

.Columns.EntireColumn.AutoFit ' Chỉnh kích thước các cột cho khớp dữ liệu

.Cells(1, 1).Font.ColorIndex = 3 ' Ô đầu tiên trong sheetcó màu đỏ

.Cells(1, 2).Value = "Ten cong ty" ‘ Đổi tên tiêu đề cột thứ hai

.Rows("1:1").Insert Shift:=xlDown ' Chèn thêm dòng tựa

.Range("A1").FormulaR1C1 = _

"BANG NAY XUAT RA EXCEL TU BANG CUSTOMERS CUA DATABASE MAU: NORTHWIND.MDB"

End With

Chỉnh dạng dòng tựa

With xlSheet.Rows("1:1").Font

.Size = 18

.Bold = True

End With

Merge 11 ô để dòng tựa chứa hết trong 11 ô này

xlSheet.Range("A1:K1").Select

xlApp.Selection.Merge

xlBook.Save ' Ghi các sửa đổi vào tập tin

' Dọn dẹp rồi cất Excel đi

xlBook.Saved = True

xlApp.Quit

' Quay trở lại Microsoft Access

AppActivate "Microsoft Access"

End Sub

Trong các nhà sách có bán tài liệu về lập trình VBA, bà con có thể bỏ thì giờ lục lọi xem sao. Nếu chịu chơi, có thể mò mẫm theo cách sau: tạo một macro (bằng chức năng Record New Macro) trong Excel thực hiện thao-tác-cần-lập-trình-tự-động, sau đó mở nội dung macro này để đọc mã lệnh rồi bắt chước. Ví dụ: muốn biết đoạn mã VBA cần viết để: đổi font chữ ô thứ nhất thành Verdana, gõ nội dung "Echip chip gi cung suong" vào ô thứ hai trên dòng 1, ta mần như sau:

  • Chọn mục Tools \ Macro \ Record New Macro…, rồi chọn nút OK khi khung đối thoại như hình 2 xuất đầu lộ diện. Một cửa sổ nho nhỏ như hình 3 cho biết Excel bắt đầu ghi lại các thao tác của bà con. Hãy dùng chuột để đổi font và gõ nội dung như yêu cầu nêu trên. Xong thì “bộp” vào ô vuông màu đen như trong hình 3. Xem như macro đã được tạo.
  • Chọn mục Tools \ Macro \ Macros…, chọn tên Macro1 trong khung đối thoại Macro, rồi chọn nút Edit để xem nội dung mã lệnh VBA na ná như sau:

Sub Macro1()

Range("A1").Select

With Selection.Font

.Name = "Verdana"

.Size = 10

.Strikethrough = False

.Superscript = False

.Subscript = False

.OutlineFont = False

.Shadow = False

.Underline = xlUnderlineStyleNone

.ColorIndex = xlAutomatic

End With

Range("B1").Select

ActiveCell.FormulaR1C1 = "Echip chip gi cung suong"

End Sub

Lưu ý: bà con không cần gõ tất tần tật những gì “mắt thấy tai nghe” trong Macro1, vì có các thuộc tính (Properties) mặc định (ví dụ: từ dòng .Size = 10 đến dòng .ColorIndex = xlAutomatic) không cần ghi ra mần chi. Để cho dzui, bà con hãy so sánh cách ghi mã lệnh trong Macro1 và trong Sub cmdXuatRaExcel_Click() xem có chi khác hông nè ?

Đàm Văn Chương

Ý kiến bạn đọc (0)
Tên   Email

Lên đầu trang