quykh
Chim non
- Tham gia
- 7/9/11
- Bài viết
- 381
- Được thích
- 46
- Giới tính
- Nữ
- Nghề nghiệp
- Công Nhân
Em có file này mong các AC chỉnh lại dùng phương thức Find. Chứ tìm phiếu xuất trong validation cỡ 100 phiếu thì mỏi mắt lắm. Nếu tìm không thấy thì hiện MsgBox" Số Phiếu Này Không Có". Mong các AC giúp đỡ.
Sub Loc_co_dk()
Dim rng As Range
[B8:F1000].ClearContents
With Sheet1
.Range(.[A3], .[H65536].End(3)).AdvancedFilter 2, [C2:C3], [C7:E7]
Set rng = .Range(.[B65536].End(xlUp), .[B4]).Find([C3], , xlFormulas, xlWhole) 'tim 1 gia tri duy nhat' + row an?
If Not rng Is Nothing Then
[C4] = rng.Offset(, -1)
[C5] = rng.Offset(, 1)
[C6] = rng.Offset(, 2)
Range([C8], [C65536].End(3)).Offset(, -1) = [row(a:a)]
[COLOR=#0000ff]Else
MsgBox "khong co Ma này"[/COLOR]
End If
End With
End Sub
Ý của em là không tìm số phiếu trên Validation nữa mà tìm bằng cách gỏ thẳng vào Cell C3 của sheet 2.(Nên sử dụng Find, không nạp bằng Dic vào Validation nữa) Nhưng phải thỏa mãn là Sub_SuaSLX phải chạy được. Mong các AC giúp đỡ.
Bạn làm như file sau (có bảo hành)
Sub Loc_co_dk()
Dim findRng As Range
With Sheet2
Set findRng = Range(Sheet1.[B4], Sheet1.[B65536].End(xlUp)) _
.Find(.[C3], LookIn:=xlValues, LooKat:=xlWhole)
.[B8:F1000,C4,C5,C6].ClearContents
If findRng Is Nothing Then
MsgBox "Khong co so phieu nay!", , "Coi Lai!!!!"
.[C3].ClearContents
Else
Range(Sheet1.[A3], Sheet1.[I65536].End(3)).AdvancedFilter 2, .[C2:C3], .[C7:F7]
.[C4] = findRng.Offset(, -1).Value
.[C5] = findRng.Offset(, 1).Value
.[C6] = findRng.Offset(, 2).Value
Range(.[C8], .[C65536].End(3)).Offset(, -1) = [row(a:a)]
End If
Set findRng = Nothing
End With
End Sub
Cám ơn bạn nhe, cách của bạn cũng hay, nhưng mình có tới mấy trăm phiếu xuất thì tìm trên validation mỏi mắt lắm. chi bằng gỏ thẳng phiếu xuất vào cell C3 luôn để tìm.
mình thay code Loc_co_dk bằng đoạn code này mà sao sub_SLX lại không chạy:
Sub Loc_co_dk()
Dim findRng As Range
With Sheet2
Set findRng = Range(Sheet1.[B4], Sheet1.[B65536].End(xlUp)) _
.Find(.[C3], LookIn:=xlValues, LooKat:=xlWhole)
.[B8:F1000,C4,C5,C6].ClearContents
If findRng Is Nothing Then
MsgBox "Khong co so phieu nay!", , "Coi Lai!!!!"
.[C3].ClearContents
Else
Range(Sheet1.[A3], Sheet1.[I65536].End(3)).AdvancedFilter 2, .[C2:C3], .[C7:F7]
.[C4] = findRng.Offset(, -1).Value
.[C5] = findRng.Offset(, 1).Value
.[C6] = findRng.Offset(, 2).Value
Range(.[C8], .[C65536].End(3)).Offset(, -1) = [row(a:a)]
End If
Set findRng = Nothing
End With
End Sub
Mong các AC giúp đỡ.
Sub Loc_co_dk()
Dim srcRng As Range, findRng As Range, cellAddress As String
With Sheet2
Set srcRng = Sheet1.Range(Sheet1.[B4], Sheet1.[B65536].End(xlUp))
Set findRng = srcRng.Find(.[C3], LookIn:=xlValues, LookAt:=xlWhole)
.[B8:F1000,C4,C5,C6].ClearContents
If findRng Is Nothing Then
MsgBox "Khong co so phieu nay!", , "Coi Lai!!!!"
.[C3].ClearContents
Else
cellAddress = findRng.Address
Do
.[C4] = findRng.Offset(, -1).Value
.[C5] = findRng.Offset(, 1).Value
.[C6] = findRng.Offset(, 2).Value
.[C65536].End(xlUp).Offset(1).Resize(, 3).Value = findRng.Offset(, 4).Resize(, 3).Value
Set findRng = srcRng.FindNext(findRng)
Loop Until findRng.Address = cellAddress
End If
Set findRng = Nothing
Set srcRng = Nothing
End With
End Sub
Em đã thử code loc_co_dk của Anh Siwtom mà cũng không chạy Anh ơi. Ý chính của em là tìm thông tin của số phiếu bằng cách gỏ trực tiếp vào cell C3, khi có thông tin về phiếu đó thì sửa số lượng bằng nút Sửa Số lượng(Sub_SuaSLX)
Em xin lỗi, code loc_co_dk chạy rồi, nhưng code SuaSLX lại không thay đổi số lượng thực xuất đươc. Mong anh Siwtom giúp đỡ.
... mình có tới mấy trăm phiếu xuất thì tìm trên validation mỏi mắt lắm. chi bằng gỏ thẳng phiếu xuất vào cell C3 luôn để tìm.
Theo mình nên làm theo cách này: Nhập dữ liệu bằng Form, khi gõ kí tự đầu tiên của từ cần tìm ví dụ chữ c là nó sẽ hiện lên các phiếu có kí tự đầu tiên là chữ c, ví dụ chuot0106, chuot0107, chuotdong, chuotbach...Bạn nhớ hết cả mấy trăm phiếu xuất hay sao mà gõ thẳng vào cell C3?
Em thì không nhớ hết được cả trăm phiếu xuất đâu. Em tổng hợp lại để còn đối chiếu với người nắm giữ mặt hàng, bởi vậy khi đối chiếu với người giữ hàng thì biết ngay sai ở phiếu nào liền.Nên em sẽ gỏ thẳng vào để chỉnh số lượng xuất.(vì có thể em gỏ lộn số lượng xuất). Mong các Ac chỉ giáo. Với Anh Siwtom, trước đó(Nạp Dic vào Validation) thì sub_SuaSLX chạy được, nhưng sử dụng Loc_co_dk của Anh thì không. Mong Anh giúp đỡ.
Sub Loc_co_dk()
Dim srcRng As Range, findRng As Range, currRng As Range, cellAddress As String
With Sheet2
Set srcRng = Sheet1.Range(Sheet1.[B4], Sheet1.[B65536].End(xlUp))
Set findRng = srcRng.Find(.[C3], LookIn:=xlValues, LookAt:=xlWhole)
.[B8:F1000,C4,C5,C6].ClearContents
If findRng Is Nothing Then
MsgBox "Khong co so phieu nay!", , "Coi Lai!!!!"
.[C3].ClearContents
Else
Set currRng = .[C65536].End(xlUp).Offset(1)
cellAddress = findRng.Address
Do
.[C4] = findRng.Offset(, -1).Value
.[C5] = findRng.Offset(, 1).Value
.[C6] = findRng.Offset(, 2).Value
currRng.Resize(, 3).Value = findRng.Offset(, 4).Resize(, 3).Value
currRng.Offset(, 3).Value = findRng.Row
Set findRng = srcRng.FindNext(findRng)
Set currRng = currRng.Offset(1)
Loop Until findRng.Address = cellAddress
End If
Set findRng = Nothing
Set srcRng = Nothing
Set currRng = Nothing
End With
End Sub
Sub SuaSLX()
Dim TenHH As Range
Application.ScreenUpdating = False
Set TenHH = Sheet2.[C65536].End(xlUp)
Do While TenHH.Row > 7
Sheet1.Range("H" & TenHH.Offset(, 3).Value).Value = TenHH.Offset(, 2).Value
Set TenHH = TenHH.Offset(-1)
Loop
MsgBox ("Sua phieu xong")
SortNgay
Sheet2.[B8:F1000,C3,C4,C5,C6].ClearContents
Application.ScreenUpdating = True
End Sub
Mong Anh Siwtom giải thích dùm em chổ này: Nhập vào ô F7 của sheet2 giá trị "Data Row" Em không biết làm gì hết.
Tôi thêm Data Row vào cột F để ghi nhớ các dòng mà từ đó "SL Thực xuất" đã ra đi