Lệnh ghi đè dữ liệu cũ

Liên hệ QC
Tôi tuân thủ nội quy khi đăng bài

vu mfu

Thành viên mới
Tham gia
25/9/09
Bài viết
22
Được thích
3
Donate (Momo)
Donate
Giới tính
Nam
Nghề nghiệp
Kế toán
File mình gửi chức nắng như sau:
Ở sheet Voucher: mỗi lần nhập chứng từ xong, ấn Save là dữ liệu sẽ được gán vào dòng cuối cùng ở sheet List
Mình muốn tạo 1 chức năng sửa chứng từ, gọi lại toàn bộ giao dịch theo số chứng từ (cột A trong sheet List), sau đó sửa thông tin, rồi ghi đè lên đúng số chứng từ muốn sửa trong sheet List
Chức năng gọi lại chứng từ thì mình làm được ở sheet "Edit" rồi, nhưng để ghi đè dữ liệu vào sheet List đúng cái dòng chứa số chứng từ (cột A) mình ko nghỉ ra cách
Có cao thủ nào có cách làm hay giúp mình với
 

File đính kèm

  • FY23-06_VIMFU.XLSB
    254 KB · Đọc: 14
Bạn hình như đang thiếu 1 cột chứa mã duy nhất cho các dòng dữ liệu; & đáng tiếc là tất cả các trang đều đang thiếu cột như vậy;
 
Upvote 0
Bạn hình như đang thiếu 1 cột chứa mã duy nhất cho các dòng dữ liệu; & đáng tiếc là tất cả các trang đều đang thiếu cột như vậy;
Hoặc có thể dùng số Thứ tự để đánh dấu từng cái 1. rồi mới biết nó đang ở dòng nào mà trả về chỗ cũ chứ phải không chú?
 
Upvote 0
Thì cứ định vị stt ở sheet edit là như nào thì dò đúng stt đó ở sheet list mà dán vào thôi mà bạn
Thực ra file này mình tìm từng đoạn code trên mạng, chắp vá các lệnh rồi ra sp, chứ mình ko tự viết code được. Nên bạn có thể giúp mình cái code để dán đúng vị trí ko
 
Upvote 0
Vấn đề của chủ bài đăng không phải là chuyện viết Code giải quyết vấn đề tìm & thay thế hay ghi đè, mà là thiết kế lại các trang tính cho chuẩn;
Như 1 csdl (cơ sở dữ liệu) nhân sự phải có Mã duy nhất (cho từng nhân sự)
Như từng loại hàng hóa cũng phải có mã duy nhất (cho loại hàng đó)
Khi vô siêu thị mua hàng hóa, bạn sẽ phải thấy mỗi mặt hàng bất kỳ đều có mã; Có vậy mới biết cần bổ sung hàng gì trong tuần; món hàng nào bán chạy hay chậm để điều chỉnh, . . . .
Muốn có những số liệu đó thì không thể tránh khỏi mã HH
Còn bây chừ ai mà viết Code cho bạn là đang định hại bạn trong tương lai mà thôi!
 
Upvote 0
Vấn đề của chủ bài đăng không phải là chuyện viết Code giải quyết vấn đề tìm & thay thế hay ghi đè, mà là thiết kế lại các trang tính cho chuẩn;
Như 1 csdl (cơ sở dữ liệu) nhân sự phải có Mã duy nhất (cho từng nhân sự)
Như từng loại hàng hóa cũng phải có mã duy nhất (cho loại hàng đó)
Khi vô siêu thị mua hàng hóa, bạn sẽ phải thấy mỗi mặt hàng bất kỳ đều có mã; Có vậy mới biết cần bổ sung hàng gì trong tuần; món hàng nào bán chạy hay chậm để điều chỉnh, . . . .
Muốn có những số liệu đó thì không thể tránh khỏi mã HH
Còn bây chừ ai mà viết Code cho bạn là đang định hại bạn trong tương lai mà thôi!
Đến người ta còn phải có CCCD nữa mà bác hả?
 
Upvote 0
Nhưng CCCD có 12 con số vô tri giác; Ví dụ bộ mã này có tính tương tác cao giữa người có mã & nhà quản lý nhân sự nè:

STTMã NVHọ và tênNgày sinh. . .
1DFD00Dương Đức Dũng1/13/1960
2DFP00Dương Đình Phú2/17/1961
3FJD00Đỗ Dũng3/25/1962
4LFH00Lê Văn Đình Hùng4/30/1963
5LXT00Lê Xuân Tùng6/4/1964
6NAT00Nguyễn Anh Tuấn7/10/1965
7NDL00Nguyễn Duy Long8/15/1966
8NVA00Nguyễn Văn Anh9/20/1967
9NVA01Nguyễn Văn Ánh10/25/1968
10NXQ00Nguyễn Xuân Quang11/30/1969
11NXT00Nguyễn Xuân Tung1/5/1971
12TAP00Trần Anh Phu2/10/1972
13TAP01Từ Ái Phương3/17/1973
 
Upvote 0
Nhưng CCCD có 12 con số vô tri giác; Ví dụ bộ mã này có tính tương tác cao giữa người có mã & nhà quản lý nhân sự nè:

STTMã NVHọ và tênNgày sinh. . .
1DFD00Dương Đức Dũng1/13/1960
2DFP00Dương Đình Phú2/17/1961
3FJD00Đỗ Dũng3/25/1962
4LFH00Lê Văn Đình Hùng4/30/1963
5LXT00Lê Xuân Tùng6/4/1964
6NAT00Nguyễn Anh Tuấn7/10/1965
7NDL00Nguyễn Duy Long8/15/1966
8NVA00Nguyễn Văn Anh9/20/1967
9NVA01Nguyễn Văn Ánh10/25/1968
10NXQ00Nguyễn Xuân Quang11/30/1969
11NXT00Nguyễn Xuân Tung1/5/1971
12TAP00Trần Anh Phu2/10/1972
13TAP01Từ Ái Phương3/17/1973
Cái anh Dương Đức Dũng sao không phải là DDD mà lại là DFD hả bác?
quy luật "rời rạc" chăng?
 
Upvote 0
Vây để giảm trùng mã tối đa giữa 2 từ 'Đ' & 'D' thôi;
Toàn bộ 'Đ' trong họ tên đều chuyển sang 'F' (Thường người Việt rất hiếm có trong họ & tên từ F)
 
Upvote 0
File mình gửi chức nắng như sau:
Ở sheet Voucher: mỗi lần nhập chứng từ xong, ấn Save là dữ liệu sẽ được gán vào dòng cuối cùng ở sheet List
Mình muốn tạo 1 chức năng sửa chứng từ, gọi lại toàn bộ giao dịch theo số chứng từ (cột A trong sheet List), sau đó sửa thông tin, rồi ghi đè lên đúng số chứng từ muốn sửa trong sheet List
Chức năng gọi lại chứng từ thì mình làm được ở sheet "Edit" rồi, nhưng để ghi đè dữ liệu vào sheet List đúng cái dòng chứa số chứng từ (cột A) mình ko nghỉ ra cách
Có cao thủ nào có cách làm hay giúp mình với
Các cách thức cao siêu khác thì tôi không biết. Tôi thì làm thế này trong file làm việc của tôi là : khi gọi lại (tái hiện lại DL của chứng từ số...) ==> sửa, thay đổi dữ liệu trong đó (có thể thêm, bớt dòng), nhấn nút " SỬA" thì code Xóa dữ liệu của chứng từ ấy đã ghi trong Data===> gán chứng từ mói được sửa vào dòng cuối của data,===> dùng code sort lại (thường là điều kiện sort theo cột ngày của Sh Data)
 
Upvote 0
Khi sửa sẽ có chuyện chỉ sửa số, sửa tên, ... cũng sẽ có trường hợp thêm dòng, bớt dòng. Vậy ghi đè là chuyện không nên.
 
Upvote 0
Để tìm & sửa chứng từ thì theo mình chí ít phải có thiết kế CSDL như sau:
STTNgày CTSố CTMã NCC/Mã HHTênĐVTSố lượngĐGTT
1
1/13/2023​
31DN0001NVT00LT_001Gạo tẻKg
189​
21000​
2
1/13/2023​
31DN0001NVT00NL_002GazBình
8​
400000​
3
1/13/2023​
31DN0001NVT00Ca_003Cá thuKg
15​
70000​
4
2/12/2023​
32CN0001NTV00RCQ003Bắp cảiKg
12.8​
28000​
5
2/12/2023​
32CN0001NTV00TF_000Thịt lợn nạcKg
25.5​
95000​
6
2/12/2023​
32CN0001NTV00TF_005Thịt bòKg
5.5​
110000​
7
3/11/2023​
33BX000000DTQRCQ003Bắp cảiKg
11.2​
28500​

Quan trọng nhất là tạo ra số chứng từ trong ngày 1 cách nhất quán;
Trong hình con số 3 chỉ năm CT, Con số tiếp theo chỉ tháng CT; Tháng 10 là 'A', . . . .
Con số thứ 3 chỉ ngày ; Ký tự thứ 4 chỉ hướng giao dịch, Các con số sau là số tăng dần của chứng từ theo từng ngày;
Có vậy muốn thêm/bớt dòng cho 1 chứng từ hay sửa nội dung ta cần tìm ra các dòng của chứng từ đó; Sau khi sửa thì chép đè hay xóa hết những dòng củ thay mới là tùy
Theo mình trước hết phải coi trọng khâu thiết kế CSDL này cái đã; Nếu thấy khó thì đưa ý tưởng lên GPE giúp!
 
Upvote 0
@Chủ bài đăng:
Bạn xem file: Mình đã thêm cột mã ở trang 'List'
 

File đính kèm

  • VatTu.rar
    455.1 KB · Đọc: 2
Upvote 0
Các cách thức cao siêu khác thì tôi không biết. Tôi thì làm thế này trong file làm việc của tôi là : khi gọi lại (tái hiện lại DL của chứng từ số...) ==> sửa, thay đổi dữ liệu trong đó (có thể thêm, bớt dòng), nhấn nút " SỬA" thì code Xóa dữ liệu của chứng từ ấy đã ghi trong Data===> gán chứng từ mói được sửa vào dòng cuối của data,===> dùng code sort lại (thường là điều kiện sort theo cột ngày của Sh Data)
bạn cho mình xin Code xóa dữ liệu của chứng từ đã ghi được ko
 
Upvote 0
bạn cho mình xin Code xóa dữ liệu của chứng từ đã ghi được ko

Thích thì chiều. Bạn chủ thớt tham khảo và sửa lại cho phù hợp với bạn.
Phần code này chỉ là 1 phần nhỏ trong 1 workbook có rất nhiều modul
Code này tôi viết đã lâu rồi, tuy nhiên đến nay sử dụng vẫn chạy mượt dù rằng Dũ liệu đã được hàng ngày nhập thêm vào rất nhiều dòng (khoảng độ từ 40-60 dòng/ngày và 1 ngày chỉ có 1 phiếu NX) đến nay đã có gần 40k dòng (dữ liệu 2 năm làm mới một lần)
Mã:
Option Explicit
Option Base 1

Sub NHAPDL()
Dim i As Long
Dim t
i = Application.WorksheetFunction.CountIf(Sheets("TH").Range("A5:A65536"), Sheets("Nhap xuat").Range("M1"))
If i <> 0 Then
 t = MsgBox(" NGÀY NÀY ĐA CÓ DU LIÊU - BAN MUÔN SUA KHÔNG?" & Chr(10) & "NHÂN YES ĐÊ TIÊP TUC NHÂP" & Chr(10) & "NHÂN NO ĐÊ BO QUA", vbYesNo, "THÔNG BÁO")
    If t = vbYes Then
            Call KTRA ' kiêm tra tinh hop ly c?a du lieu nh?p vào
        If Sheets("Nhap xuat").[A1] = "X" Then
            MsgBox " Du lieu Nhap xuât chua đung-Hay kiêm tra lai": Exit Sub
        Else
            Call XoaDLcu
            Call Nhap
            Call XEP_A_Z
        End If
    End If
Else
 t = MsgBox(" NGÀY NÀY CHUA CÓ DU LIÊU - BAN MUÔN NHAP KHÔNG?" & Chr(10) & "NHÂN YES ĐÊ TIÊP TUC NHÂP" & Chr(10) & "NHÂN NO ĐÊ BO QUA", vbYesNo, "THÔNG BÁO")
    If t = vbYes Then
        Call KTRA
        If Sheet5.[A1] = "X" Then
                 MsgBox "CANH BAO: DU LIEU CHUA DUOC NHAP DO CHUA DUNG - HAY KIÊM TRA VÀ SUA LAI !?!", vbCritical
            Exit Sub
        Else
            Call Nhap
            Call XEP_A_Z
        End If
    End If
End If
MsgBox "ĐA XONG"

End Sub

Sub XoaDLcu()
 
 Dim D1 As Long
 Dim D2 As Long
    With Application.WorksheetFunction
        D1 = .Match(Sheets("Nhap xuat").Range("M1"), Sheets("TH").Range("A:A"), 0)
        D2 = .Match(Sheets("Nhap xuat").Range("M1"), Sheets("TH").Range("A:A"), 1)
    End With
        Sheets("TH").Activate
        Sheets("TH").Range(Cells(D1, 1), Cells(D2, 256)).ClearContents
        Sheets("Nhap xuat").Activate
 End Sub

Sub Nhap()

 Dim Arr(), KQ(), Ngay As Date
 Dim i&, k&, m&, cot&, j&, t&, S&, N&, d&
 Dim Ws As Worksheet, Sh As Worksheet
 
Application.Calculation = xlCalculationAutomatic
Application.EnableEvents = False

Set Sh = Sheets("Nhap xuat")
    Ngay = Sh.Range("M1")
     k = Sh.Range("A62").End(xlUp).Row
     Arr = Sh.Range("B6:AL" & k).Value
Set Ws = Sheets("TH")
cot = Ws.Range("IV1").End(xlToLeft).Column
 ReDim KQ(1 To UBound(Arr), 1 To cot + 20)
 For i = 1 To UBound(Arr)
    t = t + 1: KQ(t, 1) = CDate(Ngay)
        For j = 1 To 20  ' cot
            KQ(t, j + 1) = Arr(i, j)
        Next j
        For S = 24 To 29
            KQ(t, S - 1) = Arr(i, S)
        Next S
            KQ(t, 21) = Arr(i, 34)
            KQ(t, 22) = Arr(i, 35)
 Next i
 If t Then
    d = Ws.Range("A" & Rows.Count).End(xlUp).Row + 1
        Ws.Range("A" & d).Resize(100, 150).ClearContents
        Ws.Range("A" & d).Resize(t, 28) = KQ
End If

Application.Calculation = xlCalculationAutomatic
Application.EnableEvents = True
End Sub
Sub XEP_A_Z()
Application.DisplayAlerts = False
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
On Error GoTo Thoat

Sheets("TH").Activate
    Range("A5:IV65536").Select
    ActiveWorkbook.Worksheets("TH").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("TH").Sort.SortFields.Add Key:=Range("A5"), SortOn _
        :=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortTextAsNumbers
    With ActiveWorkbook.Worksheets("TH").Sort
        .SetRange Range("A5:IV65536")
        .Apply
    End With
Thoat:
Sheets("Nhap xuat").Activate
Application.DisplayAlerts = True
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
End Sub
Cũng định sửa lại code cho nó ngắn gọn hơn , nhưng mà lại thôi.
Bạn chủ thớt tham khảo
Mọi người ghé qua xem, xin đừng ném đá - tôi đã nhận đủ để xây nhà rồi
 
Upvote 0
Yêu cầu của thớt, có lẽ thớt cho là nhỏ nhưng nó không phải là nhỏ.
Bảng tính chỉ dùng truy cập thì dễ. Nhưng chỉnh sửa, thêm thắt dữ liệu thì luôn luôn có nhiều vấn đề mà phai dân giàu kinh nghiệm mới biết hết.

Nếu thớt muốn tiến hành thì phải qua nhiều giai đoạn "chưa đủ, cần thêm. Kẹt chỗ này, cần sửa,..."

Bạn nào muốn nhào vào thì phải chuẩn bị khả năng viết nhiều subs/functions gọi tùm lum. Một cục Sub thì khả năng mấy cái biến và blocks IF-THEN=ELSE theo dõi khùng luôn.
 
Upvote 0
Web KT

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

Back
Top Bottom