Hoàn thiện giúp code phiếu hàng (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

hphuc0210

Thành viên chính thức
Tham gia
30/3/10
Bài viết
77
Được thích
18
Em có 1 phiếu bán hàng nhưng chỉ làm được 1 vài chi tiết nhỏ còn các chi tiết lớn thì chưa làm được post lên đây xin nhờ các anh chi giúp đỡ,mọi thắc mắc em ghi trong file đính kèm rất mong được các anh chi giúp đỡ.Xin cảm ơn
 

File đính kèm

Lần chỉnh sửa cuối:
Em thấy có 9 lần tải nhưng chưa có anh chi nào góp ý giúp em,không biết là vấn đề của em khó giải quyết hay là em lập luân chưa rõ ràng làm các anh chi khó hiểu nên không giúp được.Có gì các anh chị góp ý giúp em để em chỉnh lại,xin cảm ơn
 
Upvote 0
Từ, từ khoai mới nhừ

Công việc viết phiếu là : Khi khách hàng mua loại nào thì đánh SL của loại đó vào cột SL sau đó chọn giá bán,nếu chọn giá tự do thì phải đánh tay thên cột CK,còn nếu chọn Gia 1 hoặc Giá 2,3,4 thì cột CK sẽ tự lấy CK ở shDanhMucHH(),sau khi đánh SL xong . . . .

Mình thì đề xuất trong file đính kèm 1 quy trình hơn ngược chút:

(*) Chọn nút chiét khấu trước (Nếu không CK thì nhập vào ô CK% & giá bán tương ứng trước khi nhập 'SL'

Vì khi nhập 'SL' macro sự kiện sẽ tự động điền các thông tin còn trống trên hàng vừa nhập 'SL'

Xem thêm trong file nha & quan trọng là không được nôn nóng!
 

File đính kèm

Upvote 0
Cảm ơn HYEN17,em không nôn nóng được giúp đỡ sớm hay muộn mà chỉ sợ là em trình bài vấn đề không đúng nghĩa gây khó khăn cho các anh chị muôn giúp thôi

Trở lại file đính kèm của HYEN17 em thấy cái phần giá nó không linh động HYEN ơi,lỡ như trong quá trình em viết phiếu em muốn đổi từ giá 1 sang giá 2 thì em phải đánh lại SL từ đầu chứ phần CK nó không tự chuyển đổi theo HYEN xem lại giúp.

Thứ 2 là ở phần giá tự do em muốn là nếu em chọn giá tự do thì công việc đánh thêm của em là "đánh thêm cột CK" chứ không đánh thêm cột giá bán,cột giá bán em muốn lúc nào cũng là = meenhgiamahang-ckmahang
 
Upvote 0
Trở lại file đính kèm của HYEN17 em thấy cái phần giá nó không linh động HYEN ơi,lỡ như trong quá trình em viết phiếu em muốn đổi từ giá 1 sang giá 2 thì em phải đánh lại SL từ đầu chứ phần CK nó không tự chuyển đổi theo HYEN xem lại giúp.

Đằng nào cũng có cái fiền fức của nó

File này thì khi nhập record sau, nhưng nếu trùng chiết khấu với record trước thì lại fải nhấp lên nút nào đó, rồi quay lại mức chiết khấu cho nó;

(Hay bạn nên làm thêm 1 nút nữa như là 1 cõi hư vô zậy, kha, kha,. . . )
 

File đính kèm

Upvote 0
HYEN ơi em thấy code ở bài viết #3 tương đối hơn bài #5,ở bài #5 này khi em nháy chuột ở dòng nào thì nó mới sữa CK ở dòng đó và ở những dòng k có SL mà em nháy chuột nó cũng hiện ra tên hàng hoá luôn nữa thật là nhứt cái đầu lâu thật,em có tìm hiểu 1 số bài viết trong diễn đàn em thấy có 1 bài viết tương đối giống bài của em nhưng em không hiểu code nên không làm theo được em chỉ đường link tới anh chi tham khoả nha

http://www.giaiphapexcel.com/forum/showthread.php?2253-Mong-c%C3%A1c-b%E1%BA%A1n-g%C3%B3p-%C3%BD-cho-ph%E1%BA%A7n-m%E1%BB%81m-nho-nh%E1%BB%8F_QLBH-c%E1%BB%A7a-t%C3%B4i-nh%C3%A9!

file ở bài #2

Thêm nữa là số phiếu em chưa thấy nó tự động tăng HYEN xem giúp

Xin chân thành cảm ơn HYEN,cảm ơn GPE
 
Lần chỉnh sửa cuối:
Upvote 0
(1) Em thấy code ở bài viết #3 tương đối hơn bài #5,ở bài #5 này khi em nháy chuột ở dòng nào thì nó mới sữa CK ở dòng đó và ở những dòng k có SL mà em nháy chuột nó cũng hiện ra tên hàng hoá luôn nữa thật là nhứt cái đầu lâu thật,

(2)
Thêm nữa là số phiếu em chưa thấy nó tự động tăng ; Xin chân thành cảm ơn GPE
(1) Thực ra code ở #3 không đúng thực tế; Vì trong 1 loạt các mặt hàng nhập khác nhau của 1 hóa đơn, không fải chúng cùng 1 cách chiết khấu.

Còn tại #5, thì đang còn khó xài; Hãy tự xóa bằng tay, khi lỡ tay tấy máy chuột lung tung trên trang tính. Chúng ta sẽ hoàn thiện tiếp

(2) Bạn thay macro cũ bắng cái ni:

PHP:
Private Sub CommandButton2_Click() 'Tao Moi'
 Dim VTr As Byte, SoHD As String, Num As Integer
 Union([B10:B58], [D10:F58]).Value = ""
 
 VTr = InStr([g5].Value, "/")
 SoHD = Mid([g5].Value, 3, VTr - 3)
 Num = CInt(SoHD)
 [g5].Value = "PX" & Right("000" & CStr(Num + 1), 4) & "/" & CStr(Year(Date) Mod 100)
End Sub
 
Upvote 0
Cảm ơn ChanhTQ@ ý em là muốn nó tăng dựa vào số phiếu ở CSDL ấy,vì theo code này mỗi lần em tạo mới là nó sẽ tăng lên 1 như vậy CSDL của em sẽ không chính xác và em sẽ không theo dõi được số HD của em đã xuất
 
Upvote 0
? ? ?

Ý em là muốn nó tăng dựa vào số phiếu ở CSDL ấy,vì theo code này. . .

Nhưng tại trang CSDL của bạn trống trơn thị ta dựa vào hư không à bạn?
 
Upvote 0
Nhưng tại trang CSDL của bạn trống trơn thị ta dựa vào hư không à bạn?

Dạ không phải,ý em nói là :Trường hợp là trong lúc em đang viết phiếu nếu khách hàng đổi ý hoặc em viết sai em muốn tạo mới lại hóa đơn,khi ấy em bấm button tạo mới cho nhanh nhưng theo code của ChanhTQ thì khi em tạo mới nó lại nhảy lên 1 số nữa rồi như vậy CSDL của em bị nhảy lên 1 số HD mất,do đó em muốn là nếu CSDL của em nếu chưa có phiếu nào thì nó sẽ là PX0001/10 còn nếu đã có PX0001/10 rồi thì phiếu kế tiếp sẽ là PX0002/10 chứ không thể là PX0004 hoặc 5 hoặc là trùng lại PX0001/10 được ạ
 
Upvote 0
À, mình hiểu rồi!

Và đây là macro mới của bạn:

PHP:
Private Sub CommandButton2_Click() 'Tao Moi'
 Dim SoHD As String, Num As Integer
 Dim Sh As Worksheet, Rng As Range, Cls As Range
 
 Union([B10:B58], [D10:F58]).Value = ""
 
 Set Sh = Sheets("CSDL")
 Set Rng = Sh.Range(Sh.[c2], Sh.[c65500].End(xlUp))
 For Each Cls In Rng
   If Cls.Value > SoHD Then SoHD = Cls.Value
 Next Cls
 If Right(SoHD, 2) < CStr(Year(Date) Mod 100) Then
   [G5].Value = "PX0001/" & CStr(Year(Date) Mod 100)
 Else
   SoHD = Mid(SoHD, 3, 4):          Num = CInt(SoHD) + 1
   [G5].Value = "PX" & Right("000" & CStr(Num), 4) & "/" & CStr(Year(Date) Mod 100)
 End If
End Sub

Lưu í nhỏ: Số hóa đơn trong năm không vượt quá 9999 số.


Góp 1 ý nhỏ với bạn về cấu trúc trang 'CSDL'

Nếu hóa đơn có nhiều mặt hàng thì CSDL của trang tính sẽ trùng lắp nhiều ở 4 trường đầu (không kể [STT]).
Cũng có nhiều người tách trang này thành 2 bảng (Table) ; Table đầu gồm 5 trường đầu; Table sau gồm các trường còn lại & có thêm trường [SoFieu] để giữ mối quan hệ giữa 2 tables này.

Bạn xem xét & quyết định điều này sớm đi nha.
 
Upvote 0
Góp 1 ý nhỏ với bạn về cấu trúc trang 'CSDL'

Nếu hóa đơn có nhiều mặt hàng thì CSDL của trang tính sẽ trùng lắp nhiều ở 4 trường đầu (không kể [STT]).
Cũng có nhiều người tách trang này thành 2 bảng (Table) ; Table đầu gồm 5 trường đầu; Table sau gồm các trường còn lại & có thêm trường [SoFieu] để giữ mối quan hệ giữa 2 tables này.

Bạn xem xét & quyết định điều này sớm đi nha.

Xin gởi lời cảm ơn chân thành đến HYEN,vì sự nhiệt tình và sự quan tâm sâu sắc của HYEN đến topic này.

Thật sự em chỉ biết cơ bản về excel mà thôi,do đó em không biết được thế nào là sự thuận tiện cũng như sự chuyên nghiệp trong cách bố trí CSDL,HYEN xem giúp làm như thế nào là tốt nhất thì xin chỉnh sữa và chỉ giúp,em vô cùng biết ơn.Thật ra em làm CSDL là vì em muốn làm thêm phần Báo Cáo về NXT (xem mặt hàng này đã bán được bao nhiêu cái trong tháng) và Danh Thu theo HD (tháng này đã bán được bao nhiêu tiền sỉ) nhưng vì chưa biết làm CSDL cũng như cách lấy Dữ Liệu như thế nào nên em không có tạo thêm shBAOCAO trong file của em mà thôi.Rất mong nhận được sự giúp đỡ của diễn đàn cũng như của HYEN

Xin chân thành cảm ơn
 
Upvote 0
Bạn xem thử file đính kèm nha

& hãy cho biết bạn cần báo cáo như thế nào? (Đưa nội dung iêu cầu của trang Report lên đi)

Sẽ có 1 vài người giúp bạn, chắc vậy!

Lưu í 1 điều nữa, là nếu khách hàng nhiều, ta nên gán cho họ mỗi người 1 mã khác nhau!
 

File đính kèm

Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
Cảm ơn HYEN,phần số phiếu rất hay khi có thêm phần kiểm tra và thông báo lỗi em rất ưng ý điều đó rất cảm ơn HYEN(nếu có thể HYEN cho xin thêm phần kiểm tra trước khi Tạo Mới nếu HD chưa được Lưu thì hỏi có Lưu hay không).Phần Report em có gắng nghỉ ra để viết lên cho các anh chị giúp,phần mã khách hàng thì em có khoảng 200 KH,em đã thêm MaKH HYEN xem coi có phải như vậy k?
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Xin mời bạn thử nha:

PHP:
Private Sub CommandButton2_Click()                       'Tao Moi'
 Dim SoHD As String, Num As Integer, XinHoi As Byte      '<=|'
 Dim Sh As Worksheet, Rng As Range, Cls As Range
 
 Set Sh = Sheets("CSDL")
 Set Rng = Sh.Range(Sh.[c2], Sh.[c65500].End(xlUp))
1 If Rng.Find([G5].Value, , xlFormulas, xlWhole) Is Nothing Then
   XinHoi = MsgBox("Ban Khong Càn Luu Du Lieu?", 33, "Ban Chua Luu Vào CSDL")
   If XinHoi > 1 Then Exit Sub
2 End If

 Union([B10:B58], [D10:F58]).Value = "":        [G5].Interior.ColorIndex = 35

 For Each Cls In Rng
   If Cls.Value > SoHD Then SoHD = Cls.Value
 Next Cls
 If Right(SoHD, 2) < CStr(Year(Date) Mod 100) Then
   [G5].Value = "PX0001/" & CStr(Year(Date) Mod 100)
 Else
   SoHD = Mid(SoHD, 3, 4):          Num = CInt(SoHD) + 1
   [G5].Value = "PX" & Right("000" & CStr(Num), 4) & "/" & CStr(Year(Date) Mod 100)
 End If
End Sub


Còn 1 vấn đề nữa mình muốn đề xuất với bạn. Đó là rút gọn chu trình nhập dữ liệu vô 'CSDL':

Chúng ta đồng thời nhập dữ liệu vô 2 tables; Table đầu ta chỉ fải nhập 1 dòng duy nhất cho 1 hóa đơn;
Nhưng trong macro hiện có, chúng ta fải nhập vô đây nhiều lần, bằng với số dòng có trong chi tiết hàng của hóa đơn.
Thường trong thực tế, 1 khách hàng hãn hữu mua 1 mặt hàng, mà nhiều mặt hàng khác nhau (trong 1 hóa đơn)
Vậy nên ta cải biến macro nhập liệu đã có thêm chút xíu nũa, như sau:

PHP:
Private Sub CommandButton3_Click()              ' Luu'
 Dim Sh As Worksheet, Cls As Range, Rng As Range
 Dim Rws As Long, DaGhi As Boolean              '<=|'
  
 Set Sh = Sheets("CSDL"):           Rws = Sh.[B65500].End(xlUp).Offset(1).Row
 Set Cls = Sh.Range(Sh.[c1], Sh.[c65500].End(xlUp))
 If Not Cls.Find([G5].Value, , xlFormulas, xlWhole) Is Nothing Then
   MsgBox "Da Nhap Ròi, Ban Oi", , "GPE Xin Luu Ý":      Exit Sub
 End If
 For Each Cls In Range("B10:B58")
   If Cls.Value <> "" Then
      If DaGhi = False Then                     '<=|'
7         With Sh.Cells(Rws, "B")
            .Value = [C7].Value:                DaGhi = True
            .Offset(, 3).Value = "G Chu"
            .Offset(, 1).Value = [G5].Value
            .Offset(, 2).Value = [G7].Value
         End With
      End If                                    '<=|'
8      With Sh.[G65500].End(xlUp).Offset(1)
         .Value = [G5].Value   'Só Hoá Don'
         .Offset(, 1).Resize(, 5).Value = Cls.Resize(, 5).Value
      End With
   End If
 Next Cls
 With [G7].Interior
   If .ColorIndex = 35 Then .ColorIndex = 38 Else .ColorIndex = 35
 End With
End Sub

Chúc thành công.
 
Upvote 0
Thật là quí giá và vui mừng khi thấy code mỗi ngày được hoàn thiện,không biết làm gì hơn ngoài nói lời cảm ơn.Cảm ơn HYEN,cảm ơn ChanhTQ,cảm ơn diễn đàn GPE đã tạo điều kiện cho tôi được giúp đỡ.

Còn về phần lấy giá bán(rất quan trọng)rất mong nhận được sự đóng góp và chỉ dạy thêm từ mọi người,em rất mong chờ những bài viết kế tiếp.

Xin cảm ơn
 
Upvote 0
Thật là quí giá và vui mừng khi thấy code mỗi ngày được hoàn thiện,không biết làm gì hơn ngoài nói lời cảm ơn diễn đàn GPE, đã tạo điều kiện cho tôi được giúp đỡ.
Còn về phần lấy giá bán(rất quan trọng)rất mong nhận được sự đóng góp và chỉ dạy thêm từ mọi người,em rất mong chờ những bài viết kế tiếp.
Xin cảm ơn
Để cải tiến tiếp, chúng ta cần biêt số mã hàng của cơ sở bạn đang kinh doanh.

Nếu dười 50 thì ta đang ứng xử như hiện nay là tạm chấp nhận; Nhưng nếu từ 100 trở lên thì ta fải có những ứng xử khác hơn chút đĩnh mới tốt.

Vậy bạn hãy cho biết hiện nay cũng như trong tương lai sẽ khoảng bao nhiêu mặt hàng.


Góp thêm í nhỏ: Mã khách hàng như bạn đang làm là còn fí fạm 1 chữ cái trong mã. Thường các mã này ta hay người nhập liệu ít khi nhìn thấy nó. Bỡi vậy toàn các mã là "KHxxx' thì cũng như "@xxx" hay "Gxxx" mà thôi
Nhưng khi cần truy xuất thì tốc độ sẽ cải thiện lên 10 lần đó nha.
Cần nói thêm rằng, với mã như vậy, bạn vẫn ngủ ngon khi số khách hàng tăng gần 30.000 người như thường. (Thậm chí cho đến gần 8 vạn #h hàng cũng OK)
 
Upvote 0
Để cải tiến tiếp, chúng ta cần biêt số mã hàng của cơ sở bạn đang kinh doanh.

Nếu dười 50 thì ta đang ứng xử như hiện nay là tạm chấp nhận; Nhưng nếu từ 100 trở lên thì ta fải có những ứng xử khác hơn chút đĩnh mới tốt.

Vậy bạn hãy cho biết hiện nay cũng như trong tương lai sẽ khoảng bao nhiêu mặt hàng.


Góp thêm í nhỏ: Mã khách hàng như bạn đang làm là còn fí fạm 1 chữ cái trong mã. Thường các mã này ta hay người nhập liệu ít khi nhìn thấy nó. Bỡi vậy toàn các mã là "KHxxx' thì cũng như "@xxx" hay "Gxxx" mà thôi
Nhưng khi cần truy xuất thì tốc độ sẽ cải thiện lên 10 lần đó nha.
Cần nói thêm rằng, với mã như vậy, bạn vẫn ngủ ngon khi số khách hàng tăng gần 30.000 người như thường. (Thậm chí cho đến gần 8 vạn #h hàng cũng OK)

Báo cáo hiện giờ cơ sở em đang kinh doanh có tất cả là 49 mặt hàng trong đó có 38 mã hàng luôn luôn cố định còn lại 11 mặt hàng có thể sẽ thay đổi(thay đổi là nó sẽ không ra nữa mà thay bằng 1 mặt hàng khác gần giống ấy nên em không liệt kê nó vào phần nào đây) và tương lai chắc có thể lên khoản 60 mặt hàng

Về phần mã khách hàng,hi nếu đặt theo dạng @xxx nó truy xuất nhanh hơn thì em xin làm vậy,thật tình em không biết mình đang làm 1 vấn đề chuyên nghiệp đến thế,nên mọi vấn đề nhờ HYEN chỉ dạy thêm (thật sự em vô cùng biết ơn)
 
Upvote 0
Fần lấy giá bán, . . .

Còn về phần lấy giá bán(rất quan trọng)rất mong nhận được sự đóng góp và chỉ dạy thêm từ mọi người,em rất mong chờ những bài viết kế tiếp.

Đây chưa hẵn là là cải tiến, nhưng mấy cái nút radio đó ta có thể đưa hết thành 1 ô nào đó có Validation; Lúc đó ta chỉ bấm trỏ chuột tại 1 ô thôi; Khỏi fải di chuyển, tránh mau hư chuột!

Còn nếu muốn nhập hết 1 lượt toàn bộ các mặt hàng trong hóa đơn xong mới lọc như macro đầu tiên của topic thì cũng được. Bằng cách ta thêm 1 cột để lựa chiệt khấu cho từng mật hàng khác nhau.
Như vậy sau khi ta nhập số lượng & chiết khầu cho mặt hàng bằng với mệnh giá (CK (chiết khậu) =0 ), & nhập tiếp chiết khầu của các mặt hàng có chiết khấu, ta cho chạy macro lọc. Nhưng lúc này, macro lọc sẽ fải bổ sung thông tin cần thiết từ trang 'HHoa' sang cho đủ đầy, rồi mới lọc.

Các việc này còn tùy thuộc vô thói quen nghề nghiệp của bạn.

Sẵn lòng hỗ trợ tiếp, nếu bạn thầy cần.

Chúc vui!
 
Upvote 0
Đây chưa hẵn là là cải tiến, nhưng mấy cái nút radio đó ta có thể đưa hết thành 1 ô nào đó có Validation; Lúc đó ta chỉ bấm trỏ chuột tại 1 ô thôi; Khỏi fải di chuyển, tránh mau hư chuột!

Hi ChanhTQ nói chuyện cũng vui quá nhỉ,em không sợ hư chuột đâu.Thật ra vấn đề của em không phải là radio hay là Validation cái nào em cũng sử dụng được hết chẳn qua em dùng radio vì nhìn rõ ràng hơn,trực quan hơn thôi.

Sở dĩ em làm thêm mấy cái radio để tự điền giá bán là vì các anh chị biết không?

Hằng ngày em phải tiếp và bán gần 100 đến 150 người khách đến mua hàng nên công việc của em rất là bận,trước kia khi em chưa áp dụng excel vào buôn bán thì em phải viết tay hàng trăm cái HD bán lẻ(mua ngoài chợ)mỗi ngày,nào là viết tên khách hàng,nào là viết tên hàng,nào là viết SL,nào là viết CK,nào là viết Giá bán,nào là bấm máy tính để ra thành tiền sau cùng cộng lại ôi thôi nó mất rất nhiều công và thời gian.Nhưng công việc lại đòi hỏi sự nhanh và chính xác vì sai 1 phát là mất nhiều tiền lắm,và dạo trước em có vào GPE nhờ các anh chi giúp tạo 1 file HD để tính toán cho nhanh lúc đó em được anh ndu giúp đỡ tạo được file HD và hiện giờ em vẫn còn dùng file đó.Nhưng qua thời gian sử dụng em thấy file HD trước đây làm còn nhiều điều thiếu sót nên hôm nay em cãi tiến thêm chút,file HD trước đây khi em viết HD là em phải đánh Số HD+Tên KH+SL+CK cũng hơi tốn nhiều thời gian và vẫn còn sai sót VD:em có MaHH A20 CK 6.5% giá bán 18,7,MaHH B20 CK 50% giá bán 10,lúc em lập HD em đã đánh nhầm CK A20 CK 50%,như vậy là em đã bị lỗ :(, nếu may mắn gặp người tốt thì người ta tính lại còn gặp người xấu thì họ đi luôn.Do đó hôm nay em muốn excel tự điền CK và cho dù em xuất sai MaHH thì cũng không sai CK.

Đó là sự trăn trở của em,do đó em rất mong các anh chi GPE giúp em,em chân thành cảm ơn
 
Upvote 0
file HD trước đây khi em viết HD là em phải đánh Số HD+Tên KH+SL+CK cũng hơi tốn nhiều thời gian và vẫn còn sai sót VD:em có MaHH A20 CK 6.5% giá bán 18,7,MaHH B20 CK 50% giá bán 10,lúc em lập HD em đã đánh nhầm CK A20 CK 50%,như vậy là em đã bị lỗ.
Do đó hôm nay em muốn excel tự điền CK và cho dù em xuất sai MaHH thì cũng không sai CK.
Đó là sự trăn trở của em,do đó em rất mong các anh chi GPE giúp em,em chân thành cảm ơn

Ý bạn muốn excel nó nhập cho bạn CK (chiết khấu). Nhưng sao nó biết lấy loại CK nào giữa 5 loại CK vậy. Nếu bạn cần việc là: Sau khi nhập số lượng hàng thì các mức CK cho loại hàng đó sẽ hiện lên ở đau đó trên trang tính? - Chuyện này có thể & trong tầm tay

Hay bạn còn ước muốn êxcel sẽ đem lại sự thuận tiện gì nữa vậy, trong quá trình bán hàng của bạn.

Thêm 1 góp í nhỏ qua trang 'KhHg': Trang này ta có thể đem qua, nhập chung với trang 'CSDL'; Có thể chép các cột có dữ liệu của nó đến [T1] của 'CSDL'

Thêm 1 góp í nho nhỏ liên quan đến chuyện bán hàng của bạn:
Đó là trong trang tính 'KhHg' chưa có trường [NgaySnh], Bạn cần thu thập ngày sinh của #h hàng 1 cách tinh tế & kiên trì, nhát là với ~ khách hàng thân thiết.
Họ sẽ rất vui & sẽ quay lại nơi bán hàng, nếu được chủ hàng chúc mừng ngày sinh của họ 1 cách tình cờ & ngạc nhiên!

Chúc bạn nhiều thành công!
 
Upvote 0
Hi ChanhTQ nói chuyện cũng vui quá nhỉ,em không sợ hư chuột đâu.Thật ra vấn đề của em không phải là radio hay là Validation cái nào em cũng sử dụng được hết chẳn qua em dùng radio vì nhìn rõ ràng hơn,trực quan hơn thôi.
1/ Tôi cũng đồng ý với ý Bác Sa (ChanhTQ) về vấn đề này, nên thêm 1 cột dùng validation để lấy giá bán.
2/ Sh HHoa sao tên hàng lại đứng trước MaHH và chỉ cần cột CK, không cần cột giá bán, khi update sẽ tự động tính. Và hình như thiếu cột ĐVT.
3/ Sh CSDL nên làm thành 2 sh gồm Sh ChTu và Sh ChiTietCT sẽ hay hơn khi cần mở rộng.
4/ Tại Sh HDon nếu bạn nói có 38 MaHH là thường xuyên và 11 là tạm thì nên list hết 49 Mahh, ưu tiên thường xuyên lên trên và có luôn phần tenHH và DVT.
5/ Khi Luu hay Loc thì sẽ kiểm tra dòng nào có đủ SL và loaiCK thì sẽ lấy giá bán và tính thành tiền, sẽ hay hơn là bạn dùng tại dòng active khi chọn Ratio CK thì gán CK, trường hợp này sẽ xảy ra khi dòng 15 bạn nhập SL, Enter bị xuống dòng và chọn CK thì CK sẽ gán vào dòng 16 => vô nghĩa.
6/ Các phần DMHH và DMKH nên có nút "Cap Nhat" nhằm kiểm tra trùng và cập nhật các thông tin khi thêm mới.
7/ Phần số TT trong các sh kg cần thiết phải dùng ct: =IF(C2>0,MAX($A$1:A1)+1,""), đã làm VBA thì dùng VBA update SoTT.
Vài lời xin đóng góp.
Cám ơn nhiều về ý tưởng tạo File trên, có người bạn cũng yêu cầu gần giống bạn trong lĩnh vực phát hành sách.

Về file này, còn có phần xem lại, sửa phiếu và lưu lại, phần này cũng khá phức tạp. Theo tôi bạn nên thêm 1 cột ID vào sh ChiTietCT. Cụ thể nói sẽ bàn tiếp sau.
 
Lần chỉnh sửa cuối:
Upvote 0
Ý bạn muốn excel nó nhập cho bạn CK (chiết khấu). Nhưng sao nó biết lấy loại CK nào giữa 5 loại CK vậy. Nếu bạn cần việc là: Sau khi nhập số lượng hàng thì các mức CK cho loại hàng đó sẽ hiện lên ở đau đó trên trang tính? - Chuyện này có thể & trong tầm tay

Đúng vậy HYEN ơi,ý em là muốn excel tự động nhập CK,nhưng không phải là 5 loại CK trong 1 HD như nghỉ HYEN rồi,để em VD cho HYEN để hình dung

VD :Gia1-->thuộc HD< 1 triệu,Gia2--->thuộc 1trieu< HD < 2 triệu,Gia3-->thuộc 2trieu < HD < 3trieu ,Giá tự do ---> do em tự đánh CK vào (giá này tuỳ theo khách hàng là bà con hay người ngoài mà tính giá hihi :D)Khi khách hàng lại mua hàng họ sẽ ghi SL của tùng loại hàng ra và em sẽ đánh vào trang tính HD và HD lúc này sẽ có là : MaHH - SL - Giá gốc(giá chưa trừ %CK) - thành tiền ,rồi lúc này em sẽ nhìn vào HD để xem nó có tổng số tiền là bao nhiêu và nó thuộc loại nào trong 4 loại giá trên nếu nó nằm trong khoảng nào thì em lấy giá khoảng đó (xem hình minh hoạ).Chứ không phải mỗi loại MãHH mang 1 giá như HYEN nghỉ đâu

View attachment 51093

Thêm 1 góp í nhỏ qua trang 'KhHg':
Trang này ta có thể đem qua, nhập chung với trang 'CSDL'; Có thể chép các cột có dữ liệu của nó đến [T1] của 'CSDL'
Làm điều này có mạng lại điều gì trong vấn đề viết code không HYEN vd :file truy xuất nhanh hơn hay dể viết code hơn <----- phần này thuộc kỹ thuật em không rành HYEN thấy làm sao thuân tiện cho viêc viết code của HYEN thì cứ sữa em k biết về nó

Thêm 1 góp í nho nhỏ liên quan đến chuyện bán hàng của bạn:
Đó là trong trang tính 'KhHg' chưa có trường [NgaySnh], Bạn cần thu thập ngày sinh của #h hàng 1 cách tinh tế & kiên trì, nhát là với ~ khách hàng thân thiết.
Họ sẽ rất vui & sẽ quay lại nơi bán hàng, nếu được chủ hàng chúc mừng ngày sinh của họ 1 cách tình cờ & ngạc nhiên!
Hi HYEN cũng là 1 nhà kinh doanh có tâm tư suy nghỉ lâu dài nhỉ,đây cũng là 1 cách giúp kinh doanh hiệu quả em xin tiếp thua ý kiến này,cảm ơn HYEN
 

File đính kèm

  • VD.jpg
    VD.jpg
    110.8 KB · Đọc: 39
Lần chỉnh sửa cuối:
Upvote 0
Em xin đáp lời của ThuNghi !

1/Do em không rành về excel chỉ biết sử dụng cơ bản,do đó em thấy cái nào đẹp,trực quan là em dùng chứ em không hề biết về kỹ thuật,mấy anh chi thông cảm cho em điều này,mấy anh chị thấy cái nào dể viết code và tốt thì chỉnh và chỉ giúp em,em thật sự biết ơn.

2/Sở dĩ em đặt tên hàng trước MaHH vì với em mình là người buôn bán hàng ngày mình nhớ hết tất cả MaHH do đó mình chỉ cần nhìn ký hiệu là biết tên hàng k cần phải đọc cả tên hàng cho nó dài và rối mắt(tên hàng chỉ dành cho khách hàng đọc thôi),ý đồ thứ 2 là cho nó nằm gần với cột CK để khi mình update CK mình nhìn ngang cho nó nhanh và gần không dể bị nhầm dòng hơn là để nó cách xa ra ngoài bìa.Không cần cột giá là vì mình đã có Mệnh giá gốc rồi và giá bán lúc nào cũng phải được tính = Mệnhgiagoc-%Ck,và khi nhập hàng về mình chỉ cần nhớ CK cho nó ngắn gọn và chẵn số hơn là phải nhớ giá bán nó lẻ tẻ đến vài chục đồng VD : 46,750đ quá dài khó nhớ.Thiếu cột ĐVT cái này là em cố ý(nếu bạn nào dùng file này thì có thể thêm vào) để ĐVT vào nhìn HD nhiều dòng,nhiều chữ,nhìn xấu,rối mắt,tốn giấy,tốn mực in nên em bỏ nó ra hihi

3/Có phải điều này HYEN đã làm rồi ở những bài viết gần cuối rồi không ThuNghi,cái này cũng thuộc chuyên muôn em không hiểu nhiều,nhờ các anh chị chỉ dạy

4/Em đã liệt kê ra nhưng MaHH thường xuyên rồi đó nhưng chưa đủ đày,vì em nghĩ em có thể copy cách làm cho những MaHH còn lại(nhờ các anh chi viết nhiều quá em ngại,dó đó em chủ định là vừa nhờ vừ học hỏi),Ok em sẽ ghi nhận vấn đề này,em sẽ sữa lại file trong thời gian sơm nhất.

5/Câu này em chưa hiểu rỏ lắm,ý định của em là MaHH nào có SL thì khi chọn Giá 1,2,3,4 thì HD chỉ cần bổ xung CK vào những hàng nào có SL thôi,còn những MaHH k có SL thì không cần.

6/Đúng vậy em có nghỉ tới,nhưng vì không biết làm mà cũng không dám nhờ nên em để đó em sẽ tìm hiểu và bổ xung sau.Nếu anh chị giúp được,em vô cung biết ơn

7/Đó là công thức em lượm lặc trên GPE và điền vào thôi chứ em không biết dung VBA để update SoTT rồi :(,em sẽ học hỏi thêm.

8/Như em đã đề cập ở những bài viết trước,sỡ dĩ em tạo shCSDL là vì em còn muốn làm thêm phần BâoCo XNT,xem lại HD,sũaHD,xem Doanh thu theo khách hàng và theo ngày,... do em chưa nghỉ ra cách bố trí và liệt kê ra như thế nào nên chưa tạo thêm sh vào file này.

Rất cảm ơn ThuNghi đã đóng góp những lời vô ý nghĩa,em chân thành ghi nhận và học hỏi.Cảm ơn
 
Upvote 0
Hình như chúng ta quay về xuất fát điểm thì fải, nhưng với hiểu biết nhau cao hơn.

VD :Gia1-->thuộc HD< 1 triệu,Gia2--->thuộc 1trieu< HD < 2 triệu,Gia3-->thuộc 2trieu < HD < 3trieu ,Giá tự do ---> do em tự đánh CK vào (giá này tuỳ theo khách hàng là bà con hay người ngoài mà tính giá hihi :D)Khi khách hàng lại mua hàng họ sẽ ghi SL của tùng loại hàng ra và em sẽ đánh vào trang tính HD và HD lúc này sẽ có là : MaHH - SL - Giá gốc(giá chưa trừ %CK) - thành tiền ,rồi lúc này em sẽ nhìn vào HD để xem nó có tổng số tiền là bao nhiêu và nó thuộc loại nào trong 4 loại giá trên nếu nó nằm trong khoảng nào thì em lấy giá khoảng đó (xem hình minh hoạ).Chứ không phải mỗi loại MãHH mang 1 giá như HYEN nghỉ đâu
Như vậy mình hiểu là tùy vào tổng lượng tiền của hóa đơn & người mua mà có chiết khấu chung cho 1 hóa đơn?

Nếu đúng vậy, tại trang hóa đơn ta fải có cột mệnh giá ứng với từng mặt hàng như bên 'CSDL' & bên fải kề nó là cột tạm tính thành tiền. & quan trọng là 1 ô để hiện tổng thành tiền này, làm cơ sở để bạn tính chiết khấu.
 
Upvote 0
Như vậy mình hiểu là tùy vào tổng lượng tiền của hóa đơn & người mua mà có chiết khấu chung cho 1 hóa đơn?

Nếu đúng vậy, tại trang hóa đơn ta fải có cột mệnh giá ứng với từng mặt hàng như bên 'CSDL' & bên fải kề nó là cột tạm tính thành tiền. & quan trọng là 1 ô để hiện tổng thành tiền này, làm cơ sở để bạn tính chiết khấu.

Đúng vậy như vậy rồi ChanhTQ,nhưng chúng ta không cần có thêm cột tạm tính thành tiền và 1 ô để hiện tổng thành tiền như anh nói đâu nó đã có trong sh HD cả rồi anh ạ.

Theo lời hướng dẫn của ChanhTQ em đã chỉnh lại file chút ít sữa lại vấn đề đặt ra,nhờ các anh chi xem lại giúp.

Lưu ý:Em vẫn không thích thấy cột phụ ở đó,có cách nào chúng ta làm mất nó đi hoặc không dùng nó không các anh chị
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Quay lại từ đầu, nha

Trong file chỉ mới làm lại fần nhập dữ liệu tự động theo CK (chiết khấu).

CK ta có thể thiết lập cho toàn hóa đơn hay từng dòng hàng khác nhau (Thay tại [F1]) trước khi nhập số lượng vô cột [D]

Bạn thử nhập & cho biết ý kiến nha.

Các nút "Lưu" & "Tạo mới" chưa nên sử dụng, vì sẽ fải viết lại hoàn toàn do đã bố trí lại trang 'CSDL'
 

File đính kèm

Upvote 0
@ChanhTQ !
Không phải làm như vậy anh ChanhTQ ơi,mình phải đánh SL trước chọn CK sau mới được ,em VD nha : mua 2 loại hàng mỗi loại 10 cái A100 : 10 cái,B100 : 10 cái,như vậy tổng số tiền chưa trừ CK là 2triệu (2.000.000)lúc này mình sẽ nhìn tổng số tiền SUM (G10:G58)=2,000,000 mình sẽ chọn Giá 2 là mức HD 2 triệu,nhưng khách đổi ý muốn mua thêm hoặc bớt đi thì SL lại tăng A100: 20,B100:20 lúc này tiền là 4 triệu nó đã rơi vào giá 4 mình phải chọn lại giá 4 thôi.Do đó em muốn mỗi là chuyển đổi giá CK F1 thì cột E (cột CK) tự động đổi theo

Em xin dẫn chứng 1 file anh ChanhTQ xem giúp sh Xuat Nhap của file dẫn chứng nha

http://www.giaiphapexcel.com/forum/...n-góp-ý-cho-phần-mềm-nho-nhỏ_QLBH-của-tôi-nhé!
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Đây là cách nhập số lượng hàng, thấy tổng mệnh giá hóa đơn

Tổng tiền theo mệnh giá được ghi tại [I9]
Sau khi nhập hết, ta chọn mức chiết khấu tại [f1]

Macro gắn liền với nó sẽ điền số liệu vô cho bạn.

Chúng ta có thể cho các ô [f1] cũng như [i9] mờ đi hay font màu trắng luôn.


Chờ ý kiến bổ sung, sửa đổi từ bạn.
 

File đính kèm

Upvote 0
Wao,cảm ơn HYEN vô cùng,được rồi HYEN ơi như vậy mới là giống ý em từ trước giờ đó.Bây giờ còn khâu hoàn thiện và chỉnh sửa 1 số chi tiết nhỏ nhờ các anh chi giúp em.
1 /Khi đánh SL vào D thì cột tên hàng (cột B)tự động hiện tên hàng tương ứng liền chứ không phải chờ sau khi chọn CK mới hiện ra tên hàng.
2 /Khi chọn CK 0 thì lúc này cột CK (cột E)sẽ clear trống để mình tự đánh CK vào và khi mình đánh CK vào thì cột giá bán (cộtt F) cũng phải tính ra giá giống như mình chọn CK 1,2,3,4 vậy đó,hiện giờ khi chọn CK 0 và đánh tay CK vào nó đơ đơ 1 chổ hà <===== phần này quan trọng lắm đó
3 /Mình có thể đổi Validation thành radio được không?Vì hiện giờ nếu em sử dụng thì em sẽ biết CK 1 là sao,CK 2 là sao,.. còn nếu em mướn thêm 1 nhân viên khác họ sẽ không biết và không nhớ.Do đó em muốn em tự sữa các tên gọi đó lại thành 1 tên gọi khác bất kỳ lúc nào.
4 /Em muốn khi mới mở file lên để sử dụng thi mục CK luôn luôn mặc định là CK 0<===== và điều này đồng nghĩa là mình sẽ không cần (I9) và cột phụ U làm gì đúng không các anh chị vì (I9) = (G59) cột G đã làm hết việc của cột U rồi.

Cuối cùng là xin cảm ơn HYEN,ChanhTQ,các anh chị đóng góp ý kiến cho topic này,cảm on GPE
 
Upvote 0
Wao,cảm ơn HYEN vô cùng,được rồi HYEN ơi như vậy mới là giống ý em từ trước giờ đó.Bây giờ còn khâu hoàn thiện và chỉnh sửa 1 số chi tiết nhỏ nhờ các anh chi giúp em.
1 /Khi đánh SL vào D thì cột tên hàng (cột B)tự động hiện tên hàng tương ứng liền chứ không phải chờ sau khi chọn CK mới hiện ra tên hàng.
2 /Khi chọn CK 0 thì lúc này cột CK (cột E)sẽ clear trống để mình tự đánh CK vào và khi mình đánh CK vào thì cột giá bán (cộtt F) cũng phải tính ra giá giống như mình chọn CK 1,2,3,4 vậy đó,hiện giờ khi chọn CK 0 và đánh tay CK vào nó đơ đơ 1 chổ hà <===== phần này quan trọng lắm đó
3 /Mình có thể đổi Validation thành radio được không?Vì hiện giờ nếu em sử dụng thì em sẽ biết CK 1 là sao,CK 2 là sao,.. còn nếu em mướn thêm 1 nhân viên khác họ sẽ không biết và không nhớ.Do đó em muốn em tự sữa các tên gọi đó lại thành 1 tên gọi khác bất kỳ lúc nào.
4 /Em muốn khi mới mở file lên để sử dụng thi mục CK luôn luôn mặc định là CK 0<===== và điều này đồng nghĩa là mình sẽ không cần (I9) và cột phụ U làm gì đúng không các anh chị vì (I9) = (G59) cột G đã làm hết việc của cột U rồi.
Phần làm phiếu bán hàng này nếu theo nghĩa đơn giản thì cũng không phức tạp lắm. Có chăng là sự diễn đạt yêu cầu chưa rõ hay chưa cụ thể lắm. Những yêu cầu của bạn ở sh HDon mình sẽ diễn "nôm" như sau nhé. Khoan bàn về kỹ thụât hay code.
1 /Khi đánh SL vào D thì cột tên hàng (cột B)tự động hiện tên hàng tương ứng liền chứ không phải chờ sau khi chọn CK mới hiện ra tên hàng.
4 /Em muốn khi mới mở file lên để sử dụng thi mục CK luôn luôn mặc định là CK 0<===== và điều này đồng nghĩa là mình sẽ không cần (I9) và cột phụ U làm gì đúng không các anh chị vì (I9) = (G59) cột G đã làm hết việc của cột U rồi.
Khi lập phiếu bán hàng (PBH) mới, số PBH sẽ update và sh Hdon sẽ hiện 50 MaHH, tên hàng và giá bán với CK=0. Khi đánh số lượng tương ứng vào thì TenHH, GiaBan và ThanhTien sẽ màu đen với CK=0. Dùng conditional Format.
Lúc này cũng không cần I9 hay cột U, mình sẽ làm 1 text box hiện tổng G59 với CK =0.
2 /Khi chọn CK 0 thì lúc này cột CK (cột E)sẽ clear trống để mình tự đánh CK vào và khi mình đánh CK vào thì cột giá bán (cộtt F) cũng phải tính ra giá giống như mình chọn CK 1,2,3,4 vậy đó,hiện giờ khi chọn CK 0 và đánh tay CK vào nó đơ đơ 1 chổ hà <===== phần này quan trọng lắm đó
Khi nhập CK thì GiaBan và thành tiền sẽ thay đổi theo CK.
3 /Mình có thể đổi Validation thành radio được không?Vì hiện giờ nếu em sử dụng thì em sẽ biết CK 1 là sao,CK 2 là sao,.. còn nếu em mướn thêm 1 nhân viên khác họ sẽ không biết và không nhớ.Do đó em muốn em tự sữa các tên gọi đó lại thành 1 tên gọi khác bất kỳ lúc nào.
Vấn đề này cũng dễ.
Bạn thống nhất lại form PBH nhé. Vấn đề khác thì tính sau.
 
Upvote 0
Fải đua thời gian với cha ThuNghi mới được

Xem thêm trong file kèm theo
 

File đính kèm

Upvote 0
Vâng,chắc là do em diễn đạt yêu cầu chưa đúng nghĩa nên vấn đề trở nên khó

Khi lập phiếu bán hàng (PBH) mới, số PBH sẽ update và sh Hdon sẽ hiện 50 MaHH, tên hàng và giá bán với CK=0. Khi đánh số lượng tương ứng vào thì TenHH, GiaBan và ThanhTien sẽ màu đen với CK=0. Dùng conditional Format.

Khi lập phiếu bán hàng (PBH) mới, số PBH sẽ update và sh Hdon sẽ hiện 50 MaHH, tên hàng,SL,CK,giá bán,thành tiền trống = 0. Khi đánh số lượng tương ứng vào thì TenHH sẽ hiện ra, GiaBan hiện ra = mệnh giá gốc (chưa trừ CK VD : A10 = 10.000 )và ThanhTien hiện ra = SL*Giá Bán (SL*10.000),CK thì vẫn = 0.Bao nhiêu đó là đươc không cần tạo 1 text box hiện tổng G59.

Khi nhập CK thì GiaBan và thành tiền sẽ thay đổi theo CK.
Lúc này chúng ta sẽ chọn CK và GiaBan và thành tiền sẽ thay đổi theo CK đã chọn,VD : Nếu chọn CK 1,2,3,4 thì sẽ lấy CK từ sh HHoa,còn nếu chọn CK 0 thì CK ở PBH=0 và ta sẽ tự đánh vào,khi đánh CK vào thì GiaBan và thành tiền sẽ thay đổi theo CK mới đánh vào
 
Lần chỉnh sửa cuối:
Upvote 0
Xem thêm trong file kèm theo

Chỉ giải quyết được vấn đề 1 và 3 còn vấn đề 2 chưa được anh ChanhTQ ơi.Anh ChanhTQ thử chọn CK 0 và đánh vào cột CK (cột E) một vài CK và xem ở cột Giá bán cột (F) xem nó không có thay đổi gì cả chổ này phải thay đổi mới đúng
 
Lần chỉnh sửa cuối:
Upvote 0
Hỏi thêm cho rõ

Chỉ giải quyết được vấn đề 1 và 3 còn vấn đề 2
2 /Khi chọn CK 0 thì lúc này cột CK (cột E)sẽ clear trống để mình tự đánh CK vào và khi mình đánh CK vào thì cột giá bán (cộtt F) cũng phải tính ra giá giống như mình chọn CK 1,2,3,4 vậy đó,hiện giờ khi chọn CK 0 và đánh tay CK vào nó đơ đơ 1 chổ hà <===== phần này quan trọng lắm đó
chưa được anh ơi.Anh thử chọn CK 0 và đánh vào cột CK (cột E) một vài CK và xem ở cột Giá bán cột (F) xem nó không có thay đổi gì cả chổ này phải thay đổi mới đúng


(*) Mức chiết khấu mà mình đánh vô trang HDon có fải lưu vô vô trang 'HHoa' sau đó hay không? Hay mức này là theo tình cảm hay thỏa thuận giữa khách & chủ hàng.

(*) Như vậy chiết khấu của các mặt hàng khác nhau trong 1 hóa đơn có thể là khác nhau & fải tính cụ thể cho từng mặt hàng?
 
Upvote 0
(*) Mức chiết khấu mà mình đánh vô trang HDon có fải lưu vô vô trang 'HHoa' sau đó hay không? Hay mức này là theo tình cảm hay thỏa thuận giữa khách & chủ hàng.

(*) Như vậy chiết khấu của các mặt hàng khác nhau trong 1 hóa đơn có thể là khác nhau & fải tính cụ thể cho từng mặt hàng?
Em với Bác Sa cùng nhau hoàn thiện cho bạn ấy nha, không dám ganh đua với Bác. Hy vọng làm xong anh em mình sẽ được 1 chầu bầu đá + ...
Em làm thử file lại phần sh HDon thôi, tác giả OK em sẽ làm tiếp. Tạm thời dùng validation, sửa sau.
 

File đính kèm

Upvote 0
Hoan hô,đúng ý em rồi đó ThuNghi ơi,về phần lấy Chiếc Khấu (CK) coi như đã hoàn thiện,bây giờ xin các anh chị hoàn thiện những phần còn lại giúp em (các anh chị có kinh nghiệm tổ chức dữ liệu như thế nào cho tốt thì xin chỉnh sữa giúp em luôn 1 thể,sau này em sẽ nhờ các anh chị phát triển thêm phần Báo Cáo XNT,Báo Cáo xem ngày hôm nay bán được bao nhiêu cái và bán được bao nhiêu tiền từ PBH,Thêm sữa xoá khách hàng và hàng hoá,Cài đặt giá bán)

Không biết các anh chi ở HN hay TP HCM nếu HCM em xin mời các anh chị nhậu 1 chầu hihi
Qua lần được giúp đỡ này em thật sự biết ơn và yêu thích diễn đàn GPE,nếu em giúp đỡ lại được các anh chị ở phần nào thì em sẵn lòng giúp đỡ(không giúp về mặt kiến thức được nha)
Số phone của em các anh chị có thể gọi khi lúc nào cần :0908.766.112

Em chân thành cảm ơn các anh chị,cảm ơn GPE

Lưu ý:các anh chị cho em xin phần ghi chú chổ này dùng làm gì trong code với để em nhìn nếu em hiểu được phần nào thì em có thể học hỏi phần đó
 
Lần chỉnh sửa cuối:
Upvote 0
Sau đây là fần thỏa cho lưu í của chủ topic

Macro khởi sự là cái ni:
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
 Application.ScreenUpdating = False
2 If Not Intersect(Target, [f1]) Is Nothing Then
  UpdateCK
 End If
Application.ScreenUpdating = True

End Sub

Trong file của ThuNghi dài hơn chút, nhưng cũng chỉ là dài dòng mà thôi;
Quan trong là dòng lệnh 2 & dòng 3;

Dòng lệnh 2 nói rằng: Hễ cứ đụng vào ô nào đó bất kỳ trên trang tính khác [F1] thì thực hiện macro có tên ở dòng lệnh 3
(Đó là macro Update dưới đây)

PHP:
Option Explicit   'Khai Báo Các Biến Dùng Chung Trong Modyle:' 
Dim SoHD As String, Num As Integer
Dim Sh As Worksheet, Rng As Range, Cls As Range
Dim endR As Long, i As Long
Dim wf As WorksheetFunction


Sub UpdateCK()
Set wf = WorksheetFunction    ' Gán Đối Tượng Cho 1 Biến Đối Tượng'
With Sheets("HHoa")     ' Với Trang "HHoa"'
  endR = .Cells(65000, 3).End(xlUp).Row    'Lấy Dòng Cuối Cột "C" có Dữ Liệu Gán Vô Biến Đã Khai Báo'
  Set Rng = .Range("C4:M" & endR)           'Lấy Vùng Từ C4 Cho tới Dòng Cuối Của Cột M Gán Vô Biến Rng'i
End With
With Sheets("HDon")    'Với Trang tính "HDon"'
  Num = .[f1]               ' Lấy Trị tại [F1] gán vô biến Num'
  For i = 59 To 10 Step -1     'Tạo Vòng Lặp từ dòng 59 cho tới 10 - Vùng ta nhập liệu'
    If Len(.Cells(i, 4)) = 0 Then       'Nếu Chiếu Dài Dữ Liệu của Ô thuộc dòng đang khảo sát ở cột 4 = 0'
      .Rows(i).EntireRow.Hidden = True       ' Thì Đem Ẩn Dòng Đó Đi'
    Else                                    ' Bằng không thì:'
      If Num = 0 Then                ' Nếu Num = 0 Thì:'
        .Cells(i, 5) = 0                  'Ô thuộc cột 5 của Dòng Đang khảo sát gán trị Bằng [SIZE="3"]0[/SIZE] '
      Else                                  ' Nếu Ngược Lại:'
        ' Ô thuộc Cột 5 Của Dòng KS sẽ nhận trị từ hàm LOOKUP()'  
        .Cells(i, 5) = wf.VLookup(.Cells(i, 3), Rng, Num * 2 + 2, 0)
      End If               'Kết thúc Đ/k Trong'
    End If                  'Kết thúc Đ/k Ngoài'
  Next i                     'Kết thúc Vòng Lặp'
End With
 'Xã biến để fục hồi bộ nhớ:' 
Set Rng = Nothing: Set wf = Nothing
End Sub


Chịu khó đọc nha
 
Upvote 0
Cảm ơn SA_DQ vấn đề khó đọc hay đọc nhiều không quan trọng muốn học hỏi là chịu khó đọc thôi,chỉ sợ muốn đọc mà không có cái để đọc hoặc đọc mà không biết cái đó nói gì thì mới sợ.

Có 1 vấn đề em đọc nhưng vẫn chưa hiểu là Khi chọn CK F1 thay đổi thì dòng lệnh nào thực hiện việc lấy CK từ sh HHoa và dán và sh HD theo đúng từng MaHH

Cảm ơn nhiều thật nhiều
 
Lần chỉnh sửa cuối:
Upvote 0
Tôi hoàn thiện thêm 1 chút:
1/ Về chọn KH, bạn Click phải vào G7 thì 1 form DMKH sẽ hiện ra. Vấn đề tạo từ Array này tôi cũng đang nghiên cứu.
2/ Sh CSDL tôi tách thành Main và Sub gồm chi tiết và tổng hợp BH.
3/ Nếu khi lưu thì sẽ lưu theo giá bán đã trừ CK hay là lưu theo mệnh giá và CK. Bạn cân nhắc thử để tôi làm.
Trước mắt bạn xem qua, sẽ hoàn thành từng bước. Có gì sai mong lượng thứ. Chúac thành công.
 

File đính kèm

Upvote 0
@ ThuNghi !

1 /Chổ này em muốn có sự kiện double click nghĩa là khi chọn khách hàng ta bấm double click vào tên KH là xong không cần phải bấm thêm button chọn ở trên,liệu có thể được không ThuNghi.Không biết ThuNghi cho hiện MaKH ở G6 làm mục đích gì?mình muốn chổ đó không in ra khi in HD có được không?
2 /Em không rành về kỹ thuật thiết kế CSDL,chổ này không thành vấn đề.Nhưng ở sh BanTH mình thấy Ma KH sao lại là Số PBH?
3 /khi lưu thì sẽ lưu theo giá bán đã trừ CK và CK (HD hiện thị như thế nào thì lưu theo vậy).
4 /Ở sh DMKH có phần Cập Nhật DMKH nhưng cập nhật như thế nào?

Có gì sai mong lượng thứ
Hi em là người kinh doanh nên mù tịch về tin học,nhưng vì công việc đòi hỏi sự nhanh và chính xác nên ráng mài mò học hỏi,được các anh chị giúp đỡ nhiệt tình như thế này là mình vô cùng biết ơn rồi không dám trách móc gì đâu (có dịp xin được hậu tạ)
 
Lần chỉnh sửa cuối:
Upvote 0
@ ThuNghi !

1 /Chổ này em muốn có sự kiện double click nghĩa là khi chọn khách hàng ta bấm double click vào tên KH là xong không cần phải bấm thêm button chọn ở trên,liệu có thể được không ThuNghi.Không biết ThuNghi cho hiện MaKH ở G6 làm mục đích gì?mình muốn chổ đó không in ra khi in HD có được không?
OK, đưa makh vào G6 để mình ktra, nếu kg muốn có thể cho màu trắng là kg in ra.
Để làm thêm double click.
Vậy mình sẽ làm tiếp phần lưu nhé. Quan trọng nhất là CSDL OK thì muốn tạo báo cáo gì cũng OK. Yên tâm về các báo cáo. Lĩnh vực này cũng khá quen thuộc nên chắc không khó lắm.
 
Upvote 0
Xin hỏi ThuNghi ?

Ở sh HD sau khi thực hiện Print Preview xong và trả về trạng thái bình thường (Normal) lúc này mình chỉnh lại CK thì thấy code chạy rất rất chậm ThuNghi xem thử phần đó
 
Upvote 0
Xin hỏi ThuNghi ?

Ở sh HD sau khi thực hiện Print Preview xong và trả về trạng thái bình thường (Normal) lúc này mình chỉnh lại CK thì thấy code chạy rất rất chậm ThuNghi xem thử phần đó
Tôi chưa sửa gì về CK cả, và hiện tại tôi cũng chọn thử như bạn và chọn lại CK thì cũng không thấy chậm. Bạn có thể gởi cái hình mà bạn chọn Print Preview.
Nếu duyệt # 50 dòng để lấy CK thì kg thể nào chậm dc.
 
Upvote 0
Không mình chỉ duyệt có 4 hơac 5 dòng sản phẩm thôi,để mình học cách quay video clip thì ban mới thấy chứ chụp hình thì làm sao thấy được cái chậm

Print Preview.jpg

[video=youtube;2XVWH5Nn5KY]http://www.youtube.com/watch?v=2XVWH5Nn5KY[/video]
 
Lần chỉnh sửa cuối:
Upvote 0
Không mình chỉ duyệt có 4 hơac 5 dòng sản phẩm thôi,để mình học cách quay video clip thì ban mới thấy chứ chụp hình thì làm sao thấy được cái chậm

View attachment 51282
Khỏi cần, quy trình là gì
1/ Tao HD mới
2/ Nhập sl
3/ Chọn CK
4/ Print Preview, in
5/ Lưu
B4 và B5 cái nào làm trước, hay quy trình thế nào.
Thêm câu vào đầu và cuối code UpdateCK thử xem
Application.ScreenUpdating = False
và cuối
Application.ScreenUpdating = True

Bạn có thể dự trù số PBH 1 năm # bao nhiêu.
Còn số PBH có nên làm từng tháng, vd như là PX1008/001 ie năm 2010 và tháng 8 và số phiếu.

Hiểu rồi, để xem lại, bạn siêu quá. Mình chưa biết cái quay video đó.

Bạn thay sub UpdateCK mới nhé

PHP:
Sub UpdateCK()
With Application
  .ScreenUpdating = False
  .Calculation = xlCalculationManual
End With
Set wf = WorksheetFunction
With Sheets("DMHH")
  endR = .Cells(65000, 3).End(xlUp).Row
  Set Rng = .Range("C4:M" & endR)
End With
With Sheets("HDon")
  Num = .[f1]
  For i = 59 To 10 Step -1
    If Len(.Cells(i, 4)) = 0 Then
      .Rows(i).EntireRow.Hidden = True
    Else
      If Num = 0 Then
        .Cells(i, 5) = 0
      Else
        .Cells(i, 5) = wf.VLookup(.Cells(i, 3), Rng, Num * 2 + 2, 0)
      End If
    End If
  
  Next i
End With
Set Rng = Nothing: Set wf = Nothing
With Application
  .ScreenUpdating = True
  .Calculation = xlCalculationAutomatic
End With
 
Lần chỉnh sửa cuối:
Upvote 0
Mình có quay video rồi đó ThuNghi xem thử.

1 /Mộttháng mình xuất khoản 3000 đến 5000 phiếu,số phiếu dùng từng tháng cũng được ThuNghi ơi
2 /Thêm 2 đoạn code trên vào cũng không cải thiện được gì ThuNghi ơi

Hiểu rồi, để xem lại, bạn siêu quá. Mình chưa biết cái quay video đó.
Siêu đâu mà siêu mới lên google search ra đó ThụNghi ơi hihi :D

3 /Sub mới cũng vậy không hết chậm,chỉ có cách tắt mở lên lại thì hết

@ThuNghi : Liệu mình có thể ra nick chat không,chứ viết trả lời như thế này giống SPAM diễn đàn này quá
 
Lần chỉnh sửa cuối:
Upvote 0
Mình có quay video rồi đó ThuNghi xem thử.

1 /Mộttháng mình xuất khoản 3000 đến 5000 phiếu,số phiếu dùng từng tháng cũng được ThuNghi ơi
2 /Thêm 2 đoạn code trên vào cũng không cải thiện được gì ThuNghi ơi

3 /Sub mới cũng vậy không hết chậm,chỉ có cách tắt mở lên lại thì hết
Đang xem lại, về nhà sẽ xem và trả lời ngay. Nếu CK -> in -> Lưu, sao lại phải chọn CK lại. Chọn CK có thể là dùng bước sửa.
Chưa tìm ra tại sao khi Print Preview xong thì chậm.
Nhờ các anh chị có theo dõi topic này xem giúp lại. Cám ơn nhiều.

Tôi có làm thử 1 file về hide và unhide theo code (sh VD)
Nhưng khi Print Preview xong thì code Hide chạy chậm lại.
Nhờ các bạn xem xét giúp.
PHP:
Sub unHide01()
With Sheets("VD")
  .Rows("10:59").EntireRow.Hidden = False
End With
End Sub
Sub Hide01()
With Application
  .ScreenUpdating = False
  .Calculation = xlCalculationManual
End With
Sheets("VD").Select
unHide
With Sheets("VD")
  For i = 59 To 10 Step -1
    If .Cells(i, 4) = 0 Then
     .Rows(i).EntireRow.Hidden = True
    End If
  Next i
End With
'Set Rng = Nothing: Set wf = Nothing
With Application
  .ScreenUpdating = True
  .Calculation = xlCalculationAutomatic
End With
End Sub
Đính kèm file
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Vậy là do code Hide - Unhide rồi phải không ThuNghi,vậy mình để phần đó tính sau đi mình dùng tạm code lọc - không lọc cũ lại có được không.Hôm nay cuối tháng rồi công việc mình hơi bận chắc không theo dõi topic này thường được mọi việc nhờ các anh chị trong diễn đàn cũng như ThuNghi hoàn thiện giúp,tôi xin chân thành cảm ơn về sự giúp đỡ của diễn đàn và các anh chị

Xin gởi lời cảm ơn sâu sắc nhất tới HYEN,ChanhTQ,ThuNghi và các anh chị theo dõi cũng như giúp đỡ tôi trong topic này
 
Lần chỉnh sửa cuối:
Upvote 0
Chưa tìm ra tại sao bị chậm, vậy vận dụng phương thức SpecialCells theo bài dạy của Bác Sa vậy. (Code Loc)
Tôi làm tiếp phần lưu, còn phần xem, sửa và lưu lại PBH old thì chưa làm.
Bạn test đi, có gì sẽ làm tiếp.
Trong file tôi có sửa format của soPBH là PXyymm/00x và lấy số phiếu mới theo dòng cuối sh CTBan +1.
Chúc thành công.

Hoàn thiện cơ bản file phiếu bán hàng theo yêu cầu. File PhieuNhap05
Code còn dài dòng do chưa trau chuốt lại. Bạn cứ chạy thử, sẽ hoàn thiện hơn sau.
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Thành thật xin lỗi các anh chị đã theo dõi topic của em và ThuNghi,ChanhTQ,HYEN17,thời gian qua em bận quá bận đến mức không thể viết trả lời được.Hôm nay trở lại diễn đàn thấy được sự giúp đỡ của ThuNghi (phieunhap05) em rất vui,sau khi xem qua file em có 1 vài ý kiến nhỏ nhờ các anh chị và ThuNghi xem giúp em.
1/ Phần số phiếu em thấy nó không tự tăng lên 1 sau khi bấm Tạo HD mới.
2/ Xin chuyển giúp em chổ F1 từ Validation thành 5 nút radio như lúc ban đầu,xin cảm ơn.
3/ Tại Button Tạo HD mới em muốn có 1 bẫy lỗi kiểm tra là : xem HD đó có được lưu chưa?Nếu chưa lưu thì hiện thông báo "HD này chưa được lưu,hãy lưu trước khi tạo mới"-->Chọn YES (lưu + tạo mới),chon NO (tạo mới không lưu).
4/ Tại cột CK% của sh HDon và DMHH em muốn khi mình đánh 6 thì tự động nó chuyển thành 6.00% hoặc đánh 675 -> 6.75% hoặc 6.5->6.5% nghĩa là em đánh kiểu nào cũng được kết quả cuối cùng là số thập phân hết.(Lưu ý em chỉ muốn code chỉ chạy trên các cột CK% của 2 sh HDon và DMHH chứ không ảnh hướng đến toàn bộ Excel)
5/ Tai sh DMKH em thấy có button "Cap Nhat DM KH" nhưng em không biết sử dụng ra sao hết,xin chỉ giúp em phần này.
6/ Tại sh DMHH em có sữa lại các cột CK%,em đã Merge các mệnh giá có cùng CK% lại với nhau nhầm mục đích đơn giản hóa việc cài đặt giá,vì vậy xin các anh chị giúp em chỉnh lại code Update CK sao cho hợp lý lại (liệu có được không các anh chị?)
7/ Em muốn ở sh DMHH cột CK% của Giá 1 bằng CK% của Giá 2 - 0.1%.Xin giúp em công thức trừ .

Em có gởi file đính kèm lại,các anh chị xem lại file giúp em

XIn chân thành cảm ơn sự giúp đỡ của các anh chị.
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
1/ Phần số phiếu em thấy nó không tự tăng lên 1 sau khi bấm Tạo HD mới.
Sorry, phần này do lồng if sai. Đã sửa lại.
2/ Xin chuyển giúp em chổ F1 từ Validation thành 5 nút radio như lúc ban đầu
Đã làm lại nhưng vẫn giữ validation. Không cần thì bỏ đi.
3/ Tại Button Tạo HD mới em muốn có 1 bẫy lỗi kiểm tra là : xem HD đó có được lưu chưa?Nếu chưa lưu thì hiện thông báo "HD này chưa được lưu,hãy lưu trước khi tạo mới"-->Chọn YES (lưu + tạo mới),chon NO (tạo mới không lưu).
Có gán thêm 1 phần lưu khi tạo HĐ mới, bạn xem nếu kg OK thì sửa chữa lại 1 chút.
4/ Tại cột CK% của sh HDon và DMHH em muốn khi mình đánh 6 thì tự động nó chuyển thành 6.00% hoặc đánh 675 -> 6.75% hoặc 6.5->6.5% nghĩa là em đánh kiểu nào cũng được kết quả cuối cùng là số thập phân hết.(Lưu ý em chỉ muốn code chỉ chạy trên các cột CK% của 2 sh HDon và DMHH chứ không ảnh hướng đến toàn bộ Excel)
6/ Tại sh DMHH em có sữa lại các cột CK%,em đã Merge các mệnh giá có cùng CK% lại với nhau nhầm mục đích đơn giản hóa việc cài đặt giá,vì vậy xin các anh chị giúp em chỉnh lại code Update CK sao cho hợp lý lại (liệu có được không các anh chị?)
Cái này nên tường minh, làm thêm 1 code bẫy cũng OK nhưng thấy no need. Và lưu ý phần cột CK ở DMHH thì không được merge cell. Và chỉ cần quan tâm CK, không cần tính ra giá làm gì. Có thể bỏ cột tính ra giá ở DMHH nhưng phải giữ TT cột. Nếu bỏ thì báo để sửa code.
5/ Tai sh DMKH em thấy có button "Cap Nhat DM KH" nhưng em không biết sử dụng ra sao hết,xin chỉ giúp em phần này.
Phần này làm thêm thôi, chớ khi chọn maKH thì nó cũng lấy DMKH rồi, có thể bỏ.

7/ Em muốn ở sh DMHH cột CK% của Giá 1 bằng CK% của Giá 2 - 0.1%.Xin giúp em công thức trừ .
Cái này hoàn toàn số học. Tự nghiên cứu.
 

File đính kèm

Upvote 0
Cảm ơn ThuNghi nhiều lắm,như vậy là quá được rồi,em sẽ tự chỉnh sữa lại cho đẹp và như ý của em.Vô cùng biết ơn ThuNghi và các anh chị trong diễn đàn đã giúp đỡ em.

Lưu ý phần cột CK ở DMHH thì không được merge cell.
Nếu như DMHH mình không thể merge cell được thì mình thông qua 1 sheet khác có merge cell để lấy dữ liệu cho cột CK được không.Cụ thể em tạo thêm 1 sheet BGIA (đã merge cell) và em muốn cột CK% của sh DMHH lấy dữ liệu CK% từ sh BGIA có được không?Giá 2 và Giá 3 của sh DMHH bằng Giá 2 và Giá 3 của sh BGIA


Cái này hoàn toàn số học. Tự nghiên cứu.
Hi em có nghiên cứu và làm được nhưng em thấy công thức sao nó đơn giản và kì kì quá nên mới hỏi thôi (em đã tạo công thức bằng cách -0.01) ThuNghi xem giúp coi có đúng không.

Em gởi lại file đính kèm
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Nếu như DMHH mình không thể merge cell được thì mình thông qua 1 sheet khác có merge cell để lấy dữ liệu cho cột CK được không.Cụ thể em tạo thêm 1 sheet BGIA (đã merge cell) và em muốn cột CK% của sh DMHH lấy dữ liệu CK% từ sh BGIA có được không?Giá 2 và Giá 3 của sh DMHH bằng Giá 2 và Giá 3 của sh BGIA
Đã gọi là cơ sở dữ liệu (CSDL) thì không nên merge cell, viết code không khó nhưng không hệ thống, tôi thấy trong sh BGIA mà ct tính đơn giá không nhất quán thì không nên. Tôi đề xúât như sau:
1/ Dùng conditional format ở sh DMHH để tô màu trắng những dòng có CK = dòng trên.
2/ Từ sh DMHH tạo 1 code tạo ra Sh BGIA
3/ Hay làm thêm 1 cột ở Sh DMHH là loại hàng để xác định loại CK theo loại đó. Cột LoaiHH là cột ngoài cùng.
 
Upvote 0
Hi,vấn đề của ThuNghi nói "(CSDL) thì không nên merge cell vì nó không hệ thống" vấn đề này là vấn đề mang tính chuyên nghiệp chăng?còn vấn đề em muốn làm là vấn đề thực dụng em chỉ nghỉ làm sao cho công việc của em vừa nhanh,vừa chính xác,nếu như không merge thì mõi lần cài đặt lại giá là em phải mất gần 30 phút để cài lại,mà mỗi ngày giá bán của em điều thay đổi do đó mỗi ngày em điều phải chỉnh giá như vậy nó rất mất thời gian vã lại hiện giờ mới chỉ có 50 loại hàng hoá nếu sau này nhiều hơn thì sao 50x4gia=200 dòng.Vì những lý do đó + ThuNghi nói sh DMHH không được merge cell nên em mới nghỉ ra 1 sheet phụ BGIA chứ thật ra có sh BGIA hay không điều được cả(vì em có 1 file BAOGIA riêng rồi).

3 đề xuất của ThuNghi nói em thật sự không tưởng tượng được nó là như thế nào cả.
 
Upvote 0
3 đề xuất của ThuNghi nói em thật sự không tưởng tượng được nó là như thế nào cả
Vậy bạn làm lại 1 file chỉ gồm sh BGia và Sh DMHH up lên, số liệu về CK gần giống thực tế . Nhớ là không thay đổi cấu trúc sh DMHH.
Mình sẽ tìm hướng giải quyết. Chớ thấy công thức tính giá có CK mỗi dòng kg đồng nhất là không ổn.
Thực sự sh DMHH thì không cần lấy giá đã CK. Chỉ cần mệnh giá và CK là OK.
Chỉ cần làm khoảng vài dòng ở sh BGIA và cho thấy sự thay đổi CK ở từng loại giá.
 
Lần chỉnh sửa cuối:
Upvote 0
Thực sự sh DMHH thì không cần lấy giá đã CK. Chỉ cần mệnh giá và CK là OK.
Đúng vậy thực sự mình chỉ cần quan tâm đến CK thồi còn cột Giá bán đã CK thì không cần thiết,sỡ dĩ mình thêm vào là để đôi lúc mình nhìn và so sánh cho dễ hiểu và đỡ sai sót thôi

Xin nói rõ hơn cho ThuNghi dễ hiểu dễ hình dung
Trước giờ mình có 1 file Báo Giá riêng biệt và mỗi ngày mình cài đặt sẵn CK và in ra để phát cho khách hàng để chào giá,nhưng hôm nay mình gộp chung vào file phieunhap vì mình muốn chỉ cần cài đặt 1 lần cho sh BGIA thôi thì sh DMHH cũng sẽ được tự động cài đặt giá theo không cần phải lặp lại công việc cài giá nữa.
 

File đính kèm

Upvote 0
Đúng vậy thực sự mình chỉ cần quan tâm đến CK thồi còn cột Giá bán đã CK thì không cần thiết,sỡ dĩ mình thêm vào là để đôi lúc mình nhìn và so sánh cho dễ hiểu và đỡ sai sót thôi

Xin nói rõ hơn cho ThuNghi dễ hiểu dễ hình dung
Trước giờ mình có 1 file Báo Giá riêng biệt và mỗi ngày mình cài đặt sẵn CK và in ra để phát cho khách hàng để chào giá,nhưng hôm nay mình gộp chung vào file phieunhap vì mình muốn chỉ cần cài đặt 1 lần cho sh BGIA thôi thì sh DMHH cũng sẽ được tự động cài đặt giá theo không cần phải lặp lại công việc cài giá nữa.
Nhớ kiểm tra nhiều tình huống, ì OK thì gắn vào file nhé. Làm với file merge mình thấy không an tâm.
 

File đính kèm

Upvote 0
Nhớ kiểm tra nhiều tình huống, ì OK thì gắn vào file nhé. Làm với file merge mình thấy không an tâm.

Hi không an tâm là không an tâm chuyện gì và không an tâm chổ nào như thế nào hả ThuNghi,nói em biết để em liệu cơm gáp mấm :(

File ThuNghi đúng là không thỏa cụ thể là
1/ Nếu sét CK cho mặt hàng A còn từ B10 trở xuống để trống không có CK thì lúc này toàn bộ CK từ B10 trở xuống điều lấy CK của A500.
2/ Tương tự tình huống 1 nếu sét CK cho mặt hàng A và C còn B và các mặt hàng khác bỏ trống thì các mặt hàng đó điều lấy CK của mặt hàng cuối cùng nằm trên nó để làm CK cho nó
 
Upvote 0
Hi không an tâm là không an tâm chuyện gì và không an tâm chổ nào như thế nào hả ThuNghi,nói em biết để em liệu cơm gáp mấm :(

File ThuNghi đúng là không thỏa cụ thể là
1/ Nếu sét CK cho mặt hàng A còn từ B10 trở xuống để trống không có CK thì lúc này toàn bộ CK từ B10 trở xuống điều lấy CK của A500.
2/ Tương tự tình huống 1 nếu sét CK cho mặt hàng A và C còn B và các mặt hàng khác bỏ trống thì các mặt hàng đó điều lấy CK của mặt hàng cuối cùng nằm trên nó để làm CK cho nó
Nếu mà để trống làm ơn đừng merge cell, vì code nó chỉ lấy dk là nếu merge và =0 thì lấy CK của trên nó.
Để nghiên cứu tiếp thử thế nào. Hiện tại chưa biết cách nào test là phần trống đó là thuộc phần ô nào merge.
Vậy nếu mà để trống thì nên nhập 0 vào thì sẽ OK. Trước mắt làm thế đã. Tôi thấy làm báo giá mà nhập hết CK thì cũng đâu mất thời gian nhiều. Có thể dùng AutoFilter theo từng nhóm mà gán CK. Hay mình dùng phím Ctr chọn nhiều mặt hàng và tạo CK.
Trước dùng tạm đã.
Tiện đây nhờ các bạn nghiên cứu sửa giúp code theo yêu cầu của bạn HPhuc giúp.
Cám ơn nhiều.
PHP:
Sub CapNhatDmHH()
With Application
  .Calculation = xlCalculationManual:  .ScreenUpdating = False
End With
Dim endR As Long, i As Long
Dim CK2 As Double, CK3 As Double
Dim ArrMaHH(), ArrCK02(), ArrCK03()
Dim rngDM As Range, rngCK02 As Range, rngCK03 As Range
'xoa DMHH
With Sheets("DMHH").Range("A4")
  endR = .Cells(1000, 2).End(xlUp).Row 'Lay theo cot tenHH'
 .Resize(endR, 4).ClearContents 'Xoa DM
 .Offset(, 7).Resize(endR, 1).ClearContents 'Xoa CK2'
 .Offset(, 9).Resize(endR, 1).ClearContents 'Xoa CK3'
End With
With Sheets("BGia")
 endR = .Cells(1000, 2).End(xlUp).Row 'Lay theo cot tenHH'
 ArrMaHH = .Range("A8:D" & endR).Value
 Set rngCK02 = .Range("E8:E" & endR) 'vung co gia 2'
 Set rngCK03 = .Range("G8:G" & endR) 'vung co gia 3'
End With
endR = endR - 8 + 1: CK2 = 0: CK3 = 0
ReDim ArrCK02(1 To endR, 1 To 1), ArrCK03(1 To endR, 1 To 1)
For i = 1 To endR
  'xet theo vung co CK2'
  If rngCK02(i).MergeCells = True Then
    If rngCK02(i) = 0 Then
     CK2 = CK2
    Else
     CK2 = rngCK02(i)
    End If
    ArrCK02(i, 1) = CK2
  Else
    ArrCK02(i, 1) = rngCK02(i)
  End If
  'xet theo vung co CK3'
  If rngCK03(i).MergeCells = True Then
    If rngCK03(i) = 0 Then
     CK3 = CK3
    Else
     CK3 = rngCK03(i)
    End If
    ArrCK03(i, 1) = CK3
  Else
    ArrCK03(i, 1) = rngCK03(i)
  End If
Next i
'Gan lai vao DMHH
With Sheets("DMHH").Range("A4")
 .Resize(endR, 4) = ArrMaHH 'Gan tenHH, Mhh..'
 .Offset(, 7).Resize(endR, 1) = ArrCK02 'gan vao CK2'
 .Offset(, 9).Resize(endR, 1) = ArrCK03 'gan vao CK3'
End With
Set rngDM = Nothing: Set rngCK02 = Nothing: Set rngCK03 = Nothing
Erase ArrMaHH(), ArrCK02(), ArrCK03()
With Application
  .Calculation = xlCalculationAutomatic:  .ScreenUpdating = True
End With
End Sub
File kèm ở bài trên.
 
Upvote 0
Nếu mà để trống làm ơn đừng merge cell, vì code nó chỉ lấy dk là nếu merge và =0 thì lấy CK của trên nó.
Vậy nếu mà để trống thì nên nhập 0 vào thì sẽ OK.

Mình cũng đã thử điền CK =0.00% nhưng nó cũng không có cập nhật ThuNghi xem lại.
Thật ra mình chỉ test những trường hợp có thể xảy ra thôi chớ từ trước giờ mình chưa bao giờ báo giá với CK=0 cả,vì vậy dùng như vậy cũng là quá tốt rồi

Tôi thấy làm báo giá mà nhập hết CK thì cũng đâu mất thời gian nhiều. Có thể dùng AutoFilter theo từng nhóm mà gán CK. Hay mình dùng phím Ctr chọn nhiều mặt hàng và tạo CK.

Mất rất nhiều thời gian chứ ThuNghi nếu 50 mã hàng đã mất hết 50 ô nếu cài đặt 2 loại giá sẽ mất hết 100 ô,mà khi sét giá đâu phải thống nhất là tăng 1 hay giảm 1 đâu,nó mang rất nhiều CK cho nhiều mã hàng (ThuNghi xem file báo giá của mình đã gởi nó gần giống với thực tế mình đang àm rồi đó)
Cảm ơn sự nhiệt tình giúp đỡ của ThuNghi,cảm ơn các anh chi trong GPE đã giúp đỡ
 
Upvote 0
Mình cũng đã thử điền CK =0.00% nhưng nó cũng không có cập nhật ThuNghi xem lại.
Thật ra mình chỉ test những trường hợp có thể xảy ra thôi chớ từ trước giờ mình chưa bao giờ báo giá với CK=0 cả,vì vậy dùng như vậy cũng là quá tốt rồi
Mất rất nhiều thời gian chứ ThuNghi nếu 50 mã hàng đã mất hết 50 ô nếu cài đặt 2 loại giá sẽ mất hết 100 ô,mà khi sét giá đâu phải thống nhất là tăng 1 hay giảm 1 đâu,nó mang rất nhiều CK cho nhiều mã hàng (ThuNghi xem file báo giá của mình đã gởi nó gần giống với thực tế mình đang àm rồi đó)
Rất cám ơn yêu cầu của bạn, nhờ vậy mình mới tầm sư học đạo và nhờ HD của NDU nên tôi viết thử code sau.
Bạn nhớ test lại nhé.
Một lần nữa xin cám ơn NDU. Nhiều lúc có những yêu cầu hới khác lại vô tình mình học thêm 1 bài.
PHP:
Option Explicit
Dim MyTmp02 As String, MyAdd02 As String, MyTmp03 As String, MyAdd03 As String
Dim endR As Long, r As Long
Dim ArrMaHH(), ArrCK02(), ArrCK03()
Dim rngDM As Range, rngCK02 As Range, rngCK03 As Range
Sub CapNhatDmHH()
With Application
  .Calculation = xlCalculationManual:  .ScreenUpdating = False
End With
'xoa DMHH'
With Sheets("DMHH").Range("A4")
  endR = .Cells(1000, 2).End(xlUp).Row 'Lay theo cot tenHH'
 .Resize(endR, 4).ClearContents 'Xoa DM'
 .Offset(, 7).Resize(endR, 1).ClearContents 'Xoa CK2'
 .Offset(, 9).Resize(endR, 1).ClearContents 'Xoa CK3'
End With
With Sheets("BGia")
 endR = .Cells(1000, 2).End(xlUp).Row 'Lay theo cot tenHH'
 ArrMaHH = .Range("A8:D" & endR).Value
 Set rngCK02 = .Range("E8:E" & endR) 'vung co gia 2'
 Set rngCK03 = .Range("G8:G" & endR) 'vung co gia 3'
End With
endR = endR - 8 + 1
ReDim ArrCK02(1 To endR, 1 To 1), ArrCK03(1 To endR, 1 To 1)
MyAdd02 = "": MyAdd03 = ""
For r = 1 To endR
  'Phan CK2'
  If rngCK02(r, 1).MergeCells Then
    MyTmp02 = rngCK02(r, 1).MergeArea.Address
    If InStr(MyAdd02, MyTmp02) = False Then
      MyAdd02 = MyAdd02 & MyTmp02
      ArrCK02(r, 1) = rngCK02(r, 1).Value
     Else
      ArrCK02(r, 1) = ArrCK02(r - 1, 1)
    End If
  Else
    ArrCK02(r, 1) = rngCK02(r, 1).Value
  End If
  'Phan CK3'
  If rngCK03(r, 1).MergeCells Then
    MyTmp03 = rngCK03(r, 1).MergeArea.Address
    If InStr(MyAdd03, MyTmp03) = False Then
      MyAdd03 = MyAdd03 & MyTmp03
      ArrCK03(r, 1) = rngCK03(r, 1).Value
     Else
      ArrCK03(r, 1) = ArrCK03(r - 1, 1)
    End If
  Else
    ArrCK03(r, 1) = rngCK03(r, 1).Value
  End If
Next r
With Sheets("BGIA")
  .[J8].Resize(r - 1, 1) = ArrCK02
  .[K8].Resize(r - 1, 1) = ArrCK03
End With
'Gan lai vao DMHH'
With Sheets("DMHH").Range("A4")
 .Resize(endR, 4) = ArrMaHH 'Gan tenHH, Mhh..'
 .Offset(, 7).Resize(endR, 1) = ArrCK02 'gan vao CK2'
 .Offset(, 9).Resize(endR, 1) = ArrCK03 'gan vao CK3'
End With
Set rngDM = Nothing: Set rngCK02 = Nothing: Set rngCK03 = Nothing
Erase ArrMaHH(), ArrCK02(), ArrCK03()
With Application
  .Calculation = xlCalculationAutomatic:  .ScreenUpdating = True
End With
End Sub
 
Upvote 0
Cảm ơn sự tận tâm của ThuNghi,cảm ơn sự giúp đỡ của anh NDU.Bây giờ thì file của em có thể nói là đã hoàn thiện,em sẽ chỉnh sữa về mặt giao diện để nhìn đẹp 1 chút và đi vào sử dụng

Em chân thành cảm ơn ThuNghi và sự giúp đỡ của HYEN17,ChanhTQ@,ndu,SA_DQ,...và các anh chị trong dieen đàn GPE rất nhiều.

Em không biết trong code có đoạn này dùng làm gì?có phải tạo ra 2 cột J và K ở sh BGIA hay không?

PHP:
With Sheets("BGIA")
  .[J8].Resize(r - 1, 1) = ArrCK02
  .[K8].Resize(r - 1, 1) = ArrCK03
End With
@ThuNghi thấy file này cần làm thêm những gì và chỉnh sữa những gì,xin cho ý kiến để mình có thể học hỏi không?
 
Lần chỉnh sửa cuối:
Upvote 0
Em không biết trong code có đoạn này dùng làm gì?có phải tạo ra 2 cột J và K ở sh BGIA hay không?

PHP:
With Sheets("BGIA")
  .[J8].Resize(r - 1, 1) = ArrCK02
  .[K8].Resize(r - 1, 1) = ArrCK03
End With
Sorry, bạn bỏ đi, do lúc làm để test nên quên bỏ.
 
Upvote 0
Tôi có nhận msg từ bạn về khi tạo hđ mới, nếu CTBan chưa có thì phải lấy số mới của năm/tháng
Vấn đề này tôi đã có làm ở code
Vấn đề là ở chỗ bạn yêu cầu là khi tạoHD thì phải lưu HĐ hiện hành, lúc này hiện hành chưa có gì cả nên funtion kiemtra bắt nó thoát ra ngoài.
Để giải quyết vấn đề này:
1/ Dễ nhất, nếu CT Bán chưa có gì thì lần đầu tiên bạn nhập số HD theo chuẩn vào G5 sh PBH
2/ Tạo thêm 1 icon tạo HD New
3/ Làm 1 code kiểm ra là hiện tại chưa có cái gì cả thì không lưu (kiemtra) mà tạo 1 số mới.
Để tôi viết thử code xem sao.
Bạn sửa 2 nơi như sau
1/ Thay mới sub này, thêm đoạn kiểm tra.
PHP:
Private Sub CommandButton2_Click() 'Tao Moi'
With Application
  .ScreenUpdating = False
  .Calculation = xlCalculationManual
  .EnableEvents = False
End With
Dim endR As Long, soHD As String
With Sheets("CTBan")
  endR = .Cells(65000, 1).End(xlUp).Row
End With
If endR = 1 Then
  TaoPBH
Else
  LuuPBH
  TaoPBH
End If
With Application
  .ScreenUpdating = True
  .Calculation = xlCalculationAutomatic
  .EnableEvents = True
End With
End Sub
2/ Và thay sub, sub cũ tôi có sai phần Case endr=1, Case 1 mới đúng.
PHP:
Sub TaoSoPBH()
Set Sh = Sheets("CTBan")
With Sh
  endR = .[B65500].End(xlUp).Row
  Select Case endR
    Case 1
      soHD = "PX" & Right(Year(Date), 2) & Right("00" & Month(Date), 2) & "/" & "001"
    Case Is > 1
      soHD = .Cells(endR, 2).Value
      If CLng(Mid(soHD, 3, 2)) = CLng(Right(Year(Date), 2)) Then
        If CLng(Mid(soHD, 5, 2)) = CLng(Month(Date)) Then
          soHD = "PX" & Right(Year(Date), 2) & Right("00" & Month(Date), 2) & "/" & Right("00" & Right(soHD, 3) + 1, 3)
        Else
          soHD = "PX" & Right(Year(Date), 2) & Right("00" & Month(Date), 2) & "/" & "001"
        End If
      End If
    End Select
End With
Set Rng = Nothing: Set Sh = Nothing
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Cảm ơn ThuNghi nhiều .

Vấn đề là ở chỗ bạn yêu cầu là khi tạoHD thì phải lưu HĐ hiện hành

Chổ này ban đầu ThuNghi hiểu sai ý mình rồi,mình nói là khi tạo HD mới thì phải có 1 hàm kiểm tra xem HD này có được Lưu chưa,nếu chưa lưu thì lưu rồi mới tạo mới,còn nếu đã lưu rồi thì tạo HD mới luôn không cần phải lưu chồng lên lại (ThuNghi đã cho lưu chồng lên lại nhưng trước giờ mình cứ để đại vì nó không quan trong nên k nhờ ThuNghi chỉnh lại thôi)

Thứ 2 mình biết mình đã đánh sai chổ nào rồi ThuNghi lập trình Số HD là năm/tháng còn mình đánh vào là tháng/năm nên nó không tăng
 
Upvote 0
Cảm ơn ThuNghi nhiều .



Chổ này ban đầu ThuNghi hiểu sai ý mình rồi,mình nói là khi tạo HD mới thì phải có 1 hàm kiểm tra xem HD này có được Lưu chưa,nếu chưa lưu thì lưu rồi mới tạo mới,còn nếu đã lưu rồi thì tạo HD mới luôn không cần phải lưu chồng lên lại (ThuNghi đã cho lưu chồng lên lại nhưng trước giờ mình cứ để đại vì nó không quan trong nên k nhờ ThuNghi chỉnh lại thôi)

Thứ 2 mình biết mình đã đánh sai chổ nào rồi ThuNghi lập trình Số HD là năm/tháng còn mình đánh vào là tháng/năm nên nó không tăng
Bạn check lại nhé, nếu có HD rồi thì chọn cancel, nó sẽ không lưu và tạo HD mới.
 

File đính kèm

Upvote 0
Cảm ơn ThuNghi đã chỉnh giúp,chắc mình diễn đạt chưa rõ ý nghĩ nên ThuNghi làm chưa đúng,để mình ví dụ cụ thể.

Ví dụ : viết phiếu bán hàng PX0910/006 khi mình viết xong mình bấm Lưu như vậy là mình đã Lưu PBH số PX0910/006,lúc này mình bấm Tạo HĐ mới thì nó tạo luôn HĐ chứ không phải hiện ra thông báo "Da co phieu nay! Ban co muon thay the so phieu nay khong!" rồi phải bấm thêm Cancel rồi mới Tạo HĐ,còn nếu khi mình viết xong phiếu mà mình chưa bấm Lưu thì lúc này phiếu PX0910/006 chưa được Lưu khi đó mình bấm tạo HĐ mới thì sẽ có 1 thông báo hiện ra "PBH này chưa được Lưu,bạn có muốn lưu lại trước khi tạo mới không!" (OK -->để Lưu,Cancel-->không lưu)
 
Upvote 0
Cảm ơn ThuNghi đã chỉnh giúp,chắc mình diễn đạt chưa rõ ý nghĩ nên ThuNghi làm chưa đúng,để mình ví dụ cụ thể.

Ví dụ : viết phiếu bán hàng PX0910/006 khi mình viết xong mình bấm Lưu như vậy là mình đã Lưu PBH số PX0910/006,lúc này mình bấm Tạo HĐ mới thì nó tạo luôn HĐ chứ không phải hiện ra thông báo "Da co phieu nay! Ban co muon thay the so phieu nay khong!" rồi phải bấm thêm Cancel rồi mới Tạo HĐ,còn nếu khi mình viết xong phiếu mà mình chưa bấm Lưu thì lúc này phiếu PX0910/006 chưa được Lưu khi đó mình bấm tạo HĐ mới thì sẽ có 1 thông báo hiện ra "PBH này chưa được Lưu,bạn có muốn lưu lại trước khi tạo mới không!" (OK -->để Lưu,Cancel-->không lưu)
Có thêm bớt vài option nên code có dư vài chỗ, lúc nào rút gọn sau.
 

File đính kèm

Upvote 0
Cảm ơn ThuNghi,không biết ThuNghi có hiểu được ý em diễn đạt không?ThuNghi nói để em diễn đạt lại

Qui trình các bước lamf như sau :

Trường Hợp 1
:

B1:Viết phiếu bán hàng (PX0910/006).
B2:Bấm nút Lưu (PBH PX0910/006 đã được Lưu).
B3:Bấm tạo HĐ mới (lúc này sẽ tạo ngay PBH mới và không cần Thông báo gì hết).

Trường Hợp 2:


B1:Viết phiếu bán hàng (PX0910/006).
B2:Bấm tạo HĐ mới (lúc này sẽ có thông báo hiện ra báo : "PBH này chưa có Lưu,bạn có muốn lưu lại rồi tạo HĐ mới hay không !").
B3:Bấm OK để Lưu,bấm Cancel để tạo HD mới
 
Upvote 0

Trường Hợp 1
:

B1:Viết phiếu bán hàng (PX0910/006).
B2:Bấm nút Lưu (PBH PX0910/006 đã được Lưu).
B3:Bấm tạo HĐ mới (lúc này sẽ tạo ngay PBH mới và không cần Thông báo gì hết).

Trường Hợp 2:


B1:Viết phiếu bán hàng (PX0910/006).
B2:Bấm tạo HĐ mới (lúc này sẽ có thông báo hiện ra báo : "PBH này chưa có Lưu,bạn có muốn lưu lại rồi tạo HĐ mới hay không !").
B3:Bấm OK để Lưu,bấm Cancel để tạo HD mới
Quên mất TH2 này, cũng dễ thôi, mai làm, hình như TH1 làm rồi mà.
TH1:
- Tạo HD mới
- Lưu
- Xóa PBH
Quy trình vậy OK rồi mà.
 
Upvote 0
Cảm ơn ThuNghi.

Sau khi mình test qua mình có vài ý kiến như sau:
TH1:
B1:Viết HD mới
B2:Bấm nút tạo HD mới (lúc này file có hiện msg"Chua co phieu nay! Ban co muon luu so phieu nay khong!").
B3:Bấm Ok thì HD sẽ Lưu và bấm Cancel thì HD sẽ được tạo mới không Lưu

----->TH1 này đã làm việc tốt
TH2:
B1:Viết HD mới
B2:Bấm Lưu (HD sẽ được Lưu) <-------TH2 đã làm được tới này
B3:Bấm tạo HD mới (lúc này file lại hiện msg"Chua co phieu nay! Ban co muon luu so phieu nay khong!").<---- chổ này chưa làm được vì sao?VÌ B2 mình đã bấm Lưu và HD đã được Lưu rồi vậy tại sao lại thông báo msg"Chua co phieu nay! Ban co muon luu so phieu nay khong!" ,tại sao chổ này không cho tạo HD mới luôn hoặc là hiện ra thông báo "Bạn có thật sự muốn xoá HD này để tạo mới không" mà lại hiện ra thông báo msg"Chua co phieu nay! Ban co muon luu so phieu nay khong!")nữa,nó cứ lạp lại thao tác hoài,ThuNghi test lại chổ này giúp Phúc với (phải chăn chổ này nên tạo code so sánh SốHD đang Lưu và SốHD đang có trong CTban nếu 2 cái trùng nhau thì cho TaoPBH mới luôn không ThuNghi).

Lưu ý:ThuNghi xem code phần Lưu là :em chỉ muốn nó Lưu chứ em không muốn nó Lưu rồi XoaPBH như ThuNghi đang làm,em có tò mò chỉnh lại 1 vài chổ trong code của ThuNghi xin ThuNghi lượng thứ phúc gởi lại file đính kèm ThuNghi xem giúp.
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Cảm ơn ThuNghi.

Sau khi mình test qua mình có vài ý kiến như sau:
TH1:
B1:Viết HD mới
B2:Bấm nút tạo HD mới (lúc này file có hiện msg"Chua co phieu nay! Ban co muon luu so phieu nay khong!").
B3:Bấm Ok thì HD sẽ Lưu và bấm Cancel thì HD sẽ được tạo mới không Lưu

----->TH1 này đã làm việc tốt
TH2:
B1:Viết HD mới
B2:Bấm Lưu (HD sẽ được Lưu) <-------TH2 đã làm được tới này
B3:Bấm tạo HD mới (lúc này file lại hiện msg"Chua co phieu nay! Ban co muon luu so phieu nay khong!").<---- chổ này chưa làm được vì sao?VÌ B2 mình đã bấm Lưu và HD đã được Lưu rồi vậy tại sao lại thông báo msg"Chua co phieu nay! Ban co muon luu so phieu nay khong!" ,tại sao chổ này không cho tạo HD mới luôn hoặc là hiện ra thông báo "Bạn có thật sự muốn xoá HD này để tạo mới không" mà lại hiện ra thông báo msg"Chua co phieu nay! Ban co muon luu so phieu nay khong!")nữa,nó cứ lạp lại thao tác hoài,ThuNghi test lại chổ này giúp Phúc với (phải chăn chổ này nên tạo code so sánh SốHD đang Lưu và SốHD đang có trong CTban nếu 2 cái trùng nhau thì cho TaoPBH mới luôn không ThuNghi).

Lưu ý:ThuNghi xem code phần Lưu là :em chỉ muốn nó Lưu chứ em không muốn nó Lưu rồi XoaPBH như ThuNghi đang làm,em có tò mò chỉnh lại 1 vài chổ trong code của ThuNghi xin ThuNghi lượng thứ phúc gởi lại file đính kèm ThuNghi xem giúp.
Nói chung là các code trong file trên gần như đầy đủ, cơ bản là bố trí và logich thế nào cho OK.
Tựa như bàn, ghề, tủ ... của 1 căn nhà, xếp thế nào đề đảm bảo công năng và logich nhất.
Bạn cố gắng bố trí lại các code cho hợp lý nhất theo bạn. Phần code nào chưa thông, bạn đưa lên, mình sẽ cụ thể từng code cho bạn. Như thế bạn sẽ nắm bắt hơn. Do lười nên không test hết các TH cho bạn.
Cố lên nhé.
 
Upvote 0
Nói chung là các code trong file trên gần như đầy đủ, cơ bản là bố trí và logich thế nào cho OK.
Tựa như bàn, ghề, tủ ... của 1 căn nhà, xếp thế nào đề đảm bảo công năng và logich nhất.
Bạn cố gắng bố trí lại các code cho hợp lý nhất theo bạn. Phần code nào chưa thông, bạn đưa lên, mình sẽ cụ thể từng code cho bạn. Như thế bạn sẽ nắm bắt hơn. Do lười nên không test hết các TH cho bạn.
Cố lên nhé.

ThuNghi nói đúng,mình cũng thấy code gần như đầy đủ rồi,mình đã có đủ mọi thứ trong tay nhưng mình vẫn chưa thể bố trí và logic lại sao cho hợp lý được,mình đang cố gắng nghiên cứu cách làm chắc có lẻ hơi lâu vì mình không biết gì về excel cả.Nếu ThuNghi bận không thể giúp được thì cũng không sao,lúc nào giúp được thì ThuNghi nhớ giúp Phúc hoàn thành cho xong phần Phiếu Giao Hàng này với.Phúc còn muốn làm thêm nhiều phần trong file này lắm nhưng Phúc chưa dám nhờ ThuNghi vì rất là ngại khi phải nhờ ThuNghi làm nhiều điều đến thế,Phúc đang nhờ các thành viên khác và đang tìm tòi để làm những phần đơn giản trước sau đó sẽ post lên nhờ ThuNghi cũng như các anh chị trong diễn đàn giúp tiếp.

Cảm ơn rất nhiều về sự giúp đỡ của ThuNghi và các anh chị trong diễn đàn.
 
Upvote 0
Các anh chị GPE và Thunghi thân !

Sau bao ngày tìm tòi và nghiên cứu để làm nốt TH2 ở bài #74 trên,nhưng vì hiểu biết của em về excel còn quá ít dù đã cố gắng hoán đổi mọi thứ nhưng vẫn không làm được như ý muốn,nên hôm nay em post yêu cầu lên đây tha thiết nhờ các anh chị GPE và ThuNghi giúp đỡ mình làm TH2 giống nhứ ý muốn,em vô cùng biết ơn sự giúp đỡ từ phía diễn đàn.Em xin nhác lại TH2 .

TH2:
B1:Viết HD mới
B2:Bấm Lưu (HD sẽ được Lưu)
B3:Bấm tạo HD mới (lúc này code sẽ kiểm tra và hiểu là HD này đã lưu rồi và tiến hành taoPBH mới).

Thứ 2,qua bao ngày vọc phá mình cảm thấy file có 1 vài điểm bất cập nên nhờ các anh chị giúp đỡ chỉnh sữa,thêm bớt luôn 1 thể.

1/ Ở form soPBH em muốn form chỉ view những PBH của ngày hiện tại không nên sort ra hết tất cả các ngày như hiện giờ(vì sort ra như vậy nó rất là nhiều nhìn rối mắt và khó cho việc tìm kiếm PBH nếu như quên số phiếu),đồng thời tại form này em muốn có 2 texbox hoặc menu chọn ngày để đánh vào hoặc chọn ngày cần view từ ngày ... đến ngày...
2/ Ở form DMKH em cũng muốn có 1 texbox dùng để tìm kiếm nhanh để mình có thể tìm nhanh bằng cách đánh tên hoặc họ hoặc mã KH của KH thì form sẽ liệt kê ra những KH có ký tự gần giống với ký tự mình đang đánh.

Rất mong các anh chị giúp đỡ em,em chân thành biết ơn
 
Lần chỉnh sửa cuối:
Upvote 0
Xin chào các anh chị GPE!
Sau bao ngày tìm kiếm em có lụm được đoạn code của anh ndu,em đã vận dụng để giải quyết vấn đề thứ 2 của e là:
2/ Ở form DMKH em cũng muốn có 1 texbox dùng để tìm kiếm nhanh để mình có thể tìm nhanh bằng cách đánh tên hoặc họ hoặc mã KH của KH thì form sẽ liệt kê ra những KH có ký tự gần giống với ký tự mình đang đánh.
Code:
PHP:
Private Sub KhachHang_Change()
Dim lstRes1
 On Error Resume Next
 Set Func = Application.WorksheetFunction
  With Sheet4.Range(Sheet4.[C2], Sheet4.[C65536].End(xlUp))
    Arr1 = Func.Transpose(.Cells)
    End With
  lstRes1 = Filter(Arr1, Me.KhachHang, True, vbTextCompare)
  Me.KHList.List() = lstRes1
End Sub

Nhưng khi sử dụng code trên để tìm nhanh KH và khi đã tìm ra KH cần tìm rồi và em nhấp chọn KH hàng đó thì không được,bị báo lỗi.Em nhờ các anh chị chỉnh lại giúp em,em muốn ráng 1 sự kiện DblClick vào List kết quả tìm được,nghĩa là khi tìm được tên rồi thì nhấp dubleclick vào tên đó thì tên đó sẽ được chọn vào G7 (sheet HDon).

2/ Em đã và đang tìm hiểu để làm "TH2:"và câu hỏi "1" của bài viết trên nhưng chưa làm được,nhờ các anh chị chinh luôn giúp em 2 phần đó

Em xin chân thành cảm ơn
 

File đính kèm

Upvote 0
Các anh chị GPE ơi,giúp em với em làm đau cả đầu mà không được,xin có 1 lời hướng dẫn hay 1 sự giúp đỡ với.Xin được cảm ơn rất nhiều
 
Upvote 0
Xin giúp hoàn thiện code tìm nhanh

Chào các anh chị !

Xin các anh chị giúp em viết code tìm nhanh theo từ gần đúng với tên khách hàng ở FormDMKH.

Xin được cảm ơn các anh chị rất nhiều
 

File đính kèm

Upvote 0

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

Back
Top Bottom