Giả sử em có 1 checkbox và đặt giá trị là True rồi thoát Form. Anh chị có thể giúp em lần sau khi gọi Form lên thì checkbox sẽ là true được không ạ. (Em chỉ biết 1 cách là gán giá trị checkbox xuống cells rồi thoát form). Mong các anh chị giúp đỡ, em xin cảm ơn!
Cách đó là được rồi còn gì, và khi mở Form lên thì lấy giá trị từ bảng tính gán vào checkbox đó.
Hoặc thử tham khảo hai hàm GetSetting và SaveSetting...
Giả sử em có 1 checkbox và đặt giá trị là True rồi thoát Form. Anh chị có thể giúp em lần sau khi gọi Form lên thì checkbox sẽ là true được không ạ. (Em chỉ biết 1 cách là gán giá trị checkbox xuống cells rồi thoát form). Mong các anh chị giúp đỡ, em xin cảm ơn!
Tùy chuyện mà dùng registry.
- Nếu code của ta là 1 addin, dùng GetSetting, SaveSetting là chính xác
- Nếu code chỉ chạy trong file mà dùng registry là không hợp lý. Bởi khi mang file sang máy tính khác thì thiết lập trên máy mới đâu còn giống với máy cũ. Cụ thể với bài này, nếu lưu ở registry thì khi mang sang máy khác, checkbox ấy sẽ luôn = false
Có rất nhiều cách: ghi giá trị vào cell, ghi ra tập tin txt, ghi vào name, ghi vào comment của cell, ghi đâu đó. Đâu đó có thể là bất kỳ cái gì. Vd. ghi vào đám mây rồi đọc ra từ đám mây. Ghi vào thuộc tính của cửa sổ Excel (dùng hàm API). Có hàng nghìn cách khó và dễ. Cũng có thể ghi vào CheckBox.Value. Nhưng ghi sao cho khi đóng Form và kiểm tra trong VBE thì Value của CheckBox đúng là có thay đổi. Cái này đòi hỏi phải thêm References "Microsoft Visual Basic For Applications Extensibility" và chọn "Trust access to the VBA project object model" (trong Macro Security).
Nếu bạn không muốn các cách trên thì code trong UserForm như sau. Nhớ thay "Sheet1" bằng tên sheet của mình và CheckBox1 bằng tên hiện hành của CheckBox.
Mã:
Private Sub UserForm_Initialize()
With ThisWorkbook.Worksheets("Sheet1")
If IsNumeric(.Range("A1").ID) Then CheckBox1.Value = CBool(.Range("A1").ID)
End With
End Sub
Private Sub UserForm_Terminate()
ThisWorkbook.Worksheets("Sheet1").Range("A1").ID = CInt(CheckBox1.Value)
End Sub
Tức ghi nhớ vào ID của ô A1 trên sheet Sheet1. Thế thôi.
Có rất nhiều cách: ghi giá trị vào cell, ghi ra tập tin txt, ghi vào name, ghi vào comment của cell, ghi đâu đó. Đâu đó có thể là bất kỳ cái gì. Vd. ghi vào đám mây rồi đọc ra từ đám mây. Ghi vào thuộc tính của cửa sổ Excel (dùng hàm API). Có hàng nghìn cách khó và dễ. Cũng có thể ghi vào CheckBox.Value. Nhưng ghi sao cho khi đóng Form và kiểm tra trong VBE thì Value của CheckBox đúng là có thay đổi. Cái này đòi hỏi phải thêm References "Microsoft Visual Basic For Applications Extensibility" và chọn "Trust access to the VBA project object model" (trong Macro Security).
Nếu bạn không muốn các cách trên thì code trong UserForm như sau. Nhớ thay "Sheet1" bằng tên sheet của mình và CheckBox1 bằng tên hiện hành của CheckBox.
Mã:
Private Sub UserForm_Initialize()
With ThisWorkbook.Worksheets("Sheet1")
If IsNumeric(.Range("A1").ID) Then CheckBox1.Value = CBool(.Range("A1").ID)
End With
End Sub
Private Sub UserForm_Terminate()
ThisWorkbook.Worksheets("Sheet1").Range("A1").ID = CInt(CheckBox1.Value)
End Sub
Tức ghi nhớ vào ID của ô A1 trên sheet Sheet1. Thế thôi.
Cũng cần nói thêm là ID không được lưu, vậy khi đóng và mở lại tập tin thì trạng thái CheckBox lại như khi thiết kế.
Nếu cần lưu cả khi đóng tập tin thì vd. ghi vào Name.
Cũng cần nói thêm là ID không được lưu, vậy khi đóng và mở lại tập tin thì trạng thái CheckBox lại như khi thiết kế.
Nếu cần lưu cả khi đóng tập tin thì vd. ghi vào Name.
Quả thật khi bác nói em mới thử đóng và mở lại tập tin thì Checkbox lại như thiết kế, nhờ bác giúp em cách khác được không ạ, em muốn nó lưu khi lưu tập tin hoặc lưu kể cả khi không lưu tập tin càng tốt ạ, em xin cảm ơn
Private Sub UserForm_Initialize()
On Error Resume Next
CheckBox1.Value = CBool(Replace(ThisWorkbook.Names("CheckBox1Value").RefersTo, "=", ""))
If Err.Number Then
ThisWorkbook.Names.Add Name:="CheckBox1Value", RefersTo:=0
End If
End Sub
Private Sub UserForm_Terminate()
ThisWorkbook.Names("CheckBox1Value").RefersTo = "=" & CInt(CheckBox1.Value)
End Sub