Cần giúp đỡ! -Y/c Macro kiểm soát Users nhập đầy đủ dữ liệu!

Liên hệ QC

ltmcustoms

Thành viên mới
Tham gia
11/5/07
Bài viết
27
Được thích
3
Giới tính
Nam
Trước đây em đã lập 1 file Excel để mọi người nhập liệu hàng ngày ở cơ quan em! nay muốn nhờ các bác giúp đỡ để hoàn thiện thêm:
Khi 1 User nhập liệu (có thể là copy, cut, move dữ liệu rồi paste vào cell, hoặc chọn từ list ) vào Cell thuộc vùng nhập liệu (chẳng hạn Sheet("Sheet1").Rang("B10:F100")) nếu User chọn 1 ô mới mà để sót ô rỗng bên trái hoặc các dòng bên trên (thuộc vùng đã nhập liệu) thì xuất hiện thông báo "Bạn chưa nhập đầy đủ dữ liệu!" và chuyển con trỏ vào ô rỗng để nhập bổ sung dữ liệu thiếu.
Hoặc là cách khác: em đã dùng 1 macro chuyển dữ liệu thuộc vùng đã nhập liệu ở Sheet1 sang sheet2, nhưng phần chưa làm được là muốn Macro đó chỉ chọn các dòng có đầy đủ dữ liệu chuyển đi, dòng chưa nhập đủ thì đưa lên dòng trên (từ B10) để user nhập bổ sung tiếp.
Em rất mê Macro Excel! Các bác giành thời gian giúp em nha !
Cám ơn các bác!
LTMCustoms
 
- Đọc có hiểu đôi chút nhưng chưa rõ lắm, tốt nhất là nên cho file vd + chú thích. Thân !!!
 
Upvote 0
ltmcustoms đã viết:
Trước đây em đã lập 1 file Excel để mọi người nhập liệu hàng ngày ở cơ quan em! nay muốn nhờ các bác giúp đỡ để hoàn thiện thêm:
Khi 1 User nhập liệu (có thể là copy, cut, move dữ liệu rồi paste vào cell, hoặc chọn từ list ) vào Cell thuộc vùng nhập liệu (chẳng hạn Sheet("Sheet1").Rang("B10:F100")) nếu User chọn 1 ô mới mà để sót ô rỗng bên trái hoặc các dòng bên trên (thuộc vùng đã nhập liệu) thì xuất hiện thông báo "Bạn chưa nhập đầy đủ dữ liệu!" và chuyển con trỏ vào ô rỗng để nhập bổ sung dữ liệu thiếu.
Hoặc là cách khác: em đã dùng 1 macro chuyển dữ liệu thuộc vùng đã nhập liệu ở Sheet1 sang sheet2, nhưng phần chưa làm được là muốn Macro đó chỉ chọn các dòng có đầy đủ dữ liệu chuyển đi, dòng chưa nhập đủ thì đưa lên dòng trên (từ B10) để user nhập bổ sung tiếp.
Em rất mê Macro Excel! Các bác giành thời gian giúp em nha !
Cám ơn các bác!
LTMCustoms


Trong nút ghi dữ liệu từ UserForm xuống sheet - Bạn có thể đặt đọan mã này trước đọan mã ghi dữ liệu:

If Textbox1 = "" Then
MsgBox "Ban chua nhap du lieu vao Textbox1", , "THONG BAO"
Exit Sub
End If
If Textbox2 = "" Then
MsgBox "Ban chua nhap du lieu vao Textbox2", , "THONG BAO"
Exit Sub
End If


...

Hãy thử xem sao nhé !
 
Upvote 0
Dùng macro kiểm soát nhập dữ liệu!?

vungoc đã viết:
Trong nút ghi dữ liệu từ UserForm xuống sheet - Bạn có thể đặt đọan mã này trước đọan mã ghi dữ liệu:

If Textbox1 = "" Then
MsgBox "Ban chua nhap du lieu vao Textbox1", , "THONG BAO"
Exit Sub
End If
If Textbox2 = "" Then
MsgBox "Ban chua nhap du lieu vao Textbox2", , "THONG BAO"
Exit Sub
End If


...

Hãy thử xem sao nhé !

Cám ơn bác vì đã cho 1 giải pháp kiểm soát người nhập liệu (Users) trong trường họơp dùng " ...ghi dữ liệu từ UserForm xuống sheet..." em sẽ vận dụng để làm đối với số liệu chọn từ UserForm, còn yêu cầu của em là thêm các trường hợp ở các cột người dùng có thể nhập trực tiếp bằng gõ fím, chọn từ Data validation\List hoặc Copy,cut,move... rồi paste vào ô nhập liệu(Có đến 15 cột dữ liệu trên 1 dòng! nhiều wa! hi hi) em muốn là mọi trường hợp người dùng khi chọn 1 ô trong vùng phải nhập liệu mà để 1 ô (hoặc nhiều rỗng bên trái nó) thì Macro thông báo và không cho nhập ô đó nữa (Có thể chuyển trả chuột về ô rỗng đầu tiên trước đó được thì tiện cho thực tế công việc nhập ở Cquan em!)
Trước, em đã làm 1 file theo P/á khác - Dùng Macro kiểm tra dữ liệu ở 1 cột (dữ liệu quan trọng nhất!) nếu có 1 ô rỗng thì thông báo và dừng lại, nếu đã đầy đủ thì copy toàn bộ sang 1 sheet khác - thực tế không tiện lắm cho mọi người dùng, vì khi họ nhập bổ sung thì thông tin lại "đi qua mất rùi" hi hi! và chưa giải quyết được triệt để vấn đề là còn nhiều cột dữ liệu "quan trọng nhì, ba, tư..." thì vẫn Empty ...
Vấn đề em vẫn canh cánh từ lâu, mong các cao thủ chỉ giáo!?
Xin cám ơn !
LTMCustoms
 
Upvote 0
- Bạn tải cái này về xem nha, nhớ cho file vd kèm chú thích để người khác giúp bạn !!!
- Đối với link 2, tìm đoạn
Mã:
[LEFT]Private Sub Cbb_AfterUpdate()
   On Error Resume Next
   Sheets("Sheet2").Select
   Range("Name2").Select 
         Selection.Find(What:=Cbb, MatchCase:=True).ActiveCell
         Cbb.Value = UCase(Cbb.Text)
         Txtb2.Value = Cbb.Column(1)
         Txtb3.Value = Cbb.Column(2)
         Txtb4.Value = Cbb.Column(3)
End Sub[/LEFT]
- Thay bằng đoạn code
Mã:
[LEFT]Private Sub Cbb_Click()
         Txtb2.Value = Cbb.Column(1)
         Txtb3.Value = Cbb.Column(2)
         Txtb4.Value = Cbb.Column(3)
End Sub[/LEFT]
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Vụ án này có một lần em từng đụng phải. Căng thẳng. Em nhập liệu qua sheet chứ không phải qua form nên việc kiểm soát rất khó khăn. Cách làm của em như sau:
1. Ghi nhận lại các sheets đã đi qua, kiểm tra nếu sheet đi khỏi là sheet nhập liệu
2. Kiểm tra các trường nhập liệu xem có đầy đủ:
- Kiểm soát thông tin chung trên một chứng từ thì dể: ngày ctừ, tên, diễn giải.
- Kiểm soát thông tin chi tiết mới khó.
3. Kiểm tra tính hợp lý của các trường nhập liệu
4. Quay trở lại nếu không đạt tiêu chuẩn kiểm soát, hoặc yêu cầu lưu nếu chưa lưu chứng từ (nghĩa là xem thử chứng từ cũ được lôi ra có được lưu hay chưa nữa :) khá phiền phức.

Mong các bác bàn thêm.
 
Upvote 0
. . .Còn yêu cầu của em là thêm các trường hợp ở các cột người dùng có thể nhập trực tiếp bằng gõ fím, chọn từ Data validation\List hoặc Copy,cut,move... rồi paste vào ô nhập liệu(Có đến 15 cột dữ liệu trên 1 dòng! nhiều wa! ) em muốn là mọi trường hợp người dùng khi chọn 1 ô trong vùng phải nhập liệu mà để 1 ô (hoặc nhiều rỗng bên trái nó) thì Macro thông báo và không cho nhập ô đó nữa (Có thể chuyển trả chuột về ô rỗng đầu tiên trước đó được thì tiện cho thực tế công việc nhập ở Cquan em!)
LTMCustoms
Macro này giúp bạn tìm ra ~ ô bên trái trong hàng & bên trên trong cột chưa nhập liệu trong vùng nhập liệu:
Mã:
Option Explicit[b]
Private Sub Worksheet_Change(ByVal Target As Range)[/b]
 On Error Resume Next
 Dim VungNhap As Range, RSeach As Range, Rng As Range, RNull As Range
 Dim iCot As Integer, LHang As Long
 Set VungNhap = Range("B2:H99") [COLOR="Blue"] '***!!![/COLOR] 
  If Not Intersect(Target, VungNhap) Is Nothing Then
    iCot = Target.Column:                                  LHang = Target.Row
    Set RSeach = Range(Chr(64 + iCot) & 2 & ":" & Chr(64 + iCot) & LHang - 1)
    Set RSeach = Union(RSeach, Range("B" & LHang & ":" & Chr(63 + iCot) & LHang))
  [COLOR="Blue"]  'MsgBox RSeach.Address[/COLOR]  
  For Each Rng In RSeach
        If Rng.Value = "" Then
            If RNull Is Nothing Then
                Set RNull = Rng
            Else
                Set RNull = Union(Rng, RNull)
            End If
        End If
    Next Rng
    If Not RNull Is Nothing Then
        MsgBox RNull.Address, , "Ban Chua Nhap Vo Vung Nay:"
        Set RNull = Nothing
    End If
 End If
 Set VungNhap = Nothing:                 Set RSeach = Nothing [b]
End Sub [/b]
:=\+
 
Lần chỉnh sửa cuối:
Upvote 0
Gởi file "Macro kiểm soát người dùng nhập liệu"

dmtdmtbb đã viết:
- Đọc có hiểu đôi chút nhưng chưa rõ lắm, tốt nhất là nên cho file vd + chú thích. Thân !!!
Các pác xem và chỉ giáo cho em nha !
Cám ơn vì sự quan tâm!
LTMCustoms
 

File đính kèm

Upvote 0
Macro kiểm soát người dùng khi nhập liệu sót!

SA_DQ đã viết:
Macro này giúp bạn tìm ra ~ ô bên trái trong hàng & bên trên trong cột chưa nhập liệu trong vùng nhập liệu:

Em mới xem qua mà thấy hay quá ha! được bác Sa ra tay thì phúc cho nhà em qua ha ! Vụ này có gì các pác cho em lĩnh hội nha ! Em sẽ làm lại cái file cơ quan em đang dùng vì nó chưa trợ giúp tốt lắm cho người nhập liệu và dữ liệu thì ối za , ko ~ thiếu mà còn bị bôc thuốc nữa ! Macro của bác tài thật - CAN THIỆP NGAY KHI BỎ SÓT SỐ LIỆU ! chứ khi thông tin "đi qua rồi" thì chỉ có mà bốc thuốc thôi! - em hy vọng sẽ rất hữu ích cho các cơ quan NN!
Cám ơn các bác nhiều !
LTMCustoms
 
Upvote 0
Macro kiểm soát nhập dữ liệu

OverAC đã viết:
Vụ án này có một lần em từng đụng phải. Căng thẳng. Em nhập liệu qua sheet chứ không phải qua form nên việc kiểm soát rất khó khăn. Cách làm của em như sau:
1. Ghi nhận lại các sheets đã đi qua, kiểm tra nếu sheet đi khỏi là sheet nhập liệu
2. Kiểm tra các trường nhập liệu xem có đầy đủ:
- Kiểm soát thông tin chung trên một chứng từ thì dể: ngày ctừ, tên, diễn giải.
- Kiểm soát thông tin chi tiết mới khó.
3. Kiểm tra tính hợp lý của các trường nhập liệu
4. Quay trở lại nếu không đạt tiêu chuẩn kiểm soát, hoặc yêu cầu lưu nếu chưa lưu chứng từ (nghĩa là xem thử chứng từ cũ được lôi ra có được lưu hay chưa nữa :) khá phiền phức.

Mong các bác bàn thêm.

Nghe bác OverAC phân tích mà em thấy như đi lạc vô "rừng" ấy, mà như nội dung trên thì bác cũng đã vẽ đc bản đồ từ A->Z cho cả "rừng lẫn búi" rồi còn gì ! chắc cũng lắm công phu đây ha! Vấn đề của em chỉ là "búi" thôi! như bác SA_DQ tóm tắt "Macro này giúp bạn tìm ra ~ ô bên trái trong hàng & bên trên trong cột chưa nhập liệu trong vùng nhập liệu". Em sài Macro thử rồi thấy rất hợp với cái em cần, nhưng còn 1 lỗi nhỏ : đáng ra Macro chỉ kiểm soát vùng Range("B2:H99") nhưng lại cả Range("A2:A99") và Range("B1:H9") và đặc biệt là Macro này "hiền quá" chưa "bắt buộc" người nhập liệu chưa được nhập vô ô sau mà trả chuột vô ô trống đã thông báo! Hi hi ... Em xem hoài mà chưa cắt nghĩa hết Code của bác SA_QD! Dân không chuyên mà!
Thấy bác đã kinh qua vụ này em nhờ bác và các bác giúp em thêm !
Em đã gửi File (XNC) rồi, các bác xem và chỉ giáo nhé !
Thanks
 
Upvote 0
. . . Vấn đề của em chỉ là "búi" thôi! như bác SA_DQ tóm tắt "Macro này giúp bạn tìm ra ~ ô bên trái trong hàng & bên trên trong cột chưa nhập liệu trong vùng nhập liệu". Em sài Macro thử rồi thấy rất hợp với cái em cần, nhưng còn 1 lỗi nhỏ : đáng ra Macro chỉ kiểm soát vùng Range("B2:H99") nhưng lại cả Range("A2:A99") và Range("B1:H9") và đặc biệt là Macro này "hiền quá" chưa "bắt buộc" người nhập liệu chưa được nhập vô ô sau mà trả chuột vô ô trống đã thông báo! Hi hi ... Em xem hoài mà chưa cắt nghĩa hết Code của bác SA_QD! Dân không chuyên mà!
Thấy bác đã kinh qua vụ này em nhờ bác và các bác giúp em thêm !
Em đã gửi File (XNC) rồi, các bác xem và chỉ giáo nhé !
Thanks
Vì mình thấy bạn không phải là dân i tờ nên viết ra vậy & bạn chỉnh sửa theo í nha! Còn muốn bỏ cột A thì bạn coi lại chổ cái số 64 đó; Bạn chuyển thành 65 xem sao!;
Còn muốn bắt phải quay về ~ ô chưa nhập liệu thì cũng xong thôi;
Mã:
MsgBox RNull.Address, , "Ban Chua Nhap Vo Vung Nay:"
        Set RNull = Nothing
Thay vì 2 dòng lệnh này bạn dùng thử các dòng sau:
Mã:
      Target.Value=""
      RNull.Select:          Set RNull = Nothing
 
Upvote 0
Web KT

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

Back
Top Bottom