Đăng ký học Excel và VBA cùng GPE tháng 11 - TPHCM

Mua sách "VBA trong Excel - Cải thiện và tăng tốc" tái bản

Mail merge trong excel ?

Thảo luận trong 'Lập Trình với Excel' bắt đầu bởi FOV, 7 Tháng sáu 2007.

  1. FOV

    FOV Thành viên mới

    Chào các Bác,

    Mình có 2 sheet, SheetA (là mẫu báo cáo) link dữ liệu từ SheetB. Mình muốn tạo 2 nút lệnh in trong SheetA như sau:

    - Nút 1: in toàn bộ nhưng có lọc điều kiện ở 1 cột nào đó (Ví dụ: Danh sách in ra chỉ là NAM hoặc NỮ trong cột Giới tính)

    - Nút 2: in 1 vùng từ ... đến .... nhưng chỉ in NAM (hoặc NỮ) trong cột Giới tính.

    Giống như Mail merge bên Word ấy.

    Mong các Bác giúp cho.
    Thanks
    Chúc vui vẻ
    FOV (Mr.)
     
  2. ThuNghi

    ThuNghi Hãy cho rồi sẽ nhận!

    1/Nếu 2 sh A và B có kiểu giống nhau hay gần giống, thì chỉ 1 sh B bạn cũng báo cáo được, dùng Autofilter hay advance filter.
    2/ Dùng hàm index match để lấy các dữ liệu
    3/ Dùng VBA, phức tạp lắm
    Còn muốn tạo 1 nút in theo gì đó, bạn yêu cầu hơi trừu tượng, chưa thể giải thích, bạn up file sẽ cụ thể cho bạn ít nhất là 3 cách, từ đơn giản -> không hiểu luôn.
     
  3. FOV

    FOV Thành viên mới

    File đính kèm

    Mình muốn tạo thêm 2 nút:
    - Nút 1: In - All: In tất cả nhưng chỉ in những người Chuyển khoản (CK)
    - Nút 2: In - Range: In từ người thứ 3 đến thứ 7 nhưng chỉ in những người Chuyển khoản (CK)

    (Trong file đính kèm có macro tính thuế TNCN, các Bác chọn Enable Macros)

    Các Bác vui lòng viết code hộ.
    Mình mù tịt về VBA.
    Thanks.
     

    Các file đính kèm:

  4. ThuNghi

    ThuNghi Hãy cho rồi sẽ nhận!

    1/Tôi dùng Match và Validation để in bảng luơng theo điều kiện
    2/In liên tục bằng VBA, tham khảo phần in PT, PC liên tục trong file baocaoketoan của Mr OkeBab (Mr Hiếu) trên diễn đàn. Rất tuyệt!
    3/Còn không thì để mình làm cho nhưng "rừng" lắm.
     
    Lần chỉnh sửa cuối: 22 Tháng sáu 2007
  5. FOV

    FOV Thành viên mới

    To: ThuNghi,

    Cám ơm vì đã sửa & gởi file mới.
    Sẵn giúp thì giúp cho trọn luôn đi mà (Viết code cho 2 nút in).

    Mình không care, đối với mình chạy được là excellent.

    Chúc vui vẻ.
     
  6. ThuNghi

    ThuNghi Hãy cho rồi sẽ nhận!

    Tại sao không dùng VBA mà vẫn hoàn thành công việc thì cần gì VBA. Dùng công thức cũng nhanh lắm mà. Thậm chí bạn có thể dùng match hay vlookup với tham số là 1 để tính thuế thu nhập (cái này cũng không cần VBA).
    Theo yêu cầu của bạn tôi sẽ làm. Nhưng mà có noí trước rồi nhé, "rừng". Tôi sẽ xào nấu mấy cái tôi lượm lặt làm cho bạn.
     
  7. FOV

    FOV Thành viên mới

    To: ThuNghi

    Nếu không VBA mà vẫn làm được thì còn gì bằng.

    Bạn làm mẫu cho mình 1 lần đi (hoặc có VD tương tự cũng được) để mình còn học hỏi nữa.

    Cám ơn bạn nhiều.
    Chúc cuối tuần vui vẻ.
     
    Lần chỉnh sửa cuối: 9 Tháng sáu 2007
  8. ThuNghi

    ThuNghi Hãy cho rồi sẽ nhận!

    Không dùng VBA mà có thể in liên tục thì không được, chỉ có thể liệt kê ra mới in thì có thể. Đang thắc mắc, bạn muốn in liên tục những ng CK và in từ ng thứ 3 -> 7, số này là theo số TT của cả bảng lương hay là số TT theo những người CK.
    Vấn đề này thấy có vẻ dễ mà chưa làm được. Bác AnhPhuong và anh NVSON làm hộ cho vấn đề này = VBA. Nhân tiện cho mình học hỏi luôn. Xem file của Mr OkeBab rồi mà chưa biết cách gì vận dụng của file của bạn FOV.
    Pls help me and FOV.
     
  9. FOV

    FOV Thành viên mới

    Cám ơn bạn đã quan tâm giúp đỡ.

    Vấn đề là ở chỗ này:
    Danh sách nhân viên lên đến vài trăm người, mình sợ lúc đang in mà bị kẹt giấy thì sau khi sửa xong không cần in lại những người đã in mà chỉ chọn vùng chưa in để in tiếp. Cho nên mình mới thêm vào nút lệnh thứ 2: IN - Range.

    Đang chờ code của các Bác AnhPhuong & Bác NVSon.

    Thanks in advance.
     
    Lần chỉnh sửa cuối: 9 Tháng sáu 2007
  10. ThuNghi

    ThuNghi Hãy cho rồi sẽ nhận!

    OK, vậy tối về nhà làm cho, tức là lọc ra một danh sách CK, và cho in từ 1-10, 11-25...Như vậy thì chắc tôi làm được.
    Thuật toán:
    - Dùng Advance Filter tạo một bangluongCK qua 1 sh khác.
    - Dùng VBA, khi thay đổi số TT thì Call InBangLuong theo bangluongCK

    Gởi bạn file ver 09, hy vọng final countdown sẽ ok.
    Trong file bạn qua sh Phieu luong-CK bạn phải tại từ nút tạo bảng lương CK, sau đó nút InAll. Trong đó sẽ có thông báo bạn đang có bao nhiêu NV và bạn phải in.
    Mình hy vọng sẽ hòan thiện hơn và đơn giản hơn giúp bạn.

    Sau khi được hướng dẫn bởi Mr VODA, Mr NVSON, về việc lấy DL, bỏ được 1 sh, và theo file của Mr OkeBab, mình làm lại V08. Có đơn giản hơn và cho bạn chọn theo từng loại phương thức thanh toán theo Box thông báo. Bạn qua sh phieu luong-chon. Tôi làm thêm sh để dễ hình dung.
    Có thể không cần thêm sh nào nhưng oải ở chỗ phải chuyển Vlookup sang index. Và thêm 1 cột Code cụ thể như CK001, CK003, TM002...Bạn cố gắng nghiên cứu thêm Index sẽ thấy thú vị khi bảng có nhiều tham chiếu có thể thay đổi. Bạn thử chọn PTTT="xx" xem thế nào.
    Hy vọng đến V04 là OK
    Mong rằng đáp ứng nhu cầu của bạn.
     
  11. FOV

    FOV Thành viên mới

    Dear ThuNghi,

    Xin lỗi vì phản hồi chậm.

    Mấy ngày qua vào xem mà không để ý bạn đã post bài nằm ở trang 2 nên cứ ngỡ bạn chưa làm, cộng với việc gắn code vào file lương của mình cũng hơi vất vả tí (mất 1 ngày), chẳng hạn như chèn thêm 1 dòng tại ô A3 của sheet "DS Luong" là không tạo bảng lương được mình phải mở code ra mò mẫm và mọi thứ bây giờ thì ổn rồi.

    Túm lại, file của bạn là very good, đáp ứng được yêu cầu của mình.

    Có vẻ hơi tham lam, nhưng nếu bạn có phiên bản mới thì post lên cho mình nhé.

    Cám ơn bạn và các bác NVSON, VODA, OKEBAB đã nhiệt tình giúp lão gia đây.
    Chúc vui vẻ !!!
     
  12. ThuNghi

    ThuNghi Hãy cho rồi sẽ nhận!

    Xin gởi bạn ver 07, do trình độ chưa cao nên cứ edit liên tục. File này bạn khỏi phải thêm sheet nào cả, nhưng phải thêm 1 cột sau số TT. Phần này gần giống in PT PC liên tục của Mr OkeBab chỉ khác là in CK. Bạn vận dụng làm thêm in TM. File này dùng hàm Index. Tuy chưa hay lắm nhưng tạm dùng OK.
     

    Các file đính kèm:

  13. Mr Okebab

    Mr Okebab Ngon Ngất Ngây

    Nếu File chỉ có như thế thì làm như ThuNghi rất tuyệt rồi.

    Nhưng nếu File còn gồm nhiều cái nữa thì không nên để các công thức trong bảng, ta hãy tính luôn trong VBA (hàm Lookup), sau đó add vào Cell luôn.

    Làm như thế, xét từng phiếu thì in lâu hơn (???) nhưng về tổng thể lại nhanh hơn, File nhẹ hơn.

    Tính năng : Application..Calculation = xlCalculationManual
    rất hay đó. Khi nào cần tính toán vùng nào thì ta cho tính vùng đó. Không nên tắt đi. Như vậy sẽ nhanh hơn rất nhiều (Thử làm với khoảng 300phiếu sẽ thấy ngay). Khi kết thúc ta sẽ cho auto lại.


    Thân!
     
  14. FOV

    FOV Thành viên mới

    To: ThuNghi,

    Great !!!

    Sincere thanks.
     
  15. levanduyet

    levanduyet Thành viên danh dự

    Sẵn đây tôi xin giới thiệu với các bạn một add-in về send mail cũng hay.

    Lê Văn Duyệt
     

    Các file đính kèm:

    Lần chỉnh sửa cuối: 19 Tháng sáu 2007
  16. FOV

    FOV Thành viên mới

    Các Bác cho hỏi thêm:
    Mình muốn sử dụng nhiều macro dùng chung trong 1 Addins được hay không ?

    Mình đã thử tạo 1 file “Addins.xla” gồm 3 module:
    • Moduld1: Đọc số thành chữ
    • Moduld2: Tính thuế thu nhập cá nhân
    • Moduld3: In phiếu lương
    Khi mở file: “Phieu_luong.xls” chỉ có Module1 là chạy được, còn Module2 không chạy được ở sheet “Luong – VN”, Module3 không chạy được ở sheet “Phieu luong – In” nhưng nếu mở book mới thì Module1 & Module2 chạy được.

    Mình không rành về VBA nên mò mẫm cả ngày vẫn không được.

    Xin gởi kèm 2 file nhờ các Bác xem giúp.

    Chân thành cám ơn.
     

    Các file đính kèm:

  17. ThuNghi

    ThuNghi Hãy cho rồi sẽ nhận!

    Phần này nhờ các bạn giải thích hộ cho bạn FOV, tôi chỉ hiểu lờ mờ nhưng không thể giải thích được. Tiện đây, nhờ các bạn giải thích thêm lúc nào thì dùng Public Function, Private Function, lúc nào không.
    Xin cám ơn nhiều.
     
  18. HYen17

    HYen17 Thành viên cằn cỗi.

    Theo mình nghỉ M1 là một hàm, &bạn phải cung cấp đối số cho hàm!?
    M2 cũng vậy; Nhưng M3 có thể chỉ là Macro, nhưng cũng cần cung cấp đối số là vùng in?!
    Vậy bạn phải viết/nhờ ai viết cho 1 macro để gọi đúng cái mình cần để nó chạy! Đó là nguyên tắc chung, cụ thể mình chưa có thời gian!
     
  19. ThuNghi

    ThuNghi Hãy cho rồi sẽ nhận!

    Không thấy cao nhân nào cụ thể, thì tôi cụ thể cho bạn nhé, vì căn bản VBA tôi hơi bị yếu nên không mô phạm được.
    Bạn phải đưa file AddIn (đổi tên lại đi, như là MyWife...) vào folder sau (tôi dùng Office XP)
    C:\Documents and Settings\Administrator\ApplicationData\Microsoft\AddIns
    Mở file phiếu lương ra, vào Edit, Link và Break Link.
    Tại Sh Luong-VN xóa hết mấy chỗ mà có hàm Gross04, ttn04, mà nó đang báo #NAME?. Save và close.
    Mở file lại và nhập lại Gross04, ttn04.
    Còn sub in, thì không nên đưa vào AddIns, nếu đưa vào thì phải sửa đường dẫn ..., và bắt excel phải luôn khởi động cho nó, mặc dù mình không dùng. Vô ích. Với lại theo tôi các hàm tính thuế TN nên để trong file nào có tính thuế thì vẫn thấy hay hơn. Copy code nén lại và cất khi nào hư thì để vào. Và tạo pass cho VBA là OK.
    Khi nào đắc đạo thì tôi sẽ cụ thể hơn.
     
  20. SA_DQ

    SA_DQ Thành viên danh dự

    chỉ để tham khảo, chưa thực tế bao zờ!

    Bạn đã có 3 module:
    1* Hàm đổi số thành chữ, hàm này cần 1 đối số dạng số;
    2* Hàm tính thuế thu nhập; Hàm này cũng cần 1 đối số, đó là thu nhập (cũng là đối số dạng số);
    3* Sub in một vùng; cũng cần được cung cấp 1 đối số dạng Range
    VD: =DoiSo( Nums As Double) As String
    = ThueTNh( Nums As Double) As Double
    Sub InVungChon (Rng As Range)

    Bạn phải có 1 hàm để gọi 3 anh này; có lẽ như vầy:
    = GopHam_Sub ( 1, 125000500
    Mã:
    [b]Function GopHam_Sub (Optional Loai As Byte, Optional So_Vung  As Vaỉant)[/b]
     Select Case Loai
         Case 0,1
                 Gop_Hamsub = DoiSo( So_Vung)
         Case 2
                 Gop_Hamsub = ThueTNh( So_Vung)
         Case Else
                 InVungChon (So_Vung)
                [COLOR="Blue"] 'Gop_HamSub= 0[/COLOR]
         End Select
        
    [b] End Function[/b] 
    Sau đó lại là việc đưa chúng vô Add_In!
     
    Lần chỉnh sửa cuối: 3 Tháng bảy 2007

Chia sẻ trang này