giúp mình giữ nguyên nội dung trong userform khi tắt excel với (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

kuvi1324

Thành viên chính thức
Tham gia
1/2/13
Bài viết
78
Được thích
0
giúp mình giữ nguyên nội dung trong userform khi tắt excel với (khi bật lại thì vẫn còn những gì mình điền vào)
 
Bạn lưu cấu hình các controls của form vào sheet, sau đó trong userform load lại cấu hình đã lưu vào sheet, trước khi exit form thì save workbook
 
Upvote 0
@@ 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&&&%$R
 
Upvote 0
@@ 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&&&%$R

Tôi lấy ví dụ cho bạn hiểu.
Ví dụ trên Form bạn có TextBox và bạn gõ: "Tôi đi nhậu đây". Dữ liệu này nó chỉ nằm trong RAM, Excel không ghi lại ở bất cứ nơi nào. Khi bạn đóng Excel thì vùng RAM "dành cho Excel" sẽ được giải phóng. Excel không ghi lại ở bất cứ đâu thì làm sao bạn có lại "Tôi đi nhậu đây"? Nghĩ một chút thì thấy: Nếu Excel không ghi lại thì TÔI tự ghi lại. Đơn giản quá đúng không? Còn chuyện bạn ghi vào "sổ tay" nào thì tùy bạn, miễn về sau biết chỗ để mà đọc ra. Bạn có thể ghi vào "đâu đó" trên Sheet, ghi ra tập tin ngoài, vd. tập tin TXT, ghi vào Registry (không nên làm rác Registry nhưng nếu ghi thì cũng chả tù tội gì) v...v
Vậy thì:
1. Khi đóng Form thì ghi các thông tin vào "sổ tay"
2. Khi mở Form thì đọc từ "sổ tay" vào những nơi thích hợp.

Thế thôi.
 
Upvote 0
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.
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
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ỉ?
 
Upvote 0
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ỉ?

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
Mã:
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

Ghi string, numeric, date, boolean đều chơi tuốt.
 
Upvote 0
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.
 
Upvote 0
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
 
Upvote 0
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!
 
Upvote 0
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!

Thì là chỉ ra các cách thôi. Chứ 100 người thì 100 gu. Vì thế người đời đã nói rồi: Tranh luận về gu là tranh luận vô bổ nhất. Chắc chắn gu của bạn không giống gu của Chí Phèo. Tôi có lý? Với bạn không có được cô chân dài kia thì chỉ còn cái chết nhưng với Chí Phèo thì không có được Thị Nở mới là không muốn sống nữa.
 
Upvote 0

Bài viết mới nhất

Back
Top Bottom