Hỏi về sự kiện Initialize trong UserForm (1 người xem)

  • Thread starter Thread starter Blad01
  • Ngày gửi Ngày gửi
Liên hệ QC

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

Blad01

Thành viên thường trực
Tham gia
6/10/07
Bài viết
350
Được thích
28
Chào các bạn, mình làm một UserForm để nhập dữ liệu, nhưng không hiểu sao mình viết code cho sự kiện Initialize trong UserForm lại không chạy và cũng không báo lỗi. Đoạn code đó như sau:
Mã:
Private Sub UserForm_Initialize()
    With uf_Nhaplieu
    .txtTimenguon.Text = ThisWorkbook.Worksheets("Data").Range("C1").Value
    .txtTimedich.Text = ThisWorkbook.Worksheets("Data").Range("E1").Value
    .MultiPage1.Pages(1).Visible = False
    .MultiPage1.Pages(2).Visible = False
    .MultiPage1.Pages(3).Visible = False
    .MultiPage1.Pages(4).Visible = False
    .MultiPage1.Pages(5).Visible = False
    .MultiPage1.Pages(6).Visible = False
    .MultiPage1.Pages(7).Visible = False
    .MultiPage1.Pages(8).Visible = False
    .MultiPage1.Pages(9).Visible = False
    .MultiPage1.Pages(10).Visible = False
    .MultiPage1.Pages(11).Visible = False
    .MultiPage1.Pages(12).Visible = False
    .MultiPage1.Pages(13).Visible = False
    .MultiPage1.Pages(14).Visible = False
    .MultiPage1.Pages(15).Visible = False
    .MultiPage1.Pages(16).Visible = False
    .MultiPage1.Pages(17).Visible = False
End With

Call MinMax(uf_Nhaplieu.Caption)
Size_ListBox
Set sHcq = Nothing
End Sub
Các Page trong MultiPage1 khi load Form không ẩn đi như đoạn code mình viết. mình gửi theo file đính kèm, nút chạy code mình để ở Sheets("Data"). Mong các bạn giúp đỡ.
 

File đính kèm

Chào các bạn, mình làm một UserForm để nhập dữ liệu, nhưng không hiểu sao mình viết code cho sự kiện Initialize trong UserForm lại không chạy và cũng không báo lỗi. Đoạn code đó như sau:
Mã:
Private Sub UserForm_Initialize()
    With uf_Nhaplieu
    .txtTimenguon.Text = ThisWorkbook.Worksheets("Data").Range("C1").Value
    .txtTimedich.Text = ThisWorkbook.Worksheets("Data").Range("E1").Value
    .MultiPage1.Pages(1).Visible = False
    .MultiPage1.Pages(2).Visible = False
    .MultiPage1.Pages(3).Visible = False
    .MultiPage1.Pages(4).Visible = False
    .MultiPage1.Pages(5).Visible = False
    .MultiPage1.Pages(6).Visible = False
    .MultiPage1.Pages(7).Visible = False
    .MultiPage1.Pages(8).Visible = False
    .MultiPage1.Pages(9).Visible = False
    .MultiPage1.Pages(10).Visible = False
    .MultiPage1.Pages(11).Visible = False
    .MultiPage1.Pages(12).Visible = False
    .MultiPage1.Pages(13).Visible = False
    .MultiPage1.Pages(14).Visible = False
    .MultiPage1.Pages(15).Visible = False
    .MultiPage1.Pages(16).Visible = False
    .MultiPage1.Pages(17).Visible = False
End With

Call MinMax(uf_Nhaplieu.Caption)
Size_ListBox
Set sHcq = Nothing
End Sub
Các Page trong MultiPage1 khi load Form không ẩn đi như đoạn code mình viết. mình gửi theo file đính kèm, nút chạy code mình để ở Sheets("Data"). Mong các bạn giúp đỡ.
Tôi chạy thử thấy ẩn hết
Mà không hiểu bạn quản lý gì, mà một loạt , toàn là vba trộn công thức thành một loạt code, bạn quản lý code thật giỏi
 
Lần chỉnh sửa cuối:
Upvote 0
Tôi chạy thử thật ẩn hết
Mà không hiểu bạn quản lý gì, mà một loạt , toàn là vba trộn công thức thành một loạt code, bạn quản lý code thật giỏi
Cảm ơn bạn, mình thử nhiều máy cơ quan mình mà sao nó không hoạt động, chẳng hiểu sao nữa. Cách quản lý code thì mình cũng không nghĩ ra cách quản lý thế nào cho khoa học, vì chưa có kinh nghiệm, bạn có cách nào quản lý hay không chia sẻ kinh nghiệm cho ae với.
 
Upvote 0
Chào các bạn, mình làm một UserForm để nhập dữ liệu, nhưng không hiểu sao mình viết code cho sự kiện Initialize trong UserForm lại không chạy và cũng không báo lỗi. Đoạn code đó như sau:
Mã:
Private Sub UserForm_Initialize()
    With uf_Nhaplieu
    .txtTimenguon.Text = ThisWorkbook.Worksheets("Data").Range("C1").Value
    .txtTimedich.Text = ThisWorkbook.Worksheets("Data").Range("E1").Value
    .MultiPage1.Pages(1).Visible = False
    .MultiPage1.Pages(2).Visible = False
    .MultiPage1.Pages(3).Visible = False
    .MultiPage1.Pages(4).Visible = False
    .MultiPage1.Pages(5).Visible = False
    .MultiPage1.Pages(6).Visible = False
    .MultiPage1.Pages(7).Visible = False
    .MultiPage1.Pages(8).Visible = False
    .MultiPage1.Pages(9).Visible = False
    .MultiPage1.Pages(10).Visible = False
    .MultiPage1.Pages(11).Visible = False
    .MultiPage1.Pages(12).Visible = False
    .MultiPage1.Pages(13).Visible = False
    .MultiPage1.Pages(14).Visible = False
    .MultiPage1.Pages(15).Visible = False
    .MultiPage1.Pages(16).Visible = False
    .MultiPage1.Pages(17).Visible = False
End With

Call MinMax(uf_Nhaplieu.Caption)
Size_ListBox
Set sHcq = Nothing
End Sub
Các Page trong MultiPage1 khi load Form không ẩn đi như đoạn code mình viết. mình gửi theo file đính kèm, nút chạy code mình để ở Sheets("Data"). Mong các bạn giúp đỡ.
Đoạn lặp trên nên đổi thành
Mã:
For i=1 to 17    
       .MultiPage1.Pages(i).Visible = False
Next i


---------------
Còn Quản lý thì phải nắm toàn bộ dự án (project ) mới quản lý được, Nên chỉ góp ý kiểu chung chung (thông cảm) : thường người ta phân Code Data, Form là độc lập
 
Upvote 0
mình thấy thông thường, trong cửa sổ vba khi đặt con trỏ chuột vào trong Sub UserForm_Initialize thì trên thanh Object nó phải hiện chữ UserForm và bên thanh Procedure sẽ hiện chữ Initialize. Nhưng trên máy mình lại không như vậy (xem hình), không biết lỗi sảy ra có phải nguyên nhân là do đây không ?Loi.jpg
 
Upvote 0
mình thấy thông thường, trong cửa sổ vba khi đặt con trỏ chuột vào trong Sub UserForm_Initialize thì trên thanh Object nó phải hiện chữ UserForm và bên thanh Procedure sẽ hiện chữ Initialize. Nhưng trên máy mình lại không như vậy (xem hình), không biết lỗi sảy ra có phải nguyên nhân là do đây không ?
Bên trái phải xổ xuống chọn Userform trước, bên phải mới có để chọn
 
Upvote 0
Chào các bạn, mình làm một UserForm để nhập dữ liệu, nhưng không hiểu sao mình viết code cho sự kiện Initialize trong UserForm lại không chạy và cũng không báo lỗi. Đoạn code đó như sau:
Mã:
Private Sub UserForm_Initialize()
    With uf_Nhaplieu
    .txtTimenguon.Text = ThisWorkbook.Worksheets("Data").Range("C1").Value
    .txtTimedich.Text = ThisWorkbook.Worksheets("Data").Range("E1").Value
    .MultiPage1.Pages(1).Visible = False
    .MultiPage1.Pages(2).Visible = False
    .MultiPage1.Pages(3).Visible = False
    .MultiPage1.Pages(4).Visible = False
    .MultiPage1.Pages(5).Visible = False
    .MultiPage1.Pages(6).Visible = False
    .MultiPage1.Pages(7).Visible = False
    .MultiPage1.Pages(8).Visible = False
    .MultiPage1.Pages(9).Visible = False
    .MultiPage1.Pages(10).Visible = False
    .MultiPage1.Pages(11).Visible = False
    .MultiPage1.Pages(12).Visible = False
    .MultiPage1.Pages(13).Visible = False
    .MultiPage1.Pages(14).Visible = False
    .MultiPage1.Pages(15).Visible = False
    .MultiPage1.Pages(16).Visible = False
    .MultiPage1.Pages(17).Visible = False
End With

Call MinMax(uf_Nhaplieu.Caption)
Size_ListBox
Set sHcq = Nothing
End Sub
Các Page trong MultiPage1 khi load Form không ẩn đi như đoạn code mình viết. mình gửi theo file đính kèm, nút chạy code mình để ở Sheets("Data"). Mong các bạn giúp đỡ.
Sửa lại thành:
Mã:
Private Sub UserForm_Initialize()
  With uf_Nhaplieu
    .MultiPage1.Value = 0
    .txtTimenguon.Text = ThisWorkbook.Worksheets("Data").Range("C1").Value
    .txtTimedich.Text = ThisWorkbook.Worksheets("Data").Range("E1").Value
  End With

  Call MinMax(uf_Nhaplieu.Caption)
  Size_ListBox
  Set sHcq = Nothing
End Sub
-----------------------------------------------
Vâng, nhưng trên máy của em bên trái lại không có đối tượng Userform để chọn, đoạn này Sub UserForm_Initialize là do em tự đánh vào
Tôi không tin đâu. Bạn chụp hình lại tình trạng trên máy tôi mới tin
 
Upvote 0
Sửa lại thành:
Mã:
Private Sub UserForm_Initialize()
  With uf_Nhaplieu
    .MultiPage1.Value = 0
    .txtTimenguon.Text = ThisWorkbook.Worksheets("Data").Range("C1").Value
    .txtTimedich.Text = ThisWorkbook.Worksheets("Data").Range("E1").Value
  End With

  Call MinMax(uf_Nhaplieu.Caption)
  Size_ListBox
  Set sHcq = Nothing
End Sub
-----------------------------------------------

Tôi không tin đâu. Bạn chụp hình lại tình trạng trên máy tôi mới tin
Đây thầy ndu ơi, hình này là em chạy code, thầy có thấy các Page không ẩn không ạ.
Chay UF.jpg
Còn đầy là hiện trạng trong code
Untitled2.jpg
-------------------------------------------------------
Thanh Object tên đối tượng được xếp theo thứ tự vần ABC đúng không ạ, em đã kéo hết nhưng không thấy đối tượng UserForm
Untitled3.jpg
 
Upvote 0
Máy bạn bị gì rồi
1597994430145.png

1597994455071.png
 
Upvote 0
.Value = 0 'thì Page có index = 0 sẽ được chọn, chứ không phải là ẩn / hiện page gì cả.

--
Bạn xóa toàn bộ rác, khởi động lại máy tính xem
Mã:
'Tạo File clear_temp.bat
'Rồi Run as Administrator
Del /S /F /Q %temp%
Del /S /F /Q %Windir%\Temp

FOR /D %%p IN (%temp%\*) DO rmdir "%%p" /s /q

FOR /D %%p IN (%Windir%\Temp\*) DO rmdir "%%p" /s /q
 
Upvote 0
.Value = 0 'thì Page có index = 0 sẽ được chọn, chứ không phải là ẩn / hiện page gì cả.

--
Bạn xóa toàn bộ rác, khởi động lại máy tính xem
Mã:
'Tạo File clear_temp.bat
'Rồi Run as Administrator
Del /S /F /Q %temp%
Del /S /F /Q %Windir%\Temp

FOR /D %%p IN (%temp%\*) DO rmdir "%%p" /s /q

FOR /D %%p IN (%Windir%\Temp\*) DO rmdir "%%p" /s /q
file này chạy bằng notepad phải không bạn
 
Upvote 0
Tôi dùng Excel 2007 và cũng có hiện tượng giống như chủ topic.
Khi tôi vẽ thêm 1 control lên form, qua trình soạn thảo code chọn đối tượng bị lỗi Out of memory. Khi tôi xóa bớt 1 control thì file hoạt động bình thường.
=> Tôi đoán là số lượng control trên form của bạn đã đến giới hạn cho phép của phiên bản Excel mà bạn đang sử dụng.
 
Upvote 0
Sub UserForm_Initialize thì trên thanh Object
Máy của mình cũng bị tình trạng này, kiểm tra thì có tận hơn 1000 đối tượng, chạy debug thì sự kiện initialize cũng không có chạy, xóa đỡ mấy cái control to nhất trong form thì không còn tình trạng trê.
 
Upvote 0
Tôi dùng Excel 2013 32 bit + Windows 10 64 bit cũng bị. Tôi cũng nghi là do số lượng control vì thấy chúng nhiều quá. Hằng hà sa số.
 
Upvote 0
Tôi dùng Excel 2013 32 bit + Windows 10 64 bit cũng bị. Tôi cũng nghi là do số lượng control vì thấy chúng nhiều quá. Hằng hà sa số.
Không có tài liệu nào nói về vụ giới hạn số lượng controls này các bạn nhỉ. Thiết kế gần xong rồi giờ làm lại nản quá
 
Upvote 0
CSDL bạn đang xây dựng hình như chưa ổn lắm, khoan hẵn nói về Controls mà nên thiết kế lại các trang tính thì hơn.

Thậm chí tên trang tính cũng cần xem để rút gọn hơn, như
B01. . . B35
TB01. . . TB35

Danh sách đảng viên nhất thiết phải có mã (duy nhất)
 
Lần chỉnh sửa cuối:
Upvote 0
Upvote 0
Không có tài liệu nào nói về vụ giới hạn số lượng controls này các bạn nhỉ. Thiết kế gần xong rồi giờ làm lại nản quá
Bạn tạo 1 Form mới rồi Coppy các control qua sẽ được (cái này hồi nãy tui mới copy cái Page ah)

Chắc có lẽ nhiều control quá bạn bỏ bớt 1 số label control không cần thiêt
 
Lần chỉnh sửa cuối:
Upvote 0
Bạn tạo 1 Form mới rồi Coppy các control qua sẽ được
copy qua form mới thì 100 controls cũng vẫn 100 controls, cũng là vượt số, mèo lại hoàn mèo
Chưa nói 1 rừng code chả lẽ ngồi viết lại? Copy qua cũng phải sửa cả rừng vì tên control cũng bị đổi, tên parent (form) cũng đổi
 
Upvote 0
Không có tài liệu nào nói về vụ giới hạn số lượng controls này các bạn nhỉ. Thiết kế gần xong rồi giờ làm lại nản quá
Nếu là tôi thì tôi sẽ nhân dịp này thiết kế lại. Coi như "nó" bắt mình phải sửa, "nó" cho mình động lực để làm tốt hơn.

Nếu bạn cố tình tiếc cái mớ hỗn độn này thì cũng có cách để bắt nó chạy.

Bạn thử kiểm tra như tôi làm.

Tôi chọn Page "Bieu 1". Tôi thấy nút "Đóng". Tôi cho là nó không quan trọng lắm, vì ít nhất có thể đóng Form bằng cách khác. Vậy tôi thử bỏ nút "Đóng". Kiểm tra lại tôi thấy mình may mắn vì đã có UserForm. Và như vậy dĩ nhiên là UserForm_Initialize chạy và các Page được ẩn.

Bây giờ thì dễ rồi. Tôi kiểm tra thấy trên 17 Page từ "Bieu 1" tới "Bieu 17" có 17 nút "Đóng" được gán cho 17 sub cmdDongXYZ_Click, với XYZ = 1, 2, ..., 17. Này anh bạn, không ai làm như thế cả. Hãy bỏ 17 nút cmdDongXYZ và 1 nút trên page "Chung", và thêm 1 nút duy nhất cmdDong ngoài MutiPage1 (đặt trên Form). Xóa toàn bộ 18 cmdDongXYZ_Click với code Unload Me, DongTrang 1, DongTrang 2, ..., DongTrang 17. Chỉ có 1 code duy nhất cho cmdDong là
Mã:
Private Sub cmdDong_Click()
    If MultiPage1.Value = 0 Then
        Unload Me
    Else
        DongTrang MultiPage1.Value
    End If
End Sub

Nhiều nút khác cũng có thể bỏ chỉ để 1 nút ngoài MultiPage1. Tôi tin rằng nhiều code cũng có thể gộp và rút gọn.

Vài lời khuyên thế thôi chứ tôi không đủ kiên nhẫn để dò những bất hợp lý cho bạn.
 
Upvote 0
Không có tài liệu nào nói về vụ giới hạn số lượng controls này các bạn nhỉ. Thiết kế gần xong rồi giờ làm lại nản quá

Thiết kế sai hết thì làm lại thôi chứ để sau này càng bế tắc.
Như bác ptm0412 đã đề cập, bạn lạm dụng checkbox một cách thái quá. Có rất nhiều hạng mục đúng bài phải dùng Combobox, bạn lại dàn trải thành checkbox rườm rà cái form, bên cạnh đó nó không có khả năng cập nhật nếu sau này có thêm các mục mới.
Nếu bạn phân tích kỹ, dùng các control một cách hợp lý thì 2 3 Tab của bạn cũng có thể gộp thành 1 Tab.
Một vấn đề nữa là chẳng có ai thiết kế 1 cái Form ôm đồm tất cả các form nhập liệu của ứng dụng vô làm một. Chẳng hiểu quả về mặt tiện sử dụng đối với người dùng cũng như đối với code, với hiệu suất hoạt động Form. Nhập liệu tới đâu thì tải dữ liệu lên Form tới đó, xong đóng lại, giải phóng bộ nhớ, tiếp tục tải dữ liệu khác và làm như vậy.
Trước đây tôi cũng có làm cái ứng dụng quản lý đối tượng Đảng nên cũng hiểu chút sự phức tạp của dữ liệu mà bạn đang làm nhưng nhìn qua là biết bạn thiết kế Form không hiệu quả rồi. Nên tổ chức thành từng nhóm các chức năng và có Form riêng cho từng tác vụ thì form sẽ nhẹ nhàng, gọn gàng hơn.

(PS: nói chung làm cái màu nền là sai qui tắc thiết kế rồi (đã cố tìm cái tông màu đỏ ít gây "ngứa con mắt bên phải, đỏ con mắt bên trái" rồi đó) nhưng vì là đặc thù yêu cầu nên phải làm vậy :cool: )
ZldsRVb.png
 
Lần chỉnh sửa cuối:
Upvote 0
CSDL bạn đang xây dựng hình như chưa ổn lắm, khoan hẵn nói về Controls mà nên thiết kế lại các trang tính thì hơn.

Thậm chí tên trang tính cũng cần xem để rút gọn hơn, như
B01. . . B35
TB01. . . TB35

Danh sách đảng viên nhất thiết phải có mã (duy nhất)
Về mã Đảng viên trước đây thầy có hướng dẫn em làm và giờ em cũng vẫn đang làm theo code thầy hướng dẫn ạ. Tên trang tính em sẽ rút gọn lại. Cảm ơn thầy đã góp ý
Bài đã được tự động gộp:

Thiết kế sai hết thì làm lại thôi chứ để sau này càng bế tắc.
Như bác ptm0412 đã đề cập, bạn lạm dụng checkbox một cách thái quá. Có rất nhiều hạng mục đúng bài phải dùng Combobox, bạn lại dàn trải thành checkbox rườm rà cái form, bên cạnh đó nó không có khả năng cập nhật nếu sau này có thêm các mục mới.
Nếu bạn phân tích kỹ, dùng các control một cách hợp lý thì 2 3 Tab của bạn cũng có thể gộp thành 1 Tab.
Một vấn đề nữa là chẳng có ai thiết kế 1 cái Form ôm đồm tất cả các form nhập liệu của ứng dụng vô làm một. Chẳng hiểu quả về mặt tiện sử dụng đối với người dùng cũng như đối với code, với hiệu suất hoạt động Form. Nhập liệu tới đâu thì tải dữ liệu lên Form tới đó, xong đóng lại, giải phóng bộ nhớ, tiếp tục tải dữ liệu khác và làm như vậy.
Trước đây tôi cũng có làm cái ứng dụng quản lý đối tượng Đảng nên cũng hiểu chút sự phức tạp của dữ liệu mà bạn đang làm nhưng nhìn qua là biết bạn thiết kế Form không hiệu quả rồi. Nên tổ chức thành từng nhóm các chức năng và có Form riêng cho từng tác vụ thì form sẽ nhẹ nhàng, gọn gàng hơn.

(PS: nói chung làm cái màu nền là sai qui tắc thiết kế rồi (đã cố tìm cái tông màu đỏ ít gây "ngứa con mắt bên phải, đỏ con mắt bên trái" rồi đó) nhưng vì là đặc thù yêu cầu nên phải làm vậy :cool: )
ZldsRVb.png
Cảm ơn bạn đã góp ý, vụ các check box do yêu cầu bắt buộc phải chọn nhiều nội dung nên mình mới phải sử dụng các checkbox. Nhưng nói chung qua sự góp ý từ các bạn mình xin được tiếp thu và xem xét chỉnh sửa lại toàn bộ. Mong các bạn tiếp tục góp ý để mình hoàn thiện và nâng hiệu quả chạy code. Cái giao diện chương trình quản lý đẹp quá, bạn thiết kế bằng cozen hay photoshop vậy.
Bài đã được tự động gộp:

Nếu là tôi thì tôi sẽ nhân dịp này thiết kế lại. Coi như "nó" bắt mình phải sửa, "nó" cho mình động lực để làm tốt hơn.

Nếu bạn cố tình tiếc cái mớ hỗn độn này thì cũng có cách để bắt nó chạy.

Bạn thử kiểm tra như tôi làm.

Tôi chọn Page "Bieu 1". Tôi thấy nút "Đóng". Tôi cho là nó không quan trọng lắm, vì ít nhất có thể đóng Form bằng cách khác. Vậy tôi thử bỏ nút "Đóng". Kiểm tra lại tôi thấy mình may mắn vì đã có UserForm. Và như vậy dĩ nhiên là UserForm_Initialize chạy và các Page được ẩn.

Bây giờ thì dễ rồi. Tôi kiểm tra thấy trên 17 Page từ "Bieu 1" tới "Bieu 17" có 17 nút "Đóng" được gán cho 17 sub cmdDongXYZ_Click, với XYZ = 1, 2, ..., 17. Này anh bạn, không ai làm như thế cả. Hãy bỏ 17 nút cmdDongXYZ và 1 nút trên page "Chung", và thêm 1 nút duy nhất cmdDong ngoài MutiPage1 (đặt trên Form). Xóa toàn bộ 18 cmdDongXYZ_Click với code Unload Me, DongTrang 1, DongTrang 2, ..., DongTrang 17. Chỉ có 1 code duy nhất cho cmdDong là
Mã:
Private Sub cmdDong_Click()
    If MultiPage1.Value = 0 Then
        Unload Me
    Else
        DongTrang MultiPage1.Value
    End If
End Sub

Nhiều nút khác cũng có thể bỏ chỉ để 1 nút ngoài MultiPage1. Tôi tin rằng nhiều code cũng có thể gộp và rút gọn.

Vài lời khuyên thế thôi chứ tôi không đủ kiên nhẫn để dò những bất hợp lý cho bạn.
Cảm ơn thầy đã góp ý, em xin được tiếp thu
 
Lần chỉnh sửa cuối:
Upvote 0
Nhưng sửa như tôi nói (tạm bợ) thì ở máy bạn đã "chạy" bình thường chưa?
Hiện tại em chưa sửa được, vì em ko có máy tính.
Bài đã được tự động gộp:

copy qua form mới thì 100 controls cũng vẫn 100 controls, cũng là vượt số, mèo lại hoàn mèo
Chưa nói 1 rừng code chả lẽ ngồi viết lại? Copy qua cũng phải sửa cả rừng vì tên control cũng bị đổi, tên parent (form) cũng đổi
Có lẽ em sẽ tách riêng từng userform cho mỗi page như bạn ongke0711 đã góp ý. Nhưng em rất tò mò số lượng controls trên userform cho từng phiên bản excel giới hạn tối đa là bao nhiêu nhỉ ?. Tìm trên web ko thấy có câu trả lời?
 
Lần chỉnh sửa cuối:
Upvote 0
Khoan nói về Form, nếu bạn chịu mô tả kỹ lại công việc của bạn từ sơ khai nhất, mình hay những bạn khác trên cộng đồng sẽ thiết kế cho bạn các trang tính cần thiết & tối giản.

Có nghĩa là mọi người sẽ được bạn giúp đỡ để thiết kế lại các trang tính cho bạn (nếu được) & những phần việc tiếp theo . . . .
 
Lần chỉnh sửa cuối:
Upvote 0
Khoan nói về Form, nếu bạn chịu mô tả kỹ lại công việc của bạn từ sơ khai nhất, mình hay những bạn khác trên cộng đồng sẽ thiết kế cho bạn các trang tính cần thiết & tối giản.

Có nghĩa là mọi người sẽ được bạn giúp đỡ để thiết kế lại các trang tính cho bạn (nếu được) & những phần việc tiếp theo . . . .
Em cảm ơn thầy, nếu được như vậy thì còn gì tuyệt vời hơn. Trong file đính kèm ở đầu topic là toàn bộ dữ liệu của em đang làm. Mục đích của em là tạo ra một userform nhập dữ liệu để thực hiện việc thống kê, in ấn, xuất báo cáo (trích xuất dữ liệu theo yêu cầu của thủ trưởng, ví dụ như: xã A từ năm 2020 đến năm 2024 đã thực hiện được bao nhiêu cuộc kiểm tra, hoặc Đảng ủy A từ tháng 27/8/2020 đến Ngày 15/7/2022 đã thi hành kỷ luật đối với bao nhiêu Đảng viên,....) và quản lý dữ liệu Đảng viên theo nhiều năm, cập Nhật dữ liệu từ cơ sở gửi về.
trong file đính kèm ở đầu topic cơ bản có hai loại sheet. Sheet có tên B1 đến B17 đó là mẫu biểu do trung ương ban hành (không thể thay đổi). Các sheet có tên TT_B1 đến TT_B17 là các sheet dữ liệu nguồn do em tự thiết kế, căn cứ vào dữ liệu nguồn này em sẽ đưa ra công thức thống kê số liệu Đưa sang biểu thống kê tương ứng do trung ương ban hành và trích xuất thông tin đảng viên khi có yêu cầu. Cơ bản là vậy, vấn đề cốt yếu là em lấy thông tin từ mẫu do trung ương ban hành để lên ý tưởng thiết kế form và sắp xếp dữ liệu. Nếu thầy cô cùng các bạn quan tâm, giúp đỡ mong góp ý và lên ý tưởng cho em một mẫu (Biểu 1 ở sheet B1 chẳng hạn) em sẽ căn cứ vào đó để làm cho các biểu sau.
Ở trong các biểu thường có mấy mục lớn là cấp kiểm tra, đối tượng kiểm tra, nội dung kiểm tra, cấp quản lý Đảng viên, đảng viên thuộc các lĩnh vực và kết luận (trong form thiết kế em tách ra thành hai phần: phần một là những thông tin liên quan đến Đảng viên, phần hai là thông tin liên quan đến cấp kiểm tra), Phần nội dung kiểm tra có thể có một hoặc nhiều nội dung, vì vậy khi thiết kế phải để người dùng chọn được nhiều nội dung.
 
Lần chỉnh sửa cuối:
Upvote 0
Trước tiên là bạn cần 1 trang tính làm HSDV (hồ sơ đảng viên) hay tên gì đó khác tương tự như DSDV, . . .)

Trang thứ 2 là các danh mục; chí it chúng cách nhau 1 cột rỗng, gồm:
Chức vụ: [Mã CV] & [Tên chức vụ]
Địa phương hay địa bàn: [Mã Dv], [Tên đơn vị]
Đon vị các cấp của đ3ng: [Mã CW], [Tên cấp ủy] (C: Chi bô; D: Chi bộ FT], [D: Đảng ủy],. . . . .
Kế đến ta làm Form để nhập dữ liệu các trường lên trang tính đầu của bạn
[Tất nhiên ban đầu chưa thể có đủ hết các trường theo nhu cầu hoạt động của file, sau ta sẽ phải bổ sung dần]

Làm được các phần này là như đạt phân nữa chuyện nhập liệu;

Chỉ sau đó ta mới tiến hành vô các biểu mẫu báo cáo

Theo như mình án chừng bạn đang tổ chức quản lý đảng viên cấp huyện; & mỗi xã, thị trấn cỡ 350 ĐV, nên số ĐV cần quản sẽ gần 7.000 - 8.000
. . . .
 
Upvote 0
Trước tiên là bạn cần 1 trang tính làm HSDV (hồ sơ đảng viên) hay tên gì đó khác tương tự như DSDV, . . .)

Trang thứ 2 là các danh mục; chí it chúng cách nhau 1 cột rỗng, gồm:
Chức vụ: [Mã CV] & [Tên chức vụ]
Địa phương hay địa bàn: [Mã Dv], [Tên đơn vị]
Đon vị các cấp của đ3ng: [Mã CW], [Tên cấp ủy] (C: Chi bô; D: Chi bộ FT], [D: Đảng ủy],. . . . .
Kế đến ta làm Form để nhập dữ liệu các trường lên trang tính đầu của bạn
[Tất nhiên ban đầu chưa thể có đủ hết các trường theo nhu cầu hoạt động của file, sau ta sẽ phải bổ sung dần]

Làm được các phần này là như đạt phân nữa chuyện nhập liệu;

Chỉ sau đó ta mới tiến hành vô các biểu mẫu báo cáo

Theo như mình án chừng bạn đang tổ chức quản lý đảng viên cấp huyện; & mỗi xã, thị trấn cỡ 350 ĐV, nên số ĐV cần quản sẽ gần 7.000 - 8.000
. . . .
Vâng, đúng như thầy nói, em có một vấn đề mong thầy và các bạn xem xét giúp. Phần tạo mã Đảng viên thì OK rồi, còn phần tạo mã tên đơn vị hành chính em đang gặp vấn đề thế này, ví dụ tên đơn vị hành chính là: Đảng uỷ thị trấn, code đang đưa ra mã là ĐỦT00. Em chưa biết cách để code đưa ra mã không dấu, thầy có thể giúp em việc này được ko ạ.
 
Upvote 0
Nhưng em rất tò mò số lượng controls trên userform cho từng phiên bản excel giới hạn tối đa là bao nhiêu nhỉ ?. Tìm trên web ko thấy có câu trả lời?
Vài hôm nữa lại nảy ra cái vụ giới hạn số modul trong một file thì lại căng đấy.hihi
 
Upvote 0
Thiết kế sai hết thì làm lại thôi chứ để sau này càng bế tắc.
Như bác ptm0412 đã đề cập, bạn lạm dụng checkbox một cách thái quá. Có rất nhiều hạng mục đúng bài phải dùng Combobox, bạn lại dàn trải thành checkbox rườm rà cái form, bên cạnh đó nó không có khả năng cập nhật nếu sau này có thêm các mục mới.
Nếu bạn phân tích kỹ, dùng các control một cách hợp lý thì 2 3 Tab của bạn cũng có thể gộp thành 1 Tab.
Một vấn đề nữa là chẳng có ai thiết kế 1 cái Form ôm đồm tất cả các form nhập liệu của ứng dụng vô làm một. Chẳng hiểu quả về mặt tiện sử dụng đối với người dùng cũng như đối với code, với hiệu suất hoạt động Form. Nhập liệu tới đâu thì tải dữ liệu lên Form tới đó, xong đóng lại, giải phóng bộ nhớ, tiếp tục tải dữ liệu khác và làm như vậy.
Trước đây tôi cũng có làm cái ứng dụng quản lý đối tượng Đảng nên cũng hiểu chút sự phức tạp của dữ liệu mà bạn đang làm nhưng nhìn qua là biết bạn thiết kế Form không hiệu quả rồi. Nên tổ chức thành từng nhóm các chức năng và có Form riêng cho từng tác vụ thì form sẽ nhẹ nhàng, gọn gàng hơn.

(PS: nói chung làm cái màu nền là sai qui tắc thiết kế rồi (đã cố tìm cái tông màu đỏ ít gây "ngứa con mắt bên phải, đỏ con mắt bên trái" rồi đó) nhưng vì là đặc thù yêu cầu nên phải làm vậy :cool: )
ZldsRVb.png
Khả năng thiết kế của anh phong phú quá - anh Có tuyển thư ký không, chừa cho em 1 vé nhé --=0
 
Upvote 0
Vụ này căng đó nha, ước tình vài chục modul
Bạn có vài chục modules vì chưa thiết kế đúng. Thí dụ:
- Thay vài chục option button tab chung thành 1 combobox, thì đã bớt được vài chục sub
- Bỏ vài chục cái nút đóng form như anh @batman1 đề nghị thì cũng giảm hàng chục sub
- Nếu thiết kế kỹ, thậm chí còn có thể bỏ bớt hàng chục tab, mỗi tab cả mớ sub

Phương pháp thiết kế và giảm thiểu code thì bạn cứ xem gợi ý và code mẫu của anh @batman1 về việc dùng 1 nút đóng form duy nhất, xem code vòng lặp bài #4 của anh @tigertiger thay thế cho mười mấy dòng lệnh của bạn.

Với tôi thì nguyên tắc là nếu nhiều thủ tục áp dụng cho nhiều control, xử lý nhiều sheet nhưng các thủ tục đều tương tự nhau, thì tôi gom lại thành 1 thủ tục với tham số truyền vào.

TB:
Tách module để quản lý code (gom các thủ tục gần nhau vào 1), cũng từng ấy thủ tục mà sắp xếp lại thôi, chứ làm gì có giới hạn
 
Upvote 0
Bạn có vài chục modules vì chưa thiết kế đúng. Thí dụ:
- Thay vài chục option button tab chung thành 1 combobox, thì đã bớt được vài chục sub
- Bỏ vài chục cái nút đóng form như anh @batman1 đề nghị thì cũng giảm hàng chục sub
- Nếu thiết kế kỹ, thậm chí còn có thể bỏ bớt hàng chục tab, mỗi tab cả mớ sub

Phương pháp thiết kế và giảm thiểu code thì bạn cứ xem gợi ý và code mẫu của anh @batman1 về việc dùng 1 nút đóng form duy nhất, xem code vòng lặp bài #4 của anh @tigertiger thay thế cho mười mấy dòng lệnh của bạn.

Với tôi thì nguyên tắc là nếu nhiều thủ tục áp dụng cho nhiều control, xử lý nhiều sheet nhưng các thủ tục đều tương tự nhau, thì tôi gom lại thành 1 thủ tục với tham số truyền vào.

TB:
Tách module để quản lý code (gom các thủ tục gần nhau vào 1), cũng từng ấy thủ tục mà sắp xếp lại thôi, chứ làm gì có giới hạn
Vâng em cảm ơn thầy
 
Upvote 0
. . . . , còn phần tạo mã tên đơn vị hành chính em đang gặp vấn đề thế này, ví dụ tên đơn vị hành chính là: Đảng uỷ thị trấn, code đang đưa ra mã là ĐỦT00. Em chưa biết cách để code đưa ra mã không dấu, thầy có thể giúp em việc này được ko ạ.
Về mã địa phương (chỉ là tỉnh - huyện - xã) mình làm thế này:
Mỗi mã gồm 6 kí số, 2 kí số đầu theo biển số xe của tỉnh đó, như 29: Hà nội; 50 HCM, 16 Hải phòng,. . . .
2 kí số tiếp theo là mã quận huyện, như 01: Quận I (HCM), 04: Q. 4,. . . .
2901: Quận Hoàn kiếm hay Ba Đình (tùy bạn)
500101: Phường Bến Thành Q. 1 HCM,. . . . .

Về mã các địa phương bạn có thể tham khảo thêm bên bưu điện, tổng cục thống kê hay mã do Bộ Nội vụ ban hành để có cái nhìn tối ưu cho trường hợp của bạn
 
Lần chỉnh sửa cuối:
Upvote 0

Bạn có vài chục modules vì chưa thiết kế đúng. Thí dụ:
- Thay vài chục option button tab chung thành 1 combobox, thì đã bớt được vài chục sub
- Bỏ vài chục cái nút đóng form như anh @batman1 đề nghị thì cũng giảm hàng chục sub
- Nếu thiết kế kỹ, thậm chí còn có thể bỏ bớt hàng chục tab, mỗi tab cả mớ sub

Phương pháp thiết kế và giảm thiểu code thì bạn cứ xem gợi ý và code mẫu của anh @batman1 về việc dùng 1 nút đóng form duy nhất, xem code vòng lặp bài #4 của anh @tigertiger thay thế cho mười mấy dòng lệnh của bạn.

Với tôi thì nguyên tắc là nếu nhiều thủ tục áp dụng cho nhiều control, xử lý nhiều sheet nhưng các thủ tục đều tương tự nhau, thì tôi gom lại thành 1 thủ tục với tham số truyền vào.

TB:
Tách module để quản lý code (gom các thủ tục gần nhau vào 1), cũng từng ấy thủ tục mà sắp xếp lại thôi, chứ làm gì có giới hạn
cơ bản em xin được tiếp thu, nhưng vụ option button và checkbox cần phải nghiên cứu thêm vì em đã từng thay opption button bằng combobox nhưng giao diện nhập liệu sao sao ấy
Bài đã được tự động gộp:

Về mã địa phương (chỉ là tỉnh - huyện - xã) mình làm thế này:
Mỗi mã gồm 6 kí số, 2 kí số đầu theo biển số xe của tỉnh đó, như 29: Hà nội; 50 HCM, 16 Hải phòng,. . . .
2 kí số tiếp theo là mã quận huyện, như 01: Quận I (HCM), 04: Q. 4,. . . .
2901: Quận Hoàn kiếm hay Ba Đình (tùy bạn)
500101: Phường Bến Thành Q. 1 HCM,. . . . .

Về mã các địa phương bạn có thể tham khảo thêm bên bưu điện, tổng cục thống kê hay mã do Bộ Nội vụ ban hành để có cái nhìn tối ưu cho trường hợp của bạn
Em cảm ơn thầy, thầy có thể viết code để em tham khảo được ko ạ
Bài đã được tự động gộp:

Trước tiên là bạn cần 1 trang tính làm HSDV (hồ sơ đảng viên) hay tên gì đó khác tương tự như DSDV, . . .)

Trang thứ 2 là các danh mục; chí it chúng cách nhau 1 cột rỗng, gồm:
Chức vụ: [Mã CV] & [Tên chức vụ]
Địa phương hay địa bàn: [Mã Dv], [Tên đơn vị]
Đon vị các cấp của đ3ng: [Mã CW], [Tên cấp ủy] (C: Chi bô; D: Chi bộ FT], [D: Đảng ủy],. . . . .
Kế đến ta làm Form để nhập dữ liệu các trường lên trang tính đầu của bạn
[Tất nhiên ban đầu chưa thể có đủ hết các trường theo nhu cầu hoạt động của file, sau ta sẽ phải bổ sung dần]

Làm được các phần này là như đạt phân nữa chuyện nhập liệu;

Chỉ sau đó ta mới tiến hành vô các biểu mẫu báo cáo

Theo như mình án chừng bạn đang tổ chức quản lý đảng viên cấp huyện; & mỗi xã, thị trấn cỡ 350 ĐV, nên số ĐV cần quản sẽ gần 7.000 - 8.000
. . . .
Cách này hay nhưng lại sảy ra vấn đề là khi tham chiếu code công thức đưa tới biểu thống kê lại gặp vấn đề là nó không liền mạck và đồng bộ. Nên khi viết code công thức lại phải viết nhiều công thức tham chiếu hơn.
 
Lần chỉnh sửa cuối:
Upvote 0

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

Back
Top Bottom