@@ mình mới tìm hiểu mấy cái này được hơn nửa tháng, đang tạo một ứng dụng, bạn chỉ vậy sao mình biết ngõ làm![]()
Option Explicit
'KHffff'HNNM'BNBH
'--------------------------------------
Private Sub CommandButton1_Click()
Unload Me
End Sub
'--------------------------------------
Private Sub UserForm_Initialize()
Dim MyVar
MyVar = Split(ThisWorkbook.VBProject.VBComponents("Userform1").CodeModule.Lines(2, 1), "'")
Me.TextBox1 = MyVar(1)
Me.TextBox2 = MyVar(2)
Me.ComboBox1 = MyVar(3)
End Sub
'----------------------------------------------
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
ThisWorkbook.VBProject.VBComponents("Userform1").CodeModule.ReplaceLine 2, _
"'" & Me.TextBox1 & "'" & Me.TextBox2 & "'" & Me.ComboBox1
End Sub
Mình tham gia 1 cách, nếu động vào Registry sợ làm rác, thêm Sheet lưu thì rườm rà vậy thì ta lưu bằng 1 dòng Rem trong code sau câu lệnh Option Explicit , khi load form thì ta load trở lại.
Code cho form như sau:
PHP:Option Explicit 'KHffff'HNNM'BNBH '-------------------------------------- Private Sub CommandButton1_Click() Unload Me End Sub '-------------------------------------- Private Sub UserForm_Initialize() Dim MyVar MyVar = Split(ThisWorkbook.VBProject.VBComponents("Userform1").CodeModule.Lines(2, 1), "'") Me.TextBox1 = MyVar(1) Me.TextBox2 = MyVar(2) Me.ComboBox1 = MyVar(3) End Sub '---------------------------------------------- Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer) ThisWorkbook.VBProject.VBComponents("Userform1").CodeModule.ReplaceLine 2, _ "'" & Me.TextBox1 & "'" & Me.TextBox2 & "'" & Me.ComboBox1 End Sub
Bạn lưu ý dòng thứ 2 chính là dòng lưu giá trị của Textbox1,2 và Combobox1
Tất nhiên khi đóng file bạn phải lưu file nếu không mọi thay đổi cũng biến hết.
Trường hợp này chỉ đúng khi không dùng dấu tiếng Việt thôi Anh Sealand, theo em nghĩ lưu trong sheet (ẩn) nào đó cũng được, không tăng thêm dung lượng là mấy đâu nhỉ?
Private Sub UserForm_Initialize()
With ThisWorkbook.CustomDocumentProperties
If .Count = 0 Then
.Add "MyCustomString1", False, msoPropertyTypeString, TextBox1.Text
.Add "MyCustomString2", False, msoPropertyTypeString, TextBox2.Text
.Add "MyCustomString3", False, msoPropertyTypeString, TextBox3.Text
Else
TextBox1.Text = .Item("MyCustomString1")
TextBox2.Text = .Item("MyCustomString2")
TextBox3.Text = .Item("MyCustomString3")
End If
End With
End Sub
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
With ThisWorkbook.CustomDocumentProperties
.Item("MyCustomString1") = TextBox1.Text
.Item("MyCustomString2") = TextBox2.Text
.Item("MyCustomString3") = TextBox3.Text
End With
End Sub
Cũng là một cách. Nếu dùng ký tự Việt thì trước khi ghi ta convert sang vd. Windows 1258 (vietnamese), và trước khi đọc vào controls thì convert ngược lại.
Nhưng cách thì có nhiều. Càng "láu cá" thì càng nghĩ ra nhiều cách.
Ví dụ ta sử dụng DocumentProperties
Ghi string, numeric, date, boolean đều chơi tuốt.
Cái này em cũng đã dùng để lưu thông tin người mở, thời gian mở cuối và thấy nó cũng tiện. Nhưng có cái dở là không mở file người tọc mạch vẫn sửa đổi được.
Nói thực là tôi không nghiên cứu vụ này nhưng tôi cho là tất cả những cái "có sẵn", tức do Excel tạo ra, trú ngụ tại BuiltinDocumentProperties. Và những "vị" này dễ thay đổi mà không cần mở tập tin.
Còn CustomDocumentProperties theo tôi là Excel "dâng" cho người dùng tự tạo, và do vậy CustomDocumentProperties chỉ có những cái mà người dùng tự tạo. Và theo tôi những "vị" này không dễ thay đổi được.
Nếu bạn có cách thay đổi dễ dàng mà không mở tập tin thì xin chỉ giáo.
-----------
Theo tôi cũng chính vì BuiltinDocumentProperties do Excel tự tạo nên nó chỉ có "bằng ấy bằng ấy" mục. Không thêm được mục mới nào mà chỉ sửa được giá trị các mục đã có (cái này là đoán thôi chứ chưa nghiên cứu). Dường như Excel muốn nói: "Anh định sửa các giá trị? Xin mời xin mời. Anh định thêm mục mới? Nếu thế thì biến sang phòng "CustomDocumentProperties". Tôi đã cố tình tạo thêm cho anh CustomDocumentProperties, anh quên rồi sao?"
Chắc phải có lý gì thì Excel mới tạo ra hai DocumentProperties
Mình có thể tạo 1 cái List cho ComboBox từ mảng 1 chiều của cái CustomDocumentProperties này, do vậy ai cập nhật trong thời gian nào, nó đều có thể lưu lại bằng cách nối chuỗi và tách chuỗi tạo thành mảng một chiều, gán ngược lên ComboBox.
Nhưng xem ra em vẫn thích lưu trong sheet hơn, thoải mái, chẳng cần cấu trúc phức tạp!