Phần này sẽ giới thiệu các đoạn mã thực hiện những thao tác cơ bản trong Excel.
7.1. Điều khiển Excel
Các thao tác liên quan đến việc điều khiển chương trình Excel đều được thực hiện thông qua đối tượng Application, đối tượng ở cấp cao nhất trong cây phân cấp đối tượng trong Excel.
7.1.1.Thoát khỏi Excel
Sử dụng phương thức có trong đối tượng Application để thoát khỏi Excel. Thông thường, nếu có workbook nào chưa được lưu, Excel sẽ hiện thị hộp thoại để nhắc người dùng lưu workbook. Tuy nhiên, người lập trình có thể thay đổi cách ứng xử trên bằng một số cách sau:
Ø
ØLưu tất cả các workbook trước khi thoát
Ø
ØGán thuộc tính Saved của workbook trước khi thoát
Ø
ØGán thuộc tính DisplayAlerts bằng FALSE
Ví dụ sau sẽ lưu tất cả các workbook đang mở trong Excel mà không cần hiển thị thông báo cho người dùng:
Sub QuitSaveAll( ) Dim wb As Workbook
For Each wb In Workbooks wb.Save
Next
Application.Quit End Sub
Ngược lại, đoạn mã sau sẽ thoát khỏi Excel mà không lưu các workbook: Sub QuitSaveNone()
Dim wb As Workbook
For Each wb In Workbooks
' Đánh dấu coi như các workbook đã được lưu
' nhưng thực chất, các workbook vẫn chưa được lưu wb.Saved = True
Next
Application.Quit End Sub
Hoặc có thể sử dụng đoạn mã sau: Sub QuitSaveNone()
' Tắt tất cả các thông báo, hộp thoại Application.DisplayAlerts = False Application.Quit
End Sub
Cách thoát khỏi Excel sử dụng thuộc tính Saved hoặc DisplayAlerts sẽ có thể làm mất tất cả những thay đổi chưa được lưu. Vì thế cũng có thể sử dụng một cách khác, đó là sử dụng phương thức SaveWorkspace để lưu trạng thái làm việc của Excel của trước lúc thoát vào tệp .xlw, và khi mở tệp này, trạng thái làm việc của Excel tại thời điểm đó sẽ được khôi phục lại. Đoạn mã sau sẽ lưu tất trạng thái làm việc vào tệp Resume.xlw:
Sub QuitWithResume()
Application.SaveWorkspace "C:\Resume.xlw" Application.Quit
End Sub
7.1.2.Khoá tương tác người dùng
Trong một số trường hợp, để tránh người dùng thoát khỏi Excel khi đang thực hiện một số bước tính toán mất nhiều thời gian, cần phải giới hạn tương tác giữa người dùng và chương trình Excel. Đối tượng Application có một số phương thức/thuộc tính để thực hiện điều này:
Ø
ØGán thuộc tính DisplayAlerts bằng FALSE để ẩn các hộp thoại Excel khi đang thực thi mã lệnh.
Ø
ØGán thuộc tính Interactive bằng FALSE để người dùng hoàn toàn không thể tương tác được với Excel.
Ø
ØGán thuộc tính ScreenUpdating bằng FALSE để tắt quá trình cập nhật lại màn hình, làm ẩn đi những thay đổi diễn ra trong lúc thực thi mã lệnh.
Những cách trên đều cần phải thực hiện ở đầu đoạn mã lệnh và phải thực hiện lại ở cuối của đoạn mã lệnh để thiết lập lại các giá trị mặc định, nếu không sẽ làm khoá hoàn toàn chương trình Excel.
Ví dụ sau minh hoạ cách tạm thời khoá tương tác người dùng khi thực hiện các đoạn mã lệnh mất nhiều thời gian:
Sub Khoa_nguoi_dung() Dim cel As Range
' Chuyển con trỏ chuột thành biểu tượng chờ. Application.Cursor = xlWait
' Tắt tương tác người dùng và việc cập nhật màn hình. Application.Interactive = False
Application.ScreenUpdating = False
' Đoạn mã lệnh mô phỏng việc tính toán mất nhiều thời gian. For Each cel In [a1:iv999]
cel.Select Next
' Khôi phục lại trạng thái ban đầu. Application.Interactive = True Application.ScreenUpdating = True Application.Cursor = xlDefault
[a1].Select End Sub
Một lợi điểm nữa của việc gán thuộc tính ScreenUpdating bằng FALSE là việc đoạn mã lệnh sẽ thực thi với tốc độ nhanh hơn vì Excel không cần phải cập nhật lại màn hình khi tiến hành chọn từng ô trong vùng dữ liệu từ A1:IV999. Nhưng cần lưu ý phải khôi phục lại các giá trị mặc định trước khi kết thúc mã lệnh.
GỢI Ý Gán thuộc tính ScreenUpdating bằng FALSE trong khi thực khi các đoạn mã lệnh có
liên quan đến việc hiển thị trên màn hình, chằng hạn như đổi màu nền cho vùng dữ liệu… , sẽ làm tăng tốc độ thực thi của mã lệnh
7.1.3.Thao tác với cửa sổ
Đối tượng Application có tập đối tượng Windows cho phép mở, sắp xếp, thay đổi kích thước và đóng các cửa sổ bên trong Excel. Chẳng hạn như đoạn mã sau tạo thêm một cửa sổ mới và sau đó xếp chồng các cửa sổ bên trong workbook hiện hành:
Sub OpenCascadeWindows() ActiveWindow.NewWindow
Application.Windows.Arrange xlArrangeStyleCascade, True End Sub
Người lập trình có thể đóng, thay đổi trạng thái của cửa sổ sử dụng các phương thức và thuộc tính có trong đối tượng Window. Ví dụ sau sẽ đóng cửa sổ đã được tạo ra ở ví dụ trước và khôi phục lại trạng thái của cửa sổ ban đầu trong Excel:
Sub CloseMaximize()
ActiveWindow.Close ‘Đóng cửa sổ hiện hành ActiveWindow.WindowState = xlMaximized End Sub
Việc đóng cửa sổ cuối cùng của Workbook tương đương với việc đóng workbook đó.
CHÚ Ý Trong cùng một workbook có thể có nhiều cửa sổ con, tất cả các cửa sổ con đó đều
có nội dung giống nhau và đều là một thể hiện của workbook. Chi tiết, xem lại mục “Đối tượng Window” trang 34.
Để điều khiển cửa sổ chính của Excel, sử dụng các thuộc tính WindowState và DisplayFullScreen có trong đối tượng Application. Đoạn mã sau sẽ thực hiện thay đổi trạng thái cửa sổ chính của Excel, giữa các thái thái sẽ có một thông báo:
Sub ChangeExcelWindowState()
Application.WindowState = xlMaximized ‘Phóng đại cửa sổ
MsgBox "Trang thai phong dai"
Application.WindowState = xlMinimized ‘Thu nhỏ cửa sổ
MsgBox "Trang thai thu nho"
Application.WindowState = xlNormal ‘Trạng thái thông thường MsgBox "Trang thai thong thuong"
Application.DisplayFullScreen = True ‘Xem toàn màn hình MsgBox "Trang thai toan man hinh"
Application.DisplayFullScreen = False ‘Trạng thái bình thường MsgBox "Trang thai thong thuong"
End Sub
Thông thường, khi sử dụng VBA trong Excel, chương trình Excel đã được khởi động sẵn và người lập trình không cần quan tâm đến các thao tác để khởi động chương trình Excel. Tuy nhiên, vẫn có những lúc cần khởi động chương trình Excel từ chương trình khác, chẳng hạn như khi muốn xuất dữ liệu tính toán sang Excel chẳng hạn. Lúc đó, cần phải lập trình để khởi động Excel, hay nói theo cách đơn giản hơn, là tạo đối tượng Application chứa ứng dụng Excel.
Để thực hiện được việc này, cần phải thực hiện các bước sau: