Thực ra 2 macro này lúc đầu chỉ là 1 macro:Cách viết Macro của Bác làm sao mà kiểm tra nó chạy như thế nào nhỉ? Bác có bài nào giải thích về cách viết ở sheet In mà ra kết quả như vậy? chỉ giáo cho em nghiên cứu với.
Option Explicit
Dim Sh As Worksheet, Rng As Range, sRng As Range
Dim MyAdd As String
Private Sub Worksheet_Change(ByVal Target As Range)
Dim ChuHo As Boolean, Quay As Boolean
Set Sh = Sheets("PhatSinh")
If Not Intersect(Target, [b4]) Is Nothing Then 'Chu Ho'
[b7].Resize(14, 7).ClearContents
If [b4].Value = "" Then Exit Sub
Set Rng = Sh.Range(Sh.[B5], Sh.[B65500].End(xlUp))
If [g4].Value = "" Then Quay = True
Set sRng = Rng.Find([b4].Value, , xlFormulas, xlWhole)
2 If Not sRng Is Nothing Then GPE_Copy [g4], Quay
ElseIf Not Intersect(Target, [g4]) Is Nothing Then 'Quày'
[b7].Resize(14, 7).ClearContents
If [g4].Value = "" Then Exit Sub
Set Rng = Sh.Range(Sh.[A5], Sh.[A65500].End(xlUp))
If [b4].Value = "" Then ChuHo = True
Set sRng = Rng.Find([g4].Value, , xlFormulas, xlWhole)
3 If Not sRng Is Nothing Then GPE_Copy [b4], ChuHo, 1, 1
End If
End Sub
[B]Sub GPE_Copy(Cls As Range, All_ As Boolean, Optional Offs As Integer = -1, Optional Add1 As Byte)[/B]
Dim MyAdd As String
MyAdd = sRng.Address
Do
With [b21].End(xlUp).Offset(1)
If All_ Then
.Resize(, 5).Value = sRng.Offset(, Add1).Resize(, 5).Value
.Offset(, 5).Resize(, 2).Value = sRng.Offset(, 7 + Add1).Resize(, 2).Value
Else
If sRng.Offset(, Offs).Value = Cls.Value Then
.Resize(, 5).Value = sRng.Offset(, Add1).Resize(, 5).Value
.Offset(, 5).Resize(, 2).Value = sRng.Offset(, 7 + Add1).Resize(, 2).Value
End If
End If
End With
Set sRng = Rng.FindNext(sRng)
Loop While Not sRng Is Nothing And sRng.Address <> MyAdd
[B]End Sub[/B]
Ý của em là khi nhập tên chủ hộ thì toàn bộ hàng hóa của một chủ hộ (kể cả khác quầy) cũng hiển thị trên bảng chi tiết để in báo cáo theo từng chủ hộ riêng.-Bài toán của bạn cũng chưa khó,xử lý được,Nhưng chưa hiểu lắm,bạn muốn chọn tên chủ hộ rồi tự động điển thông tin của chủ hàng vào dòng có STT 1.
Rồi chọn tiếp chủ hảng 2 rồi điển vào dòng STT 2 .Hay thế nào nhỉ??
-Vừa xem đá bóng xong,đang hăngÝ của em là khi nhập tên chủ hộ thì toàn bộ hàng hóa của một chủ hộ (kể cả khác quầy) cũng hiển thị trên bảng chi tiết để in báo cáo theo từng chủ hộ riêng.
Hay ngược lại, chỉ in hàng hóa của một quầy trong đó có nhiều chủ hộ để báo cáo doanh số theo từng quầy.
Em thì ko biết gì về macro nên... bí lắm. Lại mới sử dụng excel 2007 nên mọi thứ đều mới.
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, [b4]) Is Nothing Then InChuHo
If Not Intersect(Target, [g4]) Is Nothing Then InCuaHang
End Sub
Sub InChuHo()
Dim Rng As Range, Chuho As Range, Firstcell As String, R As Integer
Set Rng = Sheet1.Range("b6:b500")
'sheet "phatsinh" co the nhap den hang 500'
Set Chuho = Rng.Find([b4].Value, , xlFormulas, xlWhole)
Firstcell = Chuho.Address
Application.ScreenUpdating = False
If Not Chuho Is Nothing Then
R = 1
Do
Cells(6 + R, 2).Value = [b4].Value
Cells(6 + R, 3).Value = Chuho.Offset(, 1).Value
Cells(6 + R, 4).Value = Chuho.Offset(, 2).Value
Cells(6 + R, 5).Value = Chuho.Offset(, 3).Value
Cells(6 + R, 6).Value = Chuho.Offset(, 4).Value
'neu la in phieu xuat,ton kho thi chinh lai so 7,8 cho dung'
Cells(6 + R, 7).Value = Chuho.Offset(, 7).Value
Cells(6 + R, 8).Value = Chuho.Offset(, 8).Value
R = R + 1
Set Chuho = Rng.FindNext(Chuho)
Loop While Firstcell <> Chuho.Address
End If
Application.ScreenUpdating = True
End Sub
Sub InCuaHang()
Dim Rng As Range, Cuahang As Range, Firstcell As String, R As Integer
Set Rng = Sheet1.Range("a6:a500")
'sheet "phatsinh" co the nhap den hang 500'
Set Cuahang = Rng.Find([g4].Value, , xlFormulas, xlWhole)
Firstcell = Cuahang.Address
Application.ScreenUpdating = False
If Not Cuahang Is Nothing Then
R = 1
Do
Cells(6 + R, 2).Value = Cuahang.Offset(, 1).Value
Cells(6 + R, 3).Value = Cuahang.Offset(, 2).Value
Cells(6 + R, 4).Value = Cuahang.Offset(, 3).Value
Cells(6 + R, 5).Value = Cuahang.Offset(, 3).Value
Cells(6 + R, 6).Value = Cuahang.Offset(, 5).Value
'neu la in phieu xuat,ton kho thi chinh lai so 8,9 cho dung'
Cells(6 + R, 7).Value = Cuahang.Offset(, 8).Value
Cells(6 + R, 8).Value = Cuahang.Offset(, 9).Value
R = R + 1
Set Cuahang = Rng.FindNext(Cuahang)
Loop While Firstcell <> Cuahang.Address
End If
Application.ScreenUpdating = True
End Sub
Khi cháu thay là= Rng.Find([b4].Value, , xlFormulas, xlWhole)
thì không ra cái gì cả??Trong khi cháu tìm kiếm và tìm thấy bài viết về phương thức FIND và down về dùng nhưng nó chỉ nói= Rng.Find([b4].Value, , xlValues, xlWhole)