



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)