Theo dõi Nhập Xuất Tồn

  • Thread starter Thread starter NangThu
  • Ngày gửi Ngày gửi
Liên hệ QC

NangThu

Thành viên mới
Tham gia
15/4/09
Bài viết
6
Được thích
0
Các anh chị giúp em cài các công thức theo file đính kèm này với nhe!
Thanks!
 

File đính kèm

-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ỉ??
 
Bạn xem thêm trong file, nha!

Sử dụng macro . . . ô hợp!.
 

File đính kèm

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.
 
Mọi việc fải đi từ đơn giải đến fức tạp, từ cụ thể đến trừu tượng

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.
Thực ra 2 macro này lúc đầu chỉ là 1 macro:

PHP:
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

Mã:
[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]

Nhưng lúc đó macro 2 (với 1 số tham số hơi khác) sẽ fải ở cả 2 dòng lệnh mà mình đã đánh số bên trên

Vì 2 đoạn mã đó giống na ná nhau, chỉ khác về tham số nên mình tìm cách gộp lại. Tất nhiên trước khi muốn gộp ta fải chạy kiểm tra nhiều lần trên trang tính để nó hoàn hão cái đã.

B1: Để tiến hành gộp, mình chép i xì đoạn mã giống nhau đó vô giữa 2 dòng lệnh của 1 macro trống.
B2: Kiểm các thông số cần truyền cho nó cũng như các biến nên dùng chung cho 2 macro;
Các biến dùng chung ta đem lên trên cùng (trên cả macr0 1 luôn - như bạn thấy đó)
B3] Chạy thử (chỉ với fương án đầu thôi)
Để vậy, ta thêm dòng lệnh gọi macro với các tham số tối thiểu (sử dụng từ khóa Optional) (tựa như dòng lệnh có số 2)
Ngay sau dòng này, ta dùng lệnh Exit Sub
Chạy & kiểm tra rốt ráo fương án 1;
Chỉ khi hoàn toàn OK ta mới chuyển sang bước kế tiếp
B4] thực hiện các bước 2 & 3 đối với đoạn mã trùng thứ 2 (Sau dòng lệnh đánh số 3 nêu trên)
Chú í hết sức các biến đổi trị của các tham số truyền.

Ta sẽ thấy rằng, truyền các nhiều tham số càng nhọc công kiểm

Sơ qua vài nét, mong thỏa cho bạn ít nhiều. Nếu có nhu cầu, chúng ta sẽ thảo luận tiếp ở BOX giải thích Code!
 
Lần chỉnh sửa cuối:
-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ỉ??
Ý 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.
 
Lần chỉnh sửa cuối:
Gửi NangThu nhé

Ý 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.
-Vừa xem đá bóng xong,đang hăng --=0--=0
Bài mình làm không siêu việt bằng của bác SA_DQ đâu nhưng chắc chắn đúng ý bạn rồi nhé __--____--____--__
PHP:
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
PHP:
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
PHP:
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
-Có gì thì đọc tý nhé,mình viết đơn giản lắm
 

File đính kèm

-Mà excel 2007 có tiếng việt đó bạn down về mà dùng sẽ thấy tuyệt vời lắm,tự mày mò được nhiều thứ,còn Code thì vẫn tự học thôi :))
 
Gửi bác SA_DQ

-bác cho cháu hỏi là tại sao phương thức FIND lại là
= Rng.Find([b4].Value, , xlFormulas, xlWhole)
Khi cháu thay là
= Rng.Find([b4].Value, , xlValues, 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
LookIn:=xlValues mà không nói LookIn:=xlFormulas Bác có thể làm rõ cho cháu hiểu hơn được không ạ?
 
Web KT

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

Back
Top Bottom