Nhật Anh 9x
Thành viên chính thức
- Tham gia
- 21/10/22
- Bài viết
- 72
- Được thích
- 3
Chào anh chị
Em có một vấn đề như thế này cần các anh chị giúp đỡ ạ!
Em có một thẻ kho để kiểm tra tồn có bị âm không, Em chạy vòng lặp, lặp qua từng mã NPL, trong quá trình chạy em muốn khi phát hiện ra một mã
NPL nào đó tồn bị âm sẽ được khi lại, và khi chạy xong sẽ hiện ra một thông báo ví dụ như :" BẠN CÓ 5 mã NPL bị âm thời điểm là những mã NPL03 , NPL05, NPL06, NPL08,NPL20". Hiện tại code em đã chạy được dữ liệu cho từng mã NPL chỉ còn ghi những mã âm, và hiển thị thông báo như ví dụ là em chưa làm được ạ
Vậy anh chị nào đã gặp trường hợp này hoặc biết thì xin chỉ dạy cho em với ạ
Sub test3()
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Dim wb As Workbook
Set wb = ThisWorkbook
Dim sh1 As Worksheet, sh2 As Worksheet, sh3 As Worksheet
Dim lr1 As Long, lr3 As Long
Dim i As Long, j As Long, z As Long, k As Long
Dim coll As Collection
Set coll = New Collection
Dim arr_N As Variant
Dim arr_D As Variant
Dim t
t = Timer()
Set sh1 = wb.Worksheets("Nhap-Xuat")
Set sh2 = wb.Worksheets("Thekho")
Set sh3 = wb.Worksheets("MANPL")
lr1 = sh1.Range("D" & Rows.Count).End(xlUp).Row
lr3 = sh3.Range("B" & Rows.Count).End(xlUp).Row
'lặp qua từng mã NPL trong sheet MANPL
For z = 2 To lr3
sh2.Range("F7") = sh3.Range("B" & z).Value
arr_N = sh1.Range("A12:U" & lr1).Value
tdk = sh2.Range("J14").Value
ReDim arr_D(1 To UBound(arr_N, 1), 1 To 10)
j = 0
For i = 1 To UBound(arr_N, 1)
If arr_N(i, 15) <> "" And arr_N(i, 15) = sh2.Range("F7") Then
j = j + 1
On Error Resume Next
coll.Add j, arr_N(i, 15)
If arr_N(i, 2) = "N" Then
arr_D(j, 1) = arr_N(i, 1) 'so phieu
arr_D(j, 2) = arr_N(i, 7) 'ngay phieu
arr_D(j, 3) = arr_N(i, 6) 'dien giai
arr_D(j, 6) = arr_N(i, 18) 'so luong nhap
arr_D(j, 8) = 0 'so luong xuat
ElseIf arr_N(i, 2) = "XS" Or arr_N(i, 2) = "XT" Then
coll.Add j, arr_N(i, 15)
arr_D(j, 1) = arr_N(i, 1) 'so phieu
arr_D(j, 2) = arr_N(i, 7) 'ngay phieu
arr_D(j, 3) = arr_N(i, 6) 'dien giai
arr_D(j, 6) = 0 'so luong nhap
arr_D(j, 8) = arr_N(i, 21) 'so luong nhap
End If
On Error GoTo 0
End If
Next i
If j > 0 Then
sh2.Range("A14:L2556").AutoFilter
sh2.Range("A15").Resize(2541, 10).ClearContents
sh2.Range("A15").Resize(j, 10) = arr_D
End If
'tính giá trị cho cột tồn cuối kỳ
For i = 15 To j + 14
sh2.Range("J" & i).Value = sh2.Range("J" & i - 1) + sh2.Range("F" & i) - sh2.Range("H" & i)
'Khu vực muốn ghi những mã nguyên phụ liệu có âm thời điểm ở cột tồn cuối kỳ
Next i
sh2.Range("A14:L2556").Select
Selection.AutoFilter
ActiveSheet.Range("A14:L2556").AutoFilter Field:=10, Criteria1:="<>"
Next z
'Kết quả trả về sau khi lặp qua tất cả các mã nguyên phụ liệu
Application.ScreenUpdating = True
Application.DisplayAlerts = True
MsgBox Timer() - t
End Sub
Em có một vấn đề như thế này cần các anh chị giúp đỡ ạ!
Em có một thẻ kho để kiểm tra tồn có bị âm không, Em chạy vòng lặp, lặp qua từng mã NPL, trong quá trình chạy em muốn khi phát hiện ra một mã
NPL nào đó tồn bị âm sẽ được khi lại, và khi chạy xong sẽ hiện ra một thông báo ví dụ như :" BẠN CÓ 5 mã NPL bị âm thời điểm là những mã NPL03 , NPL05, NPL06, NPL08,NPL20". Hiện tại code em đã chạy được dữ liệu cho từng mã NPL chỉ còn ghi những mã âm, và hiển thị thông báo như ví dụ là em chưa làm được ạ
Vậy anh chị nào đã gặp trường hợp này hoặc biết thì xin chỉ dạy cho em với ạ
Sub test3()
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Dim wb As Workbook
Set wb = ThisWorkbook
Dim sh1 As Worksheet, sh2 As Worksheet, sh3 As Worksheet
Dim lr1 As Long, lr3 As Long
Dim i As Long, j As Long, z As Long, k As Long
Dim coll As Collection
Set coll = New Collection
Dim arr_N As Variant
Dim arr_D As Variant
Dim t
t = Timer()
Set sh1 = wb.Worksheets("Nhap-Xuat")
Set sh2 = wb.Worksheets("Thekho")
Set sh3 = wb.Worksheets("MANPL")
lr1 = sh1.Range("D" & Rows.Count).End(xlUp).Row
lr3 = sh3.Range("B" & Rows.Count).End(xlUp).Row
'lặp qua từng mã NPL trong sheet MANPL
For z = 2 To lr3
sh2.Range("F7") = sh3.Range("B" & z).Value
arr_N = sh1.Range("A12:U" & lr1).Value
tdk = sh2.Range("J14").Value
ReDim arr_D(1 To UBound(arr_N, 1), 1 To 10)
j = 0
For i = 1 To UBound(arr_N, 1)
If arr_N(i, 15) <> "" And arr_N(i, 15) = sh2.Range("F7") Then
j = j + 1
On Error Resume Next
coll.Add j, arr_N(i, 15)
If arr_N(i, 2) = "N" Then
arr_D(j, 1) = arr_N(i, 1) 'so phieu
arr_D(j, 2) = arr_N(i, 7) 'ngay phieu
arr_D(j, 3) = arr_N(i, 6) 'dien giai
arr_D(j, 6) = arr_N(i, 18) 'so luong nhap
arr_D(j, 8) = 0 'so luong xuat
ElseIf arr_N(i, 2) = "XS" Or arr_N(i, 2) = "XT" Then
coll.Add j, arr_N(i, 15)
arr_D(j, 1) = arr_N(i, 1) 'so phieu
arr_D(j, 2) = arr_N(i, 7) 'ngay phieu
arr_D(j, 3) = arr_N(i, 6) 'dien giai
arr_D(j, 6) = 0 'so luong nhap
arr_D(j, 8) = arr_N(i, 21) 'so luong nhap
End If
On Error GoTo 0
End If
Next i
If j > 0 Then
sh2.Range("A14:L2556").AutoFilter
sh2.Range("A15").Resize(2541, 10).ClearContents
sh2.Range("A15").Resize(j, 10) = arr_D
End If
'tính giá trị cho cột tồn cuối kỳ
For i = 15 To j + 14
sh2.Range("J" & i).Value = sh2.Range("J" & i - 1) + sh2.Range("F" & i) - sh2.Range("H" & i)
'Khu vực muốn ghi những mã nguyên phụ liệu có âm thời điểm ở cột tồn cuối kỳ
Next i
sh2.Range("A14:L2556").Select
Selection.AutoFilter
ActiveSheet.Range("A14:L2556").AutoFilter Field:=10, Criteria1:="<>"
Next z
'Kết quả trả về sau khi lặp qua tất cả các mã nguyên phụ liệu
Application.ScreenUpdating = True
Application.DisplayAlerts = True
MsgBox Timer() - t
End Sub