VBA Excel (Bài 26): Cách sử dụng hàm GetSetting và SaveSetting trong Excel

Thư mục Windows Registry là nơi tập hợp và ghi nhớ các thông tin chính của ứng dụng, bao gồm các lựa chọn mặc định của người dùng. Trước khi Excel 97 ra đời, việc truy cập registry cần phải có phần mềm API. Với Excel 97 và các phiên bản kế nhiệm, bạn không cần đến API mà thay vào đó bạn có thêm 2 hàm chức năng VBA sau:

  • GetSetting: Truy xuất cấu hình cài đặt từ bộ nhớ registry
  • SaveSetting: Lưu cấu hình cài đặt vào bộ nhớ registry

Trong phần hướng dẫn trực tuyến đã mô tả chi tiết về cách sử dụng 2 hàm này nên trong bài viết này tôi sẽ không đi sâu về nó. Tuy vậy, cần lưu ý rằng các hàm trên chỉ hoạt động được với từ khóa sau:

“HKEY_CURRENT_USER\Software\VB and VBA Program Settings”

Điều đó có nghĩa là bạn không thể truy cập bất kỳ từ khóa nào trong registry mà bạn muốn. Thay vào đó, các hàm chức năng này chỉ hữu ích cho việc lưu trữ thông tin liên quan đến Excel mà bạn muốn lưu lại giữa các phiên làm việc để tránh bị mất.

Ví dụ cụ thể

Hàm thủ tục con dưới đây đã được lưu trong mô-đun mã nguồn của tập tin ThisWorkbook, trong đó thể hiện cách thức hoạt động của hàm GetSetting và SaveSetting. Hàm sẽ tự khởi động khi bạn mở bảng tính này lên. Sẽ có 2 thông tin được hàm này truy xuất: một là số lần bạn mở bảng tính lên, hai là ngày giờ gần đây nhất mà bạn mở bảng tính lên. Tất cả 2 thông tin này sẽ được thông báo bằng hộp thoại dưới đây:

"Private Sub Workbook_Open()
    Dim Counter As Long, LastOpen As String, Msg As String
'   Get setting from registry
    Counter = GetSetting("XYZ Corp", "Budget", "Count", 0)
    LastOpen = GetSetting("XYZ Corp", "Budget", "Opened", "")
 
'   Display the information
    Msg = "This file has been opened " & Counter & " times."
    Msg = Msg & vbCrLf & "Last opened: " & LastOpen
    MsgBox Msg, vbInformation, ThisWorkbook.Name
 
'   Update the information and store it
    Counter = Counter + 1
    LastOpen = Date & " " & Time
    SaveSetting "XYZ Corp", "Budget", "Count", Counter
    SaveSetting "XYZ Corp", "Budget", "Opened", LastOpen
End Sub"