Nhờ các anh(chị) giúp code sửa dữ liệu trên form (1 người xem)

Liên hệ QC

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

mickeybh

Thành viên hoạt động
Tham gia
26/9/13
Bài viết
156
Được thích
33
Gửi các Anh(Chị)!

Em có lập 1 form để nhập dữ liệu (nhiều cột quá nhìn rất rối và đôi khi bị nhầm lẫn nên em lập trên form để và đỡ bị nhầm lẫn). Phần ghi dữ liệu vào tương đối được theo khả năng của em.

Em gửi file đính kèm lên nhờ các anh (chị) giúp em code để sửa dữ liệu đã ghi vào sheet Cập Nhật và khi sửa xong thì ghi đè lại dữ liệu cũ. Muốn sửa người nào thì dựa vào số hồ sơ để gọi ra và sửa lại dữ liệu.

Cảm ơn các anh (chị) nhiều!
 

File đính kèm

Gửi các Anh(Chị)!

Em có lập 1 form để nhập dữ liệu (nhiều cột quá nhìn rất rối và đôi khi bị nhầm lẫn nên em lập trên form để và đỡ bị nhầm lẫn). Phần ghi dữ liệu vào tương đối được theo khả năng của em.

Em gửi file đính kèm lên nhờ các anh (chị) giúp em code để sửa dữ liệu đã ghi vào sheet Cập Nhật và khi sửa xong thì ghi đè lại dữ liệu cũ. Muốn sửa người nào thì dựa vào số hồ sơ để gọi ra và sửa lại dữ liệu.

Cảm ơn các anh (chị) nhiều!
Mã:
Private Sub T_SHS_Change()
Dim SHS As Long
Dim ran As Range
Dim roww As Long
SHS = T_SHS.Value
For Each ran In Worksheets("Capnhat").Range("A3:A6500")
    If ran = SHS Then
        roww = ran.Row
        Exit For
    End If
Next
If roww = 0 Then
    Exit Sub
End If
T_NgayGui.Value = Cells(roww, 2)
T_NgayNhan.Value = Cells(roww, 3)
T_SoPhieu.Value = Cells(roww, 4)
C_NoiGui.Text = Cells(roww, 5)
T_HoSo.Text = Cells(roww, 6)
T_DonVi.Text = Cells(roww, 7)
T_PVCT.Text = Cells(roww, 8)
T_TenNguoiSuuTra.Text = Cells(roww, 9)
T_TenKhac.Text = Cells(roww, 10)
C_GioiTinh.Text = Cells(roww, 11)
T_NamSinh1.Value = Cells(roww, 12)
T_NoiSinh.Text = Cells(roww, 13)
T_QueQuan.Text = Cells(roww, 14)
T_NgheNghiep.Text = Cells(roww, 15)
T_CongTac.Text = Cells(roww, 16)
T_HoKhau.Text = Cells(roww, 17)
T_ChucVu.Text = Cells(roww, 18)
T_VoChong.Text = Cells(roww, 19)
T_NamSinh2.Value = Cells(roww, 20)
T_TenCha.Text = Cells(roww, 21)
T_NamSinh3.Value = Cells(roww, 22)
T_TenMe.Text = Cells(roww, 23)
T_NamSinh4.Value = Cells(roww, 24)
T_QuanHe.Text = Cells(roww, 25)
T_LichSu.Text = Cells(roww, 26)
T_KetQua.Text = Cells(roww, 27)
T_NgayXM.Value = Cells(roww, 28)
End Sub
code này cho sự kiện khi thay đổi số hồ sơ dữ liệu sẽ hiển thị theo viết trong form nhé
Mã:
Private Sub Sua_Click()
Dim SHS As Long
Dim ran As Range
Dim roww As Long
SHS = T_SHS.Value
For Each ran In Worksheets("Capnhat").Range("A3:A6500")
    If ran = SHS Then
        roww = ran.Row
        Exit For
    End If
Next
If roww = 0 Then
    MsgBox "chua chon doi tuong sua du lieu"
    Exit Sub
End If
Cells(roww, 1) = T_SHS.Value
Cells(roww, 2) = T_NgayGui.Value
Cells(roww, 3) = T_NgayNhan.Value
Cells(roww, 4) = T_SoPhieu.Value
Cells(roww, 5) = C_NoiGui.Text
Cells(roww, 6) = T_HoSo.Text
Cells(roww, 7) = T_DonVi.Text
Cells(roww, 8) = T_PVCT.Text
Cells(roww, 9) = T_TenNguoiSuuTra.Text
Cells(roww, 10) = T_TenKhac.Text
Cells(roww, 11) = C_GioiTinh.Text
Cells(roww, 12) = T_NamSinh1.Value
Cells(roww, 13) = T_NoiSinh.Text
Cells(roww, 14) = T_QueQuan.Text
Cells(roww, 15) = T_NgheNghiep.Text
Cells(roww, 16) = T_CongTac.Text
Cells(roww, 17) = T_HoKhau.Text
Cells(roww, 18) = T_ChucVu.Text
Cells(roww, 19) = T_VoChong.Text
Cells(roww, 20) = T_NamSinh2.Value
Cells(roww, 21) = T_TenCha.Text
Cells(roww, 22) = T_NamSinh3.Value
Cells(roww, 23) = T_TenMe.Text
Cells(roww, 24) = T_NamSinh4.Value
Cells(roww, 25) = T_QuanHe.Text
Cells(roww, 26) = T_LichSu.Text
Cells(roww, 27) = T_KetQua.Text
Cells(roww, 28) = T_NgayXM.Value
'-------------------

T_NgayGui.Value = ""
T_NgayNhan.Value = ""
T_SoPhieu.Value = ""
C_NoiGui.Text = ""
T_HoSo.Text = ""
T_DonVi.Text = ""
T_PVCT.Text = ""
T_TenNguoiSuuTra.Text = ""
T_TenKhac.Text = ""
C_GioiTinh.Text = ""
T_NamSinh1.Value = ""
T_NoiSinh.Text = ""
T_QueQuan.Text = ""
T_NgheNghiep.Text = ""
T_CongTac.Text = ""
T_HoKhau.Text = ""
T_ChucVu.Text = ""
T_VoChong.Text = ""
T_TenCha.Text = ""
T_NamSinh3.Value = ""
T_TenMe.Text = ""
T_NamSinh4.Value = ""
T_QuanHe.Text = ""
T_LichSu.Text = ""
T_KetQua.Text = ""
T_NgayXM.Value = ""
T_NgayGui.Value = ""

End Sub
code này cho nút sửa lại dữ liệu nhé ( Sửa xong nhan vào nút sửa) viết cho sự kiện click nhé
Viết code theo dạng của bạn để bạn dễ hiểu
 
Upvote 0
Cảm ơn anh. Anh giúp em code thêm 1 command tạo mới để khi sửa xong có thể ở form này nhập tiếp dữ liệu luôn và 1 command xóa dữ liệu theo số hồ sơ đã chọn, sau khi xóa số hồ sơ trong sheet được đánh số lại từ đầu (ví dụ: em có 4 hồ sơ theo thứ tự 1, 2, 3, 4. Sau khi em xóa hồ sơ thứ 3 thì còn lại 1, 2, 4. Em muốn đánh lại số hồ sơ là 1, 2, 3).
 
Lần chỉnh sửa cuối:
Upvote 0
Cảm ơn anh. Anh giúp em code thêm 1 command tạo mới để khi sửa xong có thể ở form này nhập tiếp dữ liệu luôn và 1 command xóa dữ liệu theo số hồ sơ đã chọn, sau khi xóa số hồ sơ trong sheet được đánh số lại từ đầu (ví dụ: em có 4 hồ sơ theo thứ tự 1, 2, 3, 4. Sau khi em xóa hồ sơ thứ 3 thì còn lại 1, 2, 4. Em muốn đánh lại số hồ sơ là 1, 2, 3).
với yêu cầu này của bạn " màu đỏ" nó đương nhiên đang tồn tại rùi còn gi?????
còn cái sóa kia thì đây nhé
Mã:
Private Sub CommandButton1_Click()
Dim SHS As Long
Dim ran As Range
Dim roww As Long, stt As Long, k As Long
SHS = T_SHS.Value
stt = Application.WorksheetFunction.Max(Range("A3:A5000")) - 1
For Each ran In Worksheets("Capnhat").Range("A3:A6500")
    If ran = SHS Then
        roww = ran.Row
        Exit For
    End If
Next
Rows(roww & ":" & roww).Select
Selection.Delete Shift:=xlUp
Worksheets("Capnhat").Range("A3:A6500").ClearContents
For Each ran In Worksheets("Capnhat").Range("A3:A" & stt + 2)
    k = k + 1
    ran = k
Next
T_NgayGui.Value = ""
T_NgayNhan.Value = ""
T_SoPhieu.Value = ""
C_NoiGui.Text = ""
T_HoSo.Text = ""
T_DonVi.Text = ""
T_PVCT.Text = ""
T_TenNguoiSuuTra.Text = ""
T_TenKhac.Text = ""
C_GioiTinh.Text = ""
T_NamSinh1.Value = ""
T_NoiSinh.Text = ""
T_QueQuan.Text = ""
T_NgheNghiep.Text = ""
T_CongTac.Text = ""
T_HoKhau.Text = ""
T_ChucVu.Text = ""
T_VoChong.Text = ""
T_TenCha.Text = ""
T_NamSinh3.Value = ""
T_TenMe.Text = ""
T_NamSinh4.Value = ""
T_QuanHe.Text = ""
T_LichSu.Text = ""
T_KetQua.Text = ""
T_NgayXM.Value = ""
T_NgayGui.Value = ""
End Sub
tạo command mới chú ý tên comman và gán cho sự kiện này nhé
 
Upvote 0
Cám ơn anh! Cái đoạn màu đỏ em lấy đoạn code dưới để gán vào command tạo mới rồi.
Ở đoạn code T_SHS_Change() anh bẫy lỗi dùm em khi gõ số hồ sơ để sửa dữ liệu không có trong số hồ sơ thì nó thông báo "Số hồ sơ này không tồn tại" và sau đó là xóa rỗng ở textbox T_SHS để gõ lại số khác. Em có thử nhưng nó lại báo lỗi ở đoạn SHS=T_SHS.value nên chẳng biết làm sao nữa.
 
Upvote 0
Cám ơn anh! Cái đoạn màu đỏ em lấy đoạn code dưới để gán vào command tạo mới rồi.
Ở đoạn code T_SHS_Change() anh bẫy lỗi dùm em khi gõ số hồ sơ để sửa dữ liệu không có trong số hồ sơ thì nó thông báo "Số hồ sơ này không tồn tại" và sau đó là xóa rỗng ở textbox T_SHS để gõ lại số khác. Em có thử nhưng nó lại báo lỗi ở đoạn SHS=T_SHS.value nên chẳng biết làm sao nữa.
Chỗ này nó mâu thuẫn với sự kiện khi form load của bạn, vì khi bạn load form bạn mặc định cho SHS = 1 số nằm ngoài SHS đang có của bạn. Vậy khi load form mặc nhiên nó sẽ thông báo y như bạn cần thông báo. Hoặc nếu không thông báo thì trong lúc bạn gõ hồ sơ mà gõ số = SHS hiện tại + thêm 1 sẽ không có thông báo như bạn muốn. Vậy bạn chọn cách nào. Hoặc phải bỏ một trong hai cái
1> hiện SHS +1 trong lúc phom load
2> trong lúc gõ SHS mới = SHS hiện có +1 sẽ không thông báo
<Hoặc bỏ di cái sự kiện change của SHS>
Và cái đó có thực sự cần thiết khi chỉ là một thao tác. còn khi bạn gõ SHS đã tồn tại rồi lại gõ số SHS mới muốn xóa trống các textbox bạn sử dụng lặp lại cái này nhé. Suy nghĩ một chút nhé
Mã:
T_NgayNhan.Value = ""
T_SoPhieu.Value = ""
C_NoiGui.Text = ""
T_HoSo.Text = ""
T_DonVi.Text = ""
T_PVCT.Text = ""
T_TenNguoiSuuTra.Text = ""
T_TenKhac.Text = ""
C_GioiTinh.Text = ""
T_NamSinh1.Value = ""
T_NoiSinh.Text = ""
T_QueQuan.Text = ""
T_NgheNghiep.Text = ""
T_CongTac.Text = ""
T_HoKhau.Text = ""
T_ChucVu.Text = ""
T_VoChong.Text = ""
T_TenCha.Text = ""
T_NamSinh3.Value = ""
T_TenMe.Text = ""
T_NamSinh4.Value = ""
T_QuanHe.Text = ""
T_LichSu.Text = ""
T_KetQua.Text = ""
T_NgayXM.Value = ""
T_NgayGui.Value = ""
Mã:
For Each ran In Worksheets("Capnhat").Range("A3:A6500")
    If ran = SHS Then
        roww = ran.Row
        Exit For
    End If
Next
If roww = 0 Then
    Exit Sub
chú ý kết hợp đoạn này nhé
 
Lần chỉnh sửa cuối:
Upvote 0
với yêu cầu này của bạn " màu đỏ" nó đương nhiên đang tồn tại rùi còn gi?????
còn cái sóa kia thì đây nhé
Mã:
Private Sub CommandButton1_Click()
Dim SHS As Long
Dim ran As Range
Dim roww As Long, stt As Long, k As Long
SHS = T_SHS.Value
stt = Application.WorksheetFunction.Max(Range("A3:A5000")) - 1
For Each ran In Worksheets("Capnhat").Range("A3:A6500")
    If ran = SHS Then
        roww = ran.Row
        Exit For
    End If
Next
Rows(roww & ":" & roww).Select
Selection.Delete Shift:=xlUp
Worksheets("Capnhat").Range("A3:A6500").ClearContents
For Each ran In Worksheets("Capnhat").Range("A3:A" & stt + 2)
    k = k + 1
    ran = k
Next
T_NgayGui.Value = ""
T_NgayNhan.Value = ""
T_SoPhieu.Value = ""
C_NoiGui.Text = ""
T_HoSo.Text = ""
T_DonVi.Text = ""
T_PVCT.Text = ""
T_TenNguoiSuuTra.Text = ""
T_TenKhac.Text = ""
C_GioiTinh.Text = ""
T_NamSinh1.Value = ""
T_NoiSinh.Text = ""
T_QueQuan.Text = ""
T_NgheNghiep.Text = ""
T_CongTac.Text = ""
T_HoKhau.Text = ""
T_ChucVu.Text = ""
T_VoChong.Text = ""
T_TenCha.Text = ""
T_NamSinh3.Value = ""
T_TenMe.Text = ""
T_NamSinh4.Value = ""
T_QuanHe.Text = ""
T_LichSu.Text = ""
T_KetQua.Text = ""
T_NgayXM.Value = ""
T_NgayGui.Value = ""
End Sub
tạo command mới chú ý tên comman và gán cho sự kiện này nhé
Trong đoạn code này em muốn khi click vào cmd xóa thì nó hiển thị kiểu Yes/No, nếu Yes thì xóa, ngược lại thì không.
Anh và các Anh (Chị) giúp em sửa đoạn code này với.
 
Upvote 0
code này cho nút sửa lại dữ liệu nhé ( Sửa xong nhan vào nút sửa) viết cho sự kiện click nhé
Viết code theo dạng của bạn để bạn dễ hiểu
Mã:
Private Sub Sua_Click()
Dim SHS As Long
Dim ran As Range
Dim roww As Long
[COLOR=#ff0000]dim xacnhan as string
xacnhan = msgbox("Chac xoa khong",vbYesNo,"Xac nhan xoa")
if xacnhan = vbyes then[/COLOR]
SHS = T_SHS.Value
For Each ran In Worksheets("Capnhat").Range("A3:A6500")
    If ran = SHS Then
        roww = ran.Row
        Exit For
    End If
Next
If roww = 0 Then
    MsgBox "chua chon doi tuong sua du lieu"
    Exit Sub
End If
Cells(roww, 1) = T_SHS.Value
Cells(roww, 2) = T_NgayGui.Value
Cells(roww, 3) = T_NgayNhan.Value
Cells(roww, 4) = T_SoPhieu.Value
Cells(roww, 5) = C_NoiGui.Text
Cells(roww, 6) = T_HoSo.Text
Cells(roww, 7) = T_DonVi.Text
Cells(roww, 8) = T_PVCT.Text
Cells(roww, 9) = T_TenNguoiSuuTra.Text
Cells(roww, 10) = T_TenKhac.Text
Cells(roww, 11) = C_GioiTinh.Text
Cells(roww, 12) = T_NamSinh1.Value
Cells(roww, 13) = T_NoiSinh.Text
Cells(roww, 14) = T_QueQuan.Text
Cells(roww, 15) = T_NgheNghiep.Text
Cells(roww, 16) = T_CongTac.Text
Cells(roww, 17) = T_HoKhau.Text
Cells(roww, 18) = T_ChucVu.Text
Cells(roww, 19) = T_VoChong.Text
Cells(roww, 20) = T_NamSinh2.Value
Cells(roww, 21) = T_TenCha.Text
Cells(roww, 22) = T_NamSinh3.Value
Cells(roww, 23) = T_TenMe.Text
Cells(roww, 24) = T_NamSinh4.Value
Cells(roww, 25) = T_QuanHe.Text
Cells(roww, 26) = T_LichSu.Text
Cells(roww, 27) = T_KetQua.Text
Cells(roww, 28) = T_NgayXM.Value
'-------------------

T_NgayGui.Value = ""
T_NgayNhan.Value = ""
T_SoPhieu.Value = ""
C_NoiGui.Text = ""
T_HoSo.Text = ""
T_DonVi.Text = ""
T_PVCT.Text = ""
T_TenNguoiSuuTra.Text = ""
T_TenKhac.Text = ""
C_GioiTinh.Text = ""
T_NamSinh1.Value = ""
T_NoiSinh.Text = ""
T_QueQuan.Text = ""
T_NgheNghiep.Text = ""
T_CongTac.Text = ""
T_HoKhau.Text = ""
T_ChucVu.Text = ""
T_VoChong.Text = ""
T_TenCha.Text = ""
T_NamSinh3.Value = ""
T_TenMe.Text = ""
T_NamSinh4.Value = ""
T_QuanHe.Text = ""
T_LichSu.Text = ""
T_KetQua.Text = ""
T_NgayXM.Value = ""
T_NgayGui.Value = ""
[COLOR=#ff0000]end if[/COLOR]

End Sub
 
Upvote 0
Thêm như trên thì khi mình sữa xong click vào nút sửa nó lại hiện lên "Chắc xóa không"?? Cái này sửa mà sao nó lại hiện ra thế anh? Em muốn khi click vào cmd xóa nó hiện ra như thế anh ah.
 
Upvote 0
Thêm như trên thì khi mình sữa xong click vào nút sửa nó lại hiện lên "Chắc xóa không"?? Cái này sửa mà sao nó lại hiện ra thế anh? Em muốn khi click vào cmd xóa nó hiện ra như thế anh ah.
thì ở bài #7 bạn đưa dòng code đó lên và mình chơi ngay vào dòng code đó. Vậy thì bạn thử suy nghĩ chút đưa cái màu đỏ trên code đó vào cái "SÓA" của bạn cần. chút xíu là được mà. Gắng lên!!
 
Upvote 0
Cảm ơn anh, em làm được rồi. (Em đưa đoạn code khác, anh chơi nó vô đoạn khác mà. )
 
Upvote 0
Nếu làm được rồi thì nâng cao lên 1 chút:
Thêm 1 hàm trong Module của Form để xác định tên đối tượng tương ứng với cột
Mã:
Private Function CtrName(ByVal Id As Integer)
Dim ArrName()
ArrName = Array("", "T_SHS", "T_NgayGui", "T_NgayNhan", "T_SoPhieu", "C_NoiGui", "T_HoSo", "T_DonVi", "T_PVCT", _
"T_TenNguoiSuuTra", "T_TenKhac", "C_GioiTinh", "T_NamSinh1", "T_NoiSinh", "T_QueQuan", "T_NgheNghiep", "T_CongTac", _
"T_HoKhau", "T_ChucVu", "T_VoChong", "T_NamSinh2", "T_TenCha", "T_NamSinh3", "T_TenMe", "T_NamSinh4", "T_QuanHe", _
"T_LichSu", "T_KetQua", "T_NgayXM")
CtrName = ArrName(Id)
End Function

Vậy là Code Ghi chỉ gọn như sau:

Mã:
Private Sub Ghi_Click()
Dim nextrow As Integer, i
Sheets("CapNhat").Activate
nextrow = Range("A65000").End(xlUp).Row + 1
If Len(T_NgayGui) = 0 Then
MsgBox "Ngay gui khong duoc de trong", vbCritical, "Thong bao"
Exit Sub
End If
For i = 1 To 28
Cells(nextrow, i) = Me.Controls(CtrName(i))
Me.Controls(CtrName(i)) = ""
Next
End Sub

Kể cả sau đây viết code xoá trắng các Controls:

Mã:
Sub Xoa()
Dim i
For i=1 to 28
Me.Controls(CtrName(i)).Value=""
next
End Sub

Và khi Load dữ liệu lên Form:

Mã:
Sub LoadDT(Byval eR as Long)
Dim i
For i=1 to 28
Me.Controls(CtrName(i)).Value=Sheets("CapNhat").Cells(eR,i)
Next
End Sub

Giờ muốn load dòng 5 chẳng hạn ta có lệnh

Mã:
..................
LoadDT 5
...................
 
Lần chỉnh sửa cuối:
Upvote 0
Cám ơn anh! Cái đoạn màu đỏ em lấy đoạn code dưới để gán vào command tạo mới rồi.
Ở đoạn code T_SHS_Change() anh bẫy lỗi dùm em khi gõ số hồ sơ để sửa dữ liệu không có trong số hồ sơ thì nó thông báo "Số hồ sơ này không tồn tại" và sau đó là xóa rỗng ở textbox T_SHS để gõ lại số khác. Em có thử nhưng nó lại báo lỗi ở đoạn SHS=T_SHS.value nên chẳng biết làm sao nữa.

Bạn chỉ cần thêm dòng này On Error Resume Next phía trên dòng SHS=T_SHS.value là không thông báo lỗi nữa
Chúc bạn may mắn
 
Upvote 0
Trong đoạn code trên nó chỉ cho phép gọi dữ liệu để sửa (mã số hồ sơ) theo dạng số (1,2,3)
Nhưng mã hồ sơ của mình lại có cả
kí tự số, chữ và dấu - (ví dụ: PA0005-VN00089)
thì đoạn code trên mình phải sữa như thế nào, mọi người chỉ mình cách sửa nó với
Private Sub T_SHS_Change()
Dim SHS As Long
Dim ran As Range
Dim roww As Long
SHS = T_SHS.Value
For Each ran In Worksheets("Capnhat").Range("A3:A6500")
If ran = SHS Then
roww = ran.Row
Exit For
End If
Next
If roww = 0 Then
Exit Sub
End If
T_NgayGui.Value = Cells(roww, 2)
T_NgayNhan.Value = Cells(roww, 3)
T_SoPhieu.Value = Cells(roww, 4)
C_NoiGui.Text = Cells(roww, 5)
T_HoSo.Text = Cells(roww, 6)
T_DonVi.Text = Cells(roww, 7)
T_PVCT.Text = Cells(roww, 8)
T_TenNguoiSuuTra.Text = Cells(roww, 9)
T_TenKhac.Text = Cells(roww, 10)
C_GioiTinh.Text = Cells(roww, 11)
T_NamSinh1.Value = Cells(roww, 12)
T_NoiSinh.Text = Cells(roww, 13)
T_QueQuan.Text = Cells(roww, 14)
T_NgheNghiep.Text = Cells(roww, 15)
T_CongTac.Text = Cells(roww, 16)
T_HoKhau.Text = Cells(roww, 17)
T_ChucVu.Text = Cells(roww, 18)
T_VoChong.Text = Cells(roww, 19)
T_NamSinh2.Value = Cells(roww, 20)
T_TenCha.Text = Cells(roww, 21)
T_NamSinh3.Value = Cells(roww, 22)
T_TenMe.Text = Cells(roww, 23)
T_NamSinh4.Value = Cells(roww, 24)
T_QuanHe.Text = Cells(roww, 25)
T_LichSu.Text = Cells(roww, 26)
T_KetQua.Text = Cells(roww, 27)
T_NgayXM.Value = Cells(roww, 28)
End Sub
Code này cho sự kiện khi thay đổi số hồ sơ dữ liệu sẽ hiển thị theo viết trong form

 
Lần chỉnh sửa cuối:
Upvote 0

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

Back
Top Bottom