Xin giúp đỡ Code kiểm tra và copy dữ liệu từ sheet 1 sang sheet 2

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

conan1

Thành viên mới
Tham gia
12/12/14
Bài viết
18
Được thích
6
Xin chào mọi người.
Em có file excel copy dữ liệu từ sheet 1 sang sheet 2. Hiện tại code em đã chạy rồi. Tuy nhiên có 1 vấn đề là:
- Khi em nhập dữ liệu vào dòng 12 đủ dữ liệu. Dòng 13 e nhập thiếu dữ liệu ở cột D (Tên hàng) hoặc cột F (Số lượng) dữ liệu dòng 12 vẫn được ghi vào sheet 2. Và sẽ có thông báo hiện ra để em nhập dữ liệu cho ô dữ liệu còn thiếu đó.
- Sau đó em bấm ghi dữ liệu thì phần mềm sẽ ghi dòng 12 và 13 vào sheet 2.
- Như vậy ở sheet 2 của e sẽ có 3 dòng dữ liệu: 2 dòng đầu sẽ có cùng nội dung như nhau do ở lần bấm Ghi đầu tiên thì dòng 12 đã được ghi vào sheet 2. Khi bấm ghi lần nữa (sau khi đã sửa lại dữ liệu cho đầy đủ) thì dữ liệu sẽ bị trùng

Code em đang viết đây:

Sub CL_Save()
'Khai bao bien
'Dong cuoi data

Dim lr_data As Long
lr_data = Sheet2.Range("D" & Rows.Count).End(xlUp).Row

'Dong cuoi CL

Dim lr_cl As Long
lr_cl1 = Sheet1.Range("D" & Rows.Count).End(xlUp).Row

'Bien so luong

Dim lr_SoLuong As Long
lr_SoLuong = Sheet1.Range("F" & Rows.Count).End(xlUp).Row

'Bien luan cac truong hop khong luu

Dim ThongBao As Long
ThongBao = MsgBox("Save data", vbOKCancel + vbInformation + vbDefaultButton1, "Thong Bao")
Select Case ThongBao
Case vbOK


If lr_cl <= 11 Then
MsgBox "Khong co ten hang hoa"
Exit Sub
ElseIf lr_SoLuong <= 11 Then
MsgBox "Khong co so luong"
Exit Sub
Else
'Lenh luu
Dim i As Long
For i = 12 To lr_cl
If Sheet1.Range("D" & i).Value <> "" And Sheet1.Range("F" & i).Value <> "" And Sheet1.Range("I1").Value <> "" And Sheet1.Range("I2").Value <> "" Then
Sheet2.Range("B" & lr_data + 1 & ":I" & lr_data + 1).Value = _
Sheet1.Range("B" & i & ":I" & i).Value
Sheet2.Range("A" & lr_data + 1).Value = Sheet1.Range("C7").Value
Sheet2.Range("J" & lr_data + 1).Value = Sheet1.Range("I2").Value
Sheet2.Range("K" & lr_data + 1).Value = Sheet1.Range("I1").Value
lr_data = lr_data + 1
Else
MsgBox "Kiem tra Ten hang, So luong, Khu vuc hoac Loai khong duoc de trong"
Exit Sub
End If
Next i
MsgBox "Luu thanh cong"
End If

End Select

End Sub


Nhờ các bác chỉnh lại giúp em code để có thể kiểm tra toàn bộ dữ liệu ở sheet 1 đủ thì mới ghi qua sheet 2. Chứ không phải đang kiểm tra từng dòng như em ạ

Em mới lọ mọ xem youtube được vài bữa nên chưa biết cách làm. Mong các bác thông cảm ạ.

Em có đính kèm file em đang code

Ah có bác nào bonus giúp em cái code sắp xếp dữ liệu lại "Giảm dần" theo ngày sau mỗi lần ghi dữ liệu luôn thì càng tốt ạ.

Em cảm ơn các bác trước!
 

File đính kèm

  • Book1.xlsb
    19.4 KB · Đọc: 5
Xin chào mọi người.
Em có file excel copy dữ liệu từ sheet 1 sang sheet 2. Hiện tại code em đã chạy rồi. Tuy nhiên có 1 vấn đề là:
- Khi em nhập dữ liệu vào dòng 12 đủ dữ liệu. Dòng 13 e nhập thiếu dữ liệu ở cột D (Tên hàng) hoặc cột F (Số lượng) dữ liệu dòng 12 vẫn được ghi vào sheet 2. Và sẽ có thông báo hiện ra để em nhập dữ liệu cho ô dữ liệu còn thiếu đó.
- Sau đó em bấm ghi dữ liệu thì phần mềm sẽ ghi dòng 12 và 13 vào sheet 2.
- Như vậy ở sheet 2 của e sẽ có 3 dòng dữ liệu: 2 dòng đầu sẽ có cùng nội dung như nhau do ở lần bấm Ghi đầu tiên thì dòng 12 đã được ghi vào sheet 2. Khi bấm ghi lần nữa (sau khi đã sửa lại dữ liệu cho đầy đủ) thì dữ liệu sẽ bị trùng

Code em đang viết đây:

Sub CL_Save()
'Khai bao bien
'Dong cuoi data

Dim lr_data As Long
lr_data = Sheet2.Range("D" & Rows.Count).End(xlUp).Row

'Dong cuoi CL

Dim lr_cl As Long
lr_cl1 = Sheet1.Range("D" & Rows.Count).End(xlUp).Row

'Bien so luong

Dim lr_SoLuong As Long
lr_SoLuong = Sheet1.Range("F" & Rows.Count).End(xlUp).Row

'Bien luan cac truong hop khong luu

Dim ThongBao As Long
ThongBao = MsgBox("Save data", vbOKCancel + vbInformation + vbDefaultButton1, "Thong Bao")
Select Case ThongBao
Case vbOK


If lr_cl <= 11 Then
MsgBox "Khong co ten hang hoa"
Exit Sub
ElseIf lr_SoLuong <= 11 Then
MsgBox "Khong co so luong"
Exit Sub
Else
'Lenh luu
Dim i As Long
For i = 12 To lr_cl
If Sheet1.Range("D" & i).Value <> "" And Sheet1.Range("F" & i).Value <> "" And Sheet1.Range("I1").Value <> "" And Sheet1.Range("I2").Value <> "" Then
Sheet2.Range("B" & lr_data + 1 & ":I" & lr_data + 1).Value = _
Sheet1.Range("B" & i & ":I" & i).Value
Sheet2.Range("A" & lr_data + 1).Value = Sheet1.Range("C7").Value
Sheet2.Range("J" & lr_data + 1).Value = Sheet1.Range("I2").Value
Sheet2.Range("K" & lr_data + 1).Value = Sheet1.Range("I1").Value
lr_data = lr_data + 1
Else
MsgBox "Kiem tra Ten hang, So luong, Khu vuc hoac Loai khong duoc de trong"
Exit Sub
End If
Next i
MsgBox "Luu thanh cong"
End If

End Select

End Sub


Nhờ các bác chỉnh lại giúp em code để có thể kiểm tra toàn bộ dữ liệu ở sheet 1 đủ thì mới ghi qua sheet 2. Chứ không phải đang kiểm tra từng dòng như em ạ

Em mới lọ mọ xem youtube được vài bữa nên chưa biết cách làm. Mong các bác thông cảm ạ.

Em có đính kèm file em đang code

Ah có bác nào bonus giúp em cái code sắp xếp dữ liệu lại "Giảm dần" theo ngày sau mỗi lần ghi dữ liệu luôn thì càng tốt ạ.

Em cảm ơn các bác trước!
1/Bạn nên đưa code vào trong thẻ
Mã:
Sub CL_Save()
'Khai bao bien
'Dong cuoi data
    
    Dim lr_data As Long
    lr_data = Sheet2.Range("D" & Rows.Count).End(xlUp).Row

'Dong cuoi CL

    Dim lr_cl As Long
    lr_cl =
để người khác dễ xem hơn.
2/ Nên khai báo các biến 1 cách tường minh (thói quen tốt cho tương lai). Code nên để dòng Option Explicit lên trên đầu để dễ kiểm soát các biến hơn. Ví dụ : bạn khai báo biến lr_cl as long nhưng khi tính dòng cuối thì lại là lr_cll==> tất nhiên là khi chạy sẽ vấp lỗi.
3/ Nên khai báo các biến ngay từ đầu chứ không phải là khai báo rải rác.
4/ Nên đưa dữ liệu vào mảng để phân tích, kết quả thu được cũng đưa vào mảng kết quả để gán 1 lần xuống sheet => tốc độ chạy code sẽ nhanh hơn.
5/"... Ah có bác nào bonus giúp em cái code sắp xếp ...".KHÔNG NÊN dùng ngôn ngữ chát chít, tây bồi, phim chưởng,.... thì sẽ nhận được nhiều sự hỗ trợ tốt hơn.
Đôi điều khuyên bạn thế thôi, tiếp thu được hay không là ở bạn.
Chào.
 
Upvote 0
Mã:
Sub CL_Save()
'Khai bao bien
'Dong cuoi data
    
    Dim lr_data As Long
    lr_data = Sheet2.Range("D" & Rows.Count).End(xlUp).Row

'Dong cuoi CL

    Dim lr_cl As Long
    lr_cl = Sheet1.Range("D" & Rows.Count).End(xlUp).Row

'Bien so luong

    Dim lr_SoLuong As Long
    lr_SoLuong = Sheet1.Range("F" & Rows.Count).End(xlUp).Row

'Bien luan cac truong hop khong luu
    
    Dim ThongBao As Long
    ThongBao = MsgBox("Save data", vbOKCancel + vbInformation + vbDefaultButton1, "Thong Bao")
    Select Case ThongBao
        Case vbOK
        
    
        If lr_cl <= 11 Then
            MsgBox "Khong co ten hang hoa"
            Exit Sub
        ElseIf lr_SoLuong <= 11 Then
            MsgBox "Khong co so luong"
            Exit Sub
        Else
'Lenh luu
            Dim i As Long
            For i = 12 To lr_cl
                If Sheet1.Range("D" & i).Value <> "" And Sheet1.Range("F" & i).Value <> "" And Sheet1.Range("I1").Value <> "" And Sheet1.Range("I2").Value <> "" Then
                    Sheet2.Range("B" & lr_data + 1 & ":I" & lr_data + 1).Value = _
                    Sheet1.Range("B" & i & ":I" & i).Value
                    Sheet2.Range("A" & lr_data + 1).Value = Sheet1.Range("C7").Value
                    Sheet2.Range("J" & lr_data + 1).Value = Sheet1.Range("I2").Value
                    Sheet2.Range("K" & lr_data + 1).Value = Sheet1.Range("I1").Value
                    lr_data = lr_data + 1
                Else
                    MsgBox "Kiem tra Ten hang, So luong, Khu vuc hoac Loai khong duoc de trong"
                    Exit Sub
                End If
            Next i
            MsgBox "Luu thanh cong"
        End If
        
    End Select
    
End Sub

Cảm ơn bạn đã góp ý. Mình có chỉnh lại biến và up lại code.
Code này mình mới search và tìm hiểu trên youtube được vài ngày rồi làm theo hướng dẫn trên đó nên chỉ hiểu sơ sơ thôi chứ ko nắm được, do đó viết lộn xộn chưa ra trật tự.
Cái Option Explicit bạn nhắc bên trên mình cũng chưa biết nó là gì cả, nên ko biết áp dụng vào code như thế nào.
Nếu được bạn có thể hỗ trợ mình viết lại hoặc chỉnh lại đoạn code trên với.
Mục đích mình muốn lưu dữ liệu nhập ở sheet 1 qua sheet 2. Lấy dữ liệu các ô C7, I1, I2 và vùng dữ liệu từ cột B đến cột I, dòng dữ liệu của vùng này lấy từ dòng 12 đến dòng cuối cùng có dữ liệu.
Với điều kiện là các ô I1, I2 không được rỗng. Các ô của cột D (tên hàng) và F (Số lượng) trong vùng dữ liệu nhập phải đồng thời có dữ liệu. Tức là:
- Giả sử mình nhập dữ liệu trong vùng từ B12:I20 chẳng hạn thì
- Nếu ô D và F ở cùng 1 dòng phải có dữ liệu thì mới ghi sang sheet 2 (Tức là nếu có tên hàng thì phải có số lượng và ngược lại có số lượng thì phải có tên hàng mới lưu. Còn không thì thông báo kiểm tra lại dữ liệu
Cảm ơn bạn!
 
Upvote 0
Bạn nên nghiêm túc rút kinh nghiệm.
Hỏi thêm bạn là :
1/nếu nhấn nút nhập thì dòng dữ liệu có đủ các yếu tố (cột D, F) sẽ được nhập vào sheet Data, còn các dòng không thỏa sẽ không được nhập.
2/ Hay là chỉ khi tất cả các dòng có đủ dữ liệu mới nhập vào sh Data còn không thì chỉ hiện lên thông báo " là cột D (hay cột F) chưa nhập đủ dữ liệu.
3/Thêm nữa là cả 2 trường hợp trên khi nhấn nút nhập nhiều lần thì sẽ nhập nhiều lần (nhập trùng) và sheet data.

Trường hợp 1 và 2 bạn chọn thế nào hay còn có ý khác nữa?

Nếu Sh CL là 1 dạng form nhập liệu dạng phiếu nhập (hoặc xuất) hàng ngày, thì tôi đề xuất với bạn thế này:

1/ là nên có số phiếu dạng PXddmmyy_000# ví dụ có thể là PX061024_0001-nếu 1 ngày có đến 1000 phiếu nhập), khi có số phiếu này thì ta có thể kiểm soát được số phiếu nhập vào và tránh tình trạng nhập trùng. Khi nhập trùng (phiếu đã nhập vào rồi lại nhập nữa sẽ hiện lên cảnh báo và không cho nhập)
2/Hoặc là sau khi nhấn nút "nhập" thì code sẽ kiểm tra tất cả các dòng trên phiếu, nếu tất cả các dòng đủ dữ liệu thì mới nhập, nếu không đủ thì hiện thông báo (như trường hợp số 2 nếu trên). Sau khi nhập xong sẽ xóa dữ liệu phiếu (để tránh nhập thêm lần nữa-nhập Trùng)- các công thức ở các ô trên phiếu sẽ được cập nhật khi có dữ liệu nội dung-dữ liệu đến dòng nào công thức có đến dòng ấy.
3/Nếu muốn chuyên nghiệp hơn thì có thể dùng code để truy xuất lại phiếu đã nhập vào Data, sửa lại, xóa, tổng hợp theo nhập hoặc xuất từ ngày ... đến ngày.... tùy thích.
 
Upvote 0
(1) Theo mình thì tạo số phiều không nên là PNddmmyy_000#;
Trong mã phiếu này dư 2 kí tự 'P' & '_'; Nếu là 1 siêu thị thì đó là sẽ lãng phí lớn vì có thể siêu thị xuất mỗi ngày có thể hàng vạn phiếu cho khách hàng.

(2) Thứ tự nên là:
yymmddN chứ không nên ddMMyyN;
(2.1) Còn nếu là mình thì viết 1 hàm UDF để mã hóa 1 trị ngày thành, ví dụ chì là E9AX;
Ở đó E là ký tự chỉ năm 2024; (năm tiếp sẽ là 'F')
9 ấn định phiếu ban hành trong thàng 9
A chỉ ra ngày 10 trong tháng;
X- Loại phiếu xuất; N sẽ là nhập,. . .
. . . .

Chúc các bác vui trong nguyên ngày!
 
Upvote 0
Bạn nên nghiêm túc rút kinh nghiệm.
Hỏi thêm bạn là :
1/nếu nhấn nút nhập thì dòng dữ liệu có đủ các yếu tố (cột D, F) sẽ được nhập vào sheet Data, còn các dòng không thỏa sẽ không được nhập.
2/ Hay là chỉ khi tất cả các dòng có đủ dữ liệu mới nhập vào sh Data còn không thì chỉ hiện lên thông báo " là cột D (hay cột F) chưa nhập đủ dữ liệu.
3/Thêm nữa là cả 2 trường hợp trên khi nhấn nút nhập nhiều lần thì sẽ nhập nhiều lần (nhập trùng) và sheet data.

Trường hợp 1 và 2 bạn chọn thế nào hay còn có ý khác nữa?

Nếu Sh CL là 1 dạng form nhập liệu dạng phiếu nhập (hoặc xuất) hàng ngày, thì tôi đề xuất với bạn thế này:

1/ là nên có số phiếu dạng PXddmmyy_000# ví dụ có thể là PX061024_0001-nếu 1 ngày có đến 1000 phiếu nhập), khi có số phiếu này thì ta có thể kiểm soát được số phiếu nhập vào và tránh tình trạng nhập trùng. Khi nhập trùng (phiếu đã nhập vào rồi lại nhập nữa sẽ hiện lên cảnh báo và không cho nhập)
2/Hoặc là sau khi nhấn nút "nhập" thì code sẽ kiểm tra tất cả các dòng trên phiếu, nếu tất cả các dòng đủ dữ liệu thì mới nhập, nếu không đủ thì hiện thông báo (như trường hợp số 2 nếu trên). Sau khi nhập xong sẽ xóa dữ liệu phiếu (để tránh nhập thêm lần nữa-nhập Trùng)- các công thức ở các ô trên phiếu sẽ được cập nhật khi có dữ liệu nội dung-dữ liệu đến dòng nào công thức có đến dòng ấy.
3/Nếu muốn chuyên nghiệp hơn thì có thể dùng code để truy xuất lại phiếu đã nhập vào Data, sửa lại, xóa, tổng hợp theo nhập hoặc xuất từ ngày ... đến ngày.... tùy thích.

Mã:
Sub NhapmoiCL()
    'Dong cuoi phieu ban hang

    Dim lr_cl As Long
    lr_cl = Sheet1.Range("D" & Rows.Count).End(xlUp).Row
    
    'Khai báo bien thong bao
    
    Dim ThongBao As Long
    ThongBao = MsgBox("Delete Data", vbOKCancel + vbInformation + vbDefaultButton2, "Thong Bao")
    Select Case ThongBao
        Case vbOK
        Sheet3.Range("D12:D" & lr_cl1).ClearContents
        Sheet3.Range("F12:F" & lr_cl1).ClearContents
        Sheet3.Range("C7:C10").ClearContents
        Case vbCancel
        Exit Sub
    End Select
End Sub

Vâng, mình xin trả lời câu hỏi vấn đề của bạn là ở mục 2, tức là:
- Khi tất cả các dòng có đủ dữ liệu ở cột D và F thì mới nhập vào sheet data (tức là ý 2 của bạn). Các cột khác mình sẽ thêm công thức Vlookup vào để có dữ liệu ở cột D và F thì các cột khác sẽ có dữ liệu.

Với đề xuất của bạn mình xin trả lời:
1. Thêm mã phiếu vào ok, mình cũng sơ sót không quản lý mã phiếu này. Nếu được bạn thêm vào giúp mình luôn. Tại vì trong một ngày mình xuất chỉ tầm 40-50 phiếu là nhiều nên không cần mã hóa giống bạn SA_DQ đề xuất bên trên.
2. Mình có làm 1 nút xóa dữ liệu. Sau khi bấm nút nhập xong mình bấm nút xóa để làm trống dữ liệu vào nhập lại cho phiếu mới. Do mình không biết nên thêm code xóa này vào chỗ nào trong code nhập nên mình viết ra. Code mình đình để bạn xem luôn.
3. Phần code truy xuất như bạn nói thì nó đang quá kiến thức của mình nên mình không biết làm phần đó. Bạn giúp được thì mình xin cảm ơn nhiều!
Bài đã được tự động gộp:

(1) Theo mình thì tạo số phiều không nên là PNddmmyy_000#;
Trong mã phiếu này dư 2 kí tự 'P' & '_'; Nếu là 1 siêu thị thì đó là sẽ lãng phí lớn vì có thể siêu thị xuất mỗi ngày có thể hàng vạn phiếu cho khách hàng.

(2) Thứ tự nên là:
yymmddN chứ không nên ddMMyyN;
(2.1) Còn nếu là mình thì viết 1 hàm UDF để mã hóa 1 trị ngày thành, ví dụ chì là E9AX;
Ở đó E là ký tự chỉ năm 2024; (năm tiếp sẽ là 'F')
9 ấn định phiếu ban hành trong thàng 9
A chỉ ra ngày 10 trong tháng;
X- Loại phiếu xuất; N sẽ là nhập,. . .
. . . .

Chúc các bác vui trong nguyên ngày!
Trước tiên mình xin cảm ơn phần góp ý của bạn.
Với phần mã hóa như này sẽ phù hợp với đơn vị xuất dữ liệu nhiều trong ngày.
Do mình chỉ xuất tầm vài chục phiếu/ngày là đã nhiều lắm rồi nên chắc không cần phải mã hóa.
Chủ yếu mình chỉ cần kiểm tra dữ liệu để khi đủ dữ liệu mới ghi sang sheet data. Chứ như code đang có của mình thì giả sử có 5 dòng dữ liệu mà 4 dòng đầu tiên đầy đủ, dòng thứ 5 thiếu dữ liệu ở cột D hoặc F thì nó vẫn ghi 4 dòng đầu sang sheet data, xong hiện thông báo kiểm tra lại dữ liệu ở cột D hoặc F. Lúc này mà mình điền dữ liệu dòng 5 xong bấm ghi thì nó sẽ ghi 5 dòng này sang sheet data. Như vậy bên sheet data sẽ có tất cả 9 dòng dữ liệu (trong đó 8 dòng đầu tiên là dữ liệu bị nhân đôi) chỉ có dòng cuối là không bị nhân đôi. Nên khi không để ý có thể làm cho dữ liệu của mình bị sai. Thống kê sẽ ra bị sai.
 
Lần chỉnh sửa cuối:
Upvote 0
Mã:
Sub NhapmoiCL()
    'Dong cuoi phieu ban hang

    Dim lr_cl As Long
    lr_cl = Sheet1.Range("D" & Rows.Count).End(xlUp).Row
  
    'Khai báo bien thong bao
  
    Dim ThongBao As Long
    ThongBao = MsgBox("Delete Data", vbOKCancel + vbInformation + vbDefaultButton2, "Thong Bao")
    Select Case ThongBao
        Case vbOK
        Sheet3.Range("D12:D" & lr_cl1).ClearContents
        Sheet3.Range("F12:F" & lr_cl1).ClearContents
        Sheet3.Range("C7:C10").ClearContents
        Case vbCancel
        Exit Sub
    End Select
End Sub

Vâng, mình xin trả lời câu hỏi vấn đề của bạn là ở mục 2, tức là:
- Khi tất cả các dòng có đủ dữ liệu ở cột D và F thì mới nhập vào sheet data (tức là ý 2 của bạn). Các cột khác mình sẽ thêm công thức Vlookup vào để có dữ liệu ở cột D và F thì các cột khác sẽ có dữ liệu.

Với đề xuất của bạn mình xin trả lời:
1. Thêm mã phiếu vào ok, mình cũng sơ sót không quản lý mã phiếu này. Nếu được bạn thêm vào giúp mình luôn. Tại vì trong một ngày mình xuất chỉ tầm 40-50 phiếu là nhiều nên không cần mã hóa giống bạn SA_DQ đề xuất bên trên.
2. Mình có làm 1 nút xóa dữ liệu. Sau khi bấm nút nhập xong mình bấm nút xóa để làm trống dữ liệu vào nhập lại cho phiếu mới. Do mình không biết nên thêm code xóa này vào chỗ nào trong code nhập nên mình viết ra. Code mình đình để bạn xem luôn.
Với yêu cầu của bạn, bạn tham khảo code trong file đính kèm.
+Khi nhập vào cột D (tên hàng) thì cột A và cột B sẽ có số TT và ngày tháng năm (ngày hôm nay)
+Khi nhập vào cột F (số lượng) thì cột H (giảm giá) và cột I (thành tiền) sẽ có công thức tính - có nghĩa là nhập đến đâu công thức có đến dòng đó.
+Khi nhấn nút "Ghi Dữ liệu" thì sẽ hiện thông báo "Thiếu dữ liệu" hoặc "Luu thanh cong" đồng thời xóa sạch vùng A12:I... và tên khách hàng cũng được xóa sạch để sẵn sàng nhập phiếu mới.

Tạm thời thế đã, còn yêu cầu 3/ của bạn sau khi bạn chạy thử=> kiểm tra file đã ta mới tính tiếp.

Trong code tôi đã diễn nôm từng dòng code , hy vọng bạn tiêp thu được
 

File đính kèm

  • Conan.xlsb
    25.9 KB · Đọc: 6
Upvote 0
. . . .
Với phần mã hóa như này sẽ phù hợp với đơn vị xuất dữ liệu nhiều trong ngày.
Do mình chỉ xuất tầm vài chục phiếu/ngày là đã nhiều lắm rồi nên chắc không cần phải mã hóa.
. . . .
Cũng có thể giờ bạn chưa thấy cần mã hóa, nhưng sẽ phải thấy cần tạo bộ mã phiếu cho khoa học, dù chỉ dưới 100 phiếu trong 1 ngày;
Vậy bạn định tạo bộ mã phiếu đó như thế nào?
Xin nói trước với bạn:
Mã phiếu tốt là khi ta cho nó tăng dần theo ngày không thôi, mà phải tăng dần theo ngày, tháng & năm
Chí ít loại YYMMDDN0# sẽ cho người dùng quen việc sẽ biết ngay rất nhiều thông tin mà nó chứa đựng.
& điều cuối cùng mình muốn nói rằng: 'Chưa thấy quan tài, chưa đổ lệ!'
 
Upvote 0
Cũng có thể giờ bạn chưa thấy cần mã hóa, nhưng sẽ phải thấy cần tạo bộ mã phiếu cho khoa học, dù chỉ dưới 100 phiếu trong 1 ngày;
...
& điều cuối cùng mình muốn nói rằng: 'Chưa thấy quan tài, chưa đổ lệ!'
2 vị ở đây lâu mà chưa rành luật "bấm một phát".
Hiện tại người ta chỉ cần code bấm một phát để rộng thì giờ chít chát với bồ. Chuyện "khoa học" (mã số phiếu) là chuyện của công ty. Hơi đâu mà phí thời giờ vào đấy.

Kẻ 'Chưa thấy quan tài, chưa đổ lệ!' là sếp của y, người đưa ra cái bảng tính và quy trình cho y làm.

Nhắc nhỏ chút:
Về sau này nếu thấy bí vì cái "quan tài" thì cứ việc lên đây huhu một hồi là có vài vị nhào vào giúp. Bấm một phát là có đủ mã số phiếu.
 
Upvote 0
. . . .
Kẻ 'Chưa thấy quan tài, chưa đổ lệ!' là sếp của y, người đưa ra cái bảng tính và quy trình cho y làm.
. ;. . . .
Mình thấy nhiều cơ quan hay doanh nghiệp thì SẾP thường rất kém biết IT hơn nhân viên của mình;
Sếp thường đâu phải nâng cao trình độ IT, mà phán lính . . phải theo kịp thời đại;

Còn ai định théc méc thì: 'Sếp còn những việc lớn hơn, bao trùm hơn để chú tâm!


:D :D :D
 
Upvote 0
Mình thấy nhiều cơ quan hay doanh nghiệp thì SẾP thường rất kém biết IT hơn nhân viên của mình;
Sếp thường đâu phải nâng cao trình độ IT, mà phán lính . . phải theo kịp thời đại;

Còn ai định théc méc thì: 'Sếp còn những việc lớn hơn, bao trùm hơn để chú tâm!
Bởi vậy, nhân viên cần phải biết lúc nên chứng tỏ rằng mình biết, và có thể giải thích báo cáo
Nhân viên lên đây xin code "bấm một phát" mà cũng trình bày lủng củng thì còn lâu mới đạt đến trình này. Im họng chờ sếp cho chắc ăn.
 
Upvote 0
Với yêu cầu của bạn, bạn tham khảo code trong file đính kèm.
+Khi nhập vào cột D (tên hàng) thì cột A và cột B sẽ có số TT và ngày tháng năm (ngày hôm nay)
+Khi nhập vào cột F (số lượng) thì cột H (giảm giá) và cột I (thành tiền) sẽ có công thức tính - có nghĩa là nhập đến đâu công thức có đến dòng đó.
+Khi nhấn nút "Ghi Dữ liệu" thì sẽ hiện thông báo "Thiếu dữ liệu" hoặc "Luu thanh cong" đồng thời xóa sạch vùng A12:I... và tên khách hàng cũng được xóa sạch để sẵn sàng nhập phiếu mới.

Tạm thời thế đã, còn yêu cầu 3/ của bạn sau khi bạn chạy thử=> kiểm tra file đã ta mới tính tiếp.

Trong code tôi đã diễn nôm từng dòng code , hy vọng bạn tiêp thu được
Cảm ơn bạn nhiều vì sự giúp đỡ của bạn!
Đoạn code bạn viết mình đọc không hiểu, nên 2 ngày nay tìm google với youtube để hiểu, giờ mới rep lại cho bạn. Hiện tại mình đọc cũng hiểu ổn ổn rồi.
Mình có chỉnh lại 1 chút chỗ code xóa dữ liệu sau khi lưu. thêm lưu khu vực và loại vào KQ với mình lại 1 chút code trong sheets("CL")
Nói chung là giờ file hoạt động Ok rồi.
Mình có up kèm file mình chỉnh. Bạn có thể xem thử những chỗ mình chỉnh có đúng không.
Cảm ơn bạn nhiều nhé!
 

File đính kèm

  • Conan.xlsb
    27 KB · Đọc: 5
Lần chỉnh sửa cuối:
Upvote 0
Cũng có thể giờ bạn chưa thấy cần mã hóa, nhưng sẽ phải thấy cần tạo bộ mã phiếu cho khoa học, dù chỉ dưới 100 phiếu trong 1 ngày;
Vậy bạn định tạo bộ mã phiếu đó như thế nào?
Xin nói trước với bạn:
Mã phiếu tốt là khi ta cho nó tăng dần theo ngày không thôi, mà phải tăng dần theo ngày, tháng & năm
Chí ít loại YYMMDDN0# sẽ cho người dùng quen việc sẽ biết ngay rất nhiều thông tin mà nó chứa đựng.
& điều cuối cùng mình muốn nói rằng: 'Chưa thấy quan tài, chưa đổ lệ!'
Thực sự điều bạn nói đang nằm ngoài kiến thức của mình nên mình ko biết sau này sẽ ảnh hưởng như nào.
Nếu được bạn có thể giúp mình phần mã phiếu đó được không?
Mình cảm ơn bạn trước nhé!
 
Upvote 0
Cảm ơn bạn nhiều vì sự giúp đỡ của bạn!
Đoạn code bạn viết mình đọc không hiểu, nên 2 ngày nay tìm google với youtube để hiểu, giờ mới rep lại cho bạn. Hiện tại mình đọc cũng hiểu ổn ổn rồi.
Mình có chỉnh lại 1 chút chỗ code xóa dữ liệu sau khi lưu. thêm lưu khu vực và loại vào KQ với mình lại 1 chút code trong sheets("CL")
Nói chung là giờ file hoạt động Ok rồi.
Mình có up kèm file mình chỉnh. Bạn có thể xem thử những chỗ mình chỉnh có đúng không.
Cảm ơn bạn nhiều nhé!
Theo tôi thì nếu bạn đã có số phiếu rồi thì không nhất thiết cần có thêm cột Loại nữa, bởi vì Trong số phiếu đã có loại rồi, chính ký tự này để phân biệt loại Chứng từ khi làm báo cáo tổng hợp nhập xuất tồn.
Trong file gửi kèm sau đây tôi đã thêm cho bạn Cột số phiếu rồi.
Trong file này có cả code hàm UDF về số phiếu của tôi và cả của anh @SA_DQ. Mỗi loại sẽ có ưu và nhược điểm, tùy bạn lựa chọn.
Sau khi cập nhập dữ liệu vào Sheet Data , hoặc sau khi thay đổi Ô I2(loại Xuất hoặc Nhập) thì số phiếu tự động cộng thêm 1.
 

File đính kèm

  • Conan.xlsb
    31.4 KB · Đọc: 9
Upvote 0
Bạn tạm tham khảo trước con macro này:
PHP:
 Const Alf As String = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
Private Sub Worksheet_Change(ByVal Target As Range)
 If Not Intersect(Target, [B12]) Is Nothing Then
   Dim MaF As String
  
   MaF = Mid$(Alf, Year([B12].Value) - 2010, 1)
   MaF = MaF & Mid(Alf, 1 + Month([B12].Value), 1)
   MaF = MaF & Mid(Alf, 1 + Day([B12].Value), 1) & "X00"
   [I3].Value = MaF
 End If
End Sub
 
Upvote 0
Bởi vậy, nhân viên cần phải biết lúc nên chứng tỏ rằng mình biết, và có thể giải thích báo cáo
Nhân viên lên đây xin code "bấm một phát" mà cũng trình bày lủng củng thì còn lâu mới đạt đến trình này. Im họng chờ sếp cho chắc ăn.
Cái này thì em cũng từng chứng kiến một câu chuyện thực tế nên có cái nhìn khác với bác.
Người nhân viên năng nổ đó đã đưa ra kế hoạch triển khai (khác đôi chút với yêu cầu của sếp nhưng kết quả tương đương) để cải thiện cho một vấn đề nhìn xa trông rộng trong khoảng tương lai 5-10 năm tới. Sếp phán một câu là: "Tôi chỉ cần anh/chị làm tốt cái yêu cầu của tôi ngay tức thì, còn vấn đề ABC phát sinh cần cải thiện ở tầm tương lai 5-10 năm tới thì tôi tự có chuẩn bị phương án sẵn mà không cần anh/chị tư vấn" và người nhân viên đó bị chê tả tơi.
 
Upvote 0
Cái này thì em cũng từng chứng kiến một câu chuyện thực tế nên có cái nhìn khác với bác.
Người nhân viên năng nổ đó đã đưa ra kế hoạch triển khai (khác đôi chút với yêu cầu của sếp nhưng kết quả tương đương) để cải thiện cho một vấn đề nhìn xa trông rộng trong khoảng tương lai 5-10 năm tới. Sếp phán một câu là: "Tôi chỉ cần anh/chị làm tốt cái yêu cầu của tôi ngay tức thì, còn vấn đề ABC phát sinh cần cải thiện ở tầm tương lai 5-10 năm tới thì tôi tự có chuẩn bị phương án sẵn mà không cần anh/chị tư vấn" và người nhân viên đó bị chê tả tơi.
Hầu hết sếp hiện nay đều như vậy. Bởi thế cố lấn sếp là mệt chuyện à.
 
Upvote 0
Cái này thì em cũng từng chứng kiến một câu chuyện thực tế nên có cái nhìn khác với bác.
Người nhân viên năng nổ đó đã đưa ra kế hoạch triển khai (khác đôi chút với yêu cầu của sếp nhưng kết quả tương đương) để cải thiện cho một vấn đề nhìn xa trông rộng trong khoảng tương lai 5-10 năm tới. Sếp phán một câu là: "Tôi chỉ cần anh/chị làm tốt cái yêu cầu của tôi ngay tức thì, còn vấn đề ABC phát sinh cần cải thiện ở tầm tương lai 5-10 năm tới thì tôi tự có chuẩn bị phương án sẵn mà không cần anh/chị tư vấn" và người nhân viên đó bị chê tả tơi.
Điển hình trẻ trâu, ngu mà không biết. Ai bảo nói với sếp trước mặt người khác? Gặp tôi là sếp thì chẳng nhẽ tôi nhận trước mặt mọi người là bạn có tầm nhìn xa hơn tôi à?

Nguyên tắc: vuốt mặt phải nể mũi. Phương án cải tiến không thể bạ đâu nói đó được, mà nó phải làm thế nào cho sếp (và người chung quanh) thấy là cũng "giống" như ý sếp.
 
Upvote 0
Theo tôi thì nếu bạn đã có số phiếu rồi thì không nhất thiết cần có thêm cột Loại nữa, bởi vì Trong số phiếu đã có loại rồi, chính ký tự này để phân biệt loại Chứng từ khi làm báo cáo tổng hợp nhập xuất tồn.
Trong file gửi kèm sau đây tôi đã thêm cho bạn Cột số phiếu rồi.
Trong file này có cả code hàm UDF về số phiếu của tôi và cả của anh @SA_DQ. Mỗi loại sẽ có ưu và nhược điểm, tùy bạn lựa chọn.
Sau khi cập nhập dữ liệu vào Sheet Data , hoặc sau khi thay đổi Ô I2(loại Xuất hoặc Nhập) thì số phiếu tự động cộng thêm 1.
Cảm ơn bạn nhiều nhé. Bữa giờ mình có việc cá nhân nên chưa vào coi và sử dụng. Nay mới vào lại được. Có đọc qua code của bạn thì cũng cũng hiểu tạm tạm. Chỉ có phần Function TT là chưa hiểu hết được.
Còn lại file thì chạy ổn hết rồi.
Tuy nhiên có một chỗ này bị lỗi nhưng vẫn dùng được. Bạn có thể giải thích giùm mình nó bị lỗi gì với không?
Tình trạng là: Nếu mới mở file mà mình xóa hết dữ liệu
- Trường hợp 1: dùng nút delete để xóa dữ liệu bên sheet data thì 2 ô mã phiếu bên sheet CL sẽ báo lỗi #Value
- Trường hợp 2: dùng chức năng xóa dòng dữ liệu (xóa hết) thì 2 ô mã phiếu bên sheet CL cũng sẽ báo lỗi #Value
- Trường hợp 3: mình ghi dữ liệu mới vào trước. Sau đó dùng nút delete để xóa cá dòng dữ liệu cũ thì 2 ô mã phiếu bên sheet CL cũng sẽ báo lỗi #Value
- Trường hợp 4: Mình ghi dữ liệu mới vào trước. Sau đó dùng chức năng xóa dòng để xóa các dữ liệu mẫu đang có thì chạy bình thường
Tóm lại là bên sheet data phải có dữ liệu trước thì 2 ô mã phiếu bên sheet CL mới không báo lỗi
Hiện tại mình thêm dữ liệu vào rồi mới xóa mấy dòng dữ liệu test. Nên là đang dùng ổn rồi. Nếu được bạn giải thích giúp mình lỗi này là do vấn đề ở đâu được không? Cảm ơn bạn nhiều
 
Upvote 0
Web KT

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

Back
Top Bottom