Tặng mọi người bộ Addin mã nguồn mở.

Liên hệ QC
Tôi tuân thủ nội quy khi đăng bài
Là sao bạn, sau khi thao tác link data mail merge xong bạn vào chức năng Email Mail Merge là được mà.View attachment 296306
Hic, mình hơi bị dốt cái này, mình nói vậy bạn xem giúp đúng không nha
Mình vào Word -> Mailling -> Start Merge -> Emails message
Xong nhập nội dung
Xong chọn Select Reciptions -> nhập các email cần gửi

Phải vậy không ?
Tại mình vào mà không thấy table như hình của bạn :(
 
Hic, mình hơi bị dốt cái này, mình nói vậy bạn xem giúp đúng không nha
Mình vào Word -> Mailling -> Start Merge -> Emails message
Xong nhập nội dung
Xong chọn Select Reciptions -> nhập các email cần gửi

Phải vậy không ?
Tại mình vào mà không thấy table như hình của bạn :(
Ah không phải, bạn vẫn làm thao tác mail merge bình thường, lấy data từ file excel, trong data excel sẽ có thêm cột chứa địa chỉ email và cột tên file sẽ đặt cho file word được xuất. Còn thao tác sử dụng Mail Merge của Word như thế nào thì bạn google nhe. Sau khi xong thay vì bấm nút Finish & Merge của Word thì bạn dùng chức năng Email Mail Merge. Bạn làm thử đi.
 
Chào các anh chị và các bạn, lâu quá không có lên diễn đàn, nay rảnh rỗi có dịp quay lại nên xin đóng góp một chút, một bộ công cụ Addin do mình tổng hợp, có code mình viết, có code của người khác (sorry do hầu hết các code nếu của người khác mình đều sửa lại nên không để nguồn). Hi vọng có thể giúp ích được phần nào cho các bạn đang làm quen VBA có nhu cầu học hỏi và tham khảo. Nếu có lỗi trong quá trình sử dụng xin vui lòng cho mình biết cụ thể lỗi để có thể fix kịp thời, xin cảm ơn.

Chức năng
Sử dụng
- Print Title: In các file excel có sử dụng chức năng lặp lại dòng tiêu đề (Print title) nhưng có thể tắt dòng tiêu đề này ở các trang sau không liên quan. (Vd: ở trang 1 và 2 cần lặp lại tiêu đề nhưng trang 3 và 4 lại không cần)- Khi sử dụng chức năng này cần đặt Pagebreak (Page Layout - Breaks - Insert Page Break) 2 lần, 1 lần ngay phía dưới trang lặp lại tiêu đề (VD dưới trang 2), 1 lần ngay phía dưới dòng cuối cùng của toàn bộ văn bản (VD phía dưới trang 4)
- Do công cụ chỉ chấp nhận in khi có 2 pagebreak (nếu ít hay nhiều hơn sẽ không in được) nên có công cụ Remove Pagebreak để xóa nhanh tất cả các Pagebreak trong sheet hiện hành.
- Change Text Format: chuyển dạng chữ của vùng chọn thành Upper (viết hoa tất cả) - Proper (viết hoa chữ cái đầu mỗi chữ) - Lower (viết thường) thay phiên nhau sau mỗi lần bấm. Lưu ý nếu vùng chọn có công thức sẽ bị chuyển thành giá trị.
- Cũng có thể sử dụng chức năng này để chuyển vùng chọn là số nhưng dạng Text sang dạng số Value.
- Auto number value: đánh số thứ tự tự động, cho phép chọn giá trị bắt đầu đánh số, giá trị sẽ là value. Chức năng này cho phép chọn số bắt đầu bất kỳ.
- Auto number Formula: đánh số thứ tự tự động, giá trị sẽ là công thức subtotal. Sử dụng chức năng này số thứ tự sẽ đánh tự động cả khi sử dụng filter và không filter.
- Cả 2 chức năng đều cho phép sử dụng trong vùng filter.
- Chọn vùng cần chuyển và chọn chức năng này.
- Auto number Formula: sau khi chọn chức năng này cần chọn cột gốc là một cột không có ô trống, nếu có ô trống thì các ô trống sẽ có số thứ tự giống phía trên.
- Select Top/Left Cell: chọn vùng nhanh từ cell hiện hành Lên/Qua trái tới đầu Cột/Dòng.
- Select Bottom/Right Cell: chọn vùng nhanh từ cell hiện hành Xuống/Qua phải tới vùng cuối cùng có dữ liệu.
- Formula To Value: chuyển nhanh công thức thành giá trị thay vì phải sử dụng chức năng Copy - Paste value. Tính năng này có thể chuyển giá trị cả trong vùng đang Filter. (Phím tắt Ctrl + M)
- Auto Fit Column: tự động fit cột vừa với nội dung, có 2 chức năng fit tất cả các cột và fit cột hiện hành (Phím tắt Ctrl + L)
- Chọn vùng nhanh: tại cell hiện hành chọn chức năng này.
- 123: chọn vùng chứa công thức và chọn chức năng này.
- Fit cột: quá đơn giản không cần hướng dẫn.
- Insert Column/Row: Chèn cột hoặc dòng với số lượng tùy chọn.
- Unhide all Columns/Rows: Tắt ẩn tất cả dòng/cột (sử dụng chức năng hide)
- Fill Color Row: Tô màu xen kẽ cho các dòng trong vùng chọn.
- Chọn chức năng và nhập số lượng Cột/Dòng cần Insert.
- Tắt ẩn: bấm vào là được
- Chọn vùng chọn trước rồi sử dụng chức năng này.
- Delete all Shapes: Xóa tất cả shape trong sheet hiện hành. Cẩn thận khi sử dụng công cụ này.- Quá đơn giản không cần hướng dẫn.
- Fill Blank Cells: Điền dữ liệu vào các ô trống trong vùng chọn bằng dữ liệu ngay phía trên mỗi ô trống. Nếu vùng chứa công thức thì sau khi sử dụng chức năng này sẽ chuyển thành value.
- Lưu ý dòng trên cùng của vùng chọn không được có ô trống.
- Chọn vùng cần điền và chọn chức năng này.
- Send Email Active Sheet: xuất sheet hiện hành và đính kèm vào Email mới. (Sẽ tự động paste value khi đính kèm)
- Send Email Selected Sheets: xuất nhiều sheets đang chọn vào 1 file và đính kèm vào Email mới. (Giữ nguyên KHÔNG paste value nhưng sẽ Breaklink khi đính kèm)
- Send Email Active Range: xuất 1 vùng đang chọn bất kì và đính kèm vào Email mới. (Sẽ tự động paste value khi đính kèm)
- Cả 3 chức năng đều cho lựa chọn thêm file đính kèm từ bên ngoài vào Email mới.
- Quá đơn giản không cần hướng dẫn.
* Lọc 1 vùng chọn bất kỳ theo điều kiện của 1 cột bất kì trong vùng chọn (điều kiện trong cột sẽ được tự động bỏ trùng)
- AF To New Sheet: copy kết quả sang nhiều sheet mới theo từng điều kiện gốc, sheet mới sẽ được tô màu vàng. Sheet gốc vẫn giữ nguyên không ảnh hưởng (VD cần tách tháng trong dữ liệu, mỗi tháng sẽ là 1 sheet riêng, nếu có tên sheet bị trùng với điều kiện xuất thì sheet xuất ra sẽ có thêm chữ "-copy")
- AF To PDF file: copy kết quả và tạo thành nhiều file PDF, file xuất ra được lưu trong cùng thư mục với file gốc. Lưu ý thư mục gốc có file trùng tên sẽ bị ghi đè.
- AF To Excel file: copy kết quả và tạo thành nhiều file Excel (* .xlsb), file xuất ra được lưu trong cùng thư mục với file gốc. Lưu ý thư mục gốc có file trùng tên sẽ bị ghi đè.
- Lưu ý số lượng file và sheet xuất không được > 50 sheets/files, đối với điều kiện xuất sheet quá dài (>23 ký tự) sẽ thông báo không cho xuất vì tên sheet hệ thống không cho đặt tên quá dài)
- Quét vùng dữ liệu và chọn chức năng này, sau đó chọn tiếp cột cần lấy điều kiện để tách sheet/tạo PDF/Excel.
- Sheets To PDF: Xuất các sheet có màu vàng thành nhiều file PDF, file được lưu trong cùng thư mục với file đang mở. Lưu ý thư mục gốc có file trùng tên sẽ bị ghi đè.
- Sheets To Excel Multi File: Xuất các sheet có màu vàng thành nhiều file Excel, mỗi file tương ứng 1 sheet, file được lưu trong cùng thư mục với file đang mở. Lưu ý thư mục gốc có file trùng tên sẽ bị ghi đè.
- Sheets To Excel Single File: Xuất các sheet có màu vàng thành 1 file Excel tổng hợp, dữ liệu sẽ được copy theo thứ tự sheet chính vào file tên "Tổng hợp", Lưu ý: cấu trúc cột trong mỗi sheet nên giống nhau.
- Folder List: Liệt kê danh sách file trong thư mục bao gồm cả thư mục con. Chức năng này sẽ tự tạo sheet mới rồi mới liệt kê.
- Folder Structure: Copy cấu trúc của 1 thư mục sang một thư mục mới, chỉ copy thư mục, không copy file trong thư mục
- Save Mail Attachment: Lưu file đính kèm trong mail Outlook từ 1 thư mục trong Inbox.
- Sheets To PDF/Excel: tô màu vàng những sheet cần xuất PDF/Excel và chọn chức năng này.
- Folder List: quá đơn giản không cần hướng dẫn.
- Folder Structure: quá đơn giản không cần hướng dẫn.
- Save Mail Attachment: chọn đường dẫn sẽ lưu file được save, nhập đúng tên thư mục trong Inbox cần download (lưu ý là chỉ trong Inbox).
- Excel Active Sheet: Tổng hợp dữ liệu từ Active Sheet của các file trong cùng 1 thư mục vào file đang mở. Lưu ý: cấu trúc cột trong mỗi sheet nên giống nhau.
- Excel All Sheets: Tổng hợp dữ liệu từ tất cả các Sheet của các file trong cùng 1 thư mục vào file đang mở. Lưu ý: cấu trúc cột trong mỗi sheet nên giống nhau.
- Merge Same Cell Follow Specific Column: Dùng để Merge các cột trong 1 vùng chọn theo tiêu chí của 1 cột gốc trong vùng. VD có 1 bảng 4 cột gồm "Số hóa đơn - ngày hóa đơn - Sản phẩm - Số tiền", 1 hóa đơn có 3 sản phẩm và ta có nhu cầu merge các cột Số hóa đơn (có cùng số), Ngày hóa đơn (do cùng ngày) theo tiêu chí của cột số hóa đơn, riêng 2 cột Sản phẩm và Số tiền thì giữ nguyên.
-Merge Same Cell Above: Merge các cell giống nhau trong cùng 1 cột ở gần nhau, có thể chọn 1 lần nhiều cột.
- Merge Excel Folder: chọn vùng cần paste dữ liệu (trên file đang mở) và chọn thư mục chứa các file gốc cần lấy dữ liệu.
- Merge Same Cells: chọn chức năng và làm theo hướng dẫn.
- Pivot Layout: Pivot Table nếu chọn định dạng bảng có sẵn thì sẽ không tô màu Subtotal level 3, chức năng này giúp tô màu Subtotal level 3 mà không cần modify lại bảng đã chọn.- Quá đơn giản không cần hướng dẫn.
- Chức năng khi double click vào 1 cell sẽ hiện vùng chọn là cột và dòng hiện hành (thường dùng khi trình chiếu).- Nhấn vào nút này tuần tự sẽ là tắt và mở chức năng.
- VND Formula Option: có các tùy chọn sau:
* Tùy chọn Ngàn, Nghìn, Lẻ, Linh khi sử dụng hàm VNDtc.
* Có thể tùy chọn có chữ "chẵn" cuối câu hoặc không.
* Có thể tùy chọn có dấu chấm cuối câu hoặc không.
* Có thể tùy chọn có dấu phẩy ngăn cách giữa Ngàn/Nghìn, Triệu, Tỉ hoặc không.
- Email ID: Cài đặt Chữ ký của email trước khi sử dụng chức năng gửi Email. Nếu không thiết lập vẫn gửi email được nhưng không có chữ ký phía dưới mail. (Kiểm tra SignID bằng cách vào Outlook tạo mail mới, chọn tab Insert - Signature sẽ xuất hiện tên chữ ký nếu bạn đã thiết lậo chữ ký mail trên Outlook)
- Tick chọn tùy chọn trong form và thiết lập. Hệ thống sẽ nhớ thiết lập cả trong các lần sử dụng sau.
- VNDtc(): đọc từ số sang chữ Việt (không đọc số lẻ như xu, hào…), các thiết lập có thể tùy chỉnh trong "VND Formula Option" tại Tab "Addin Setup"
- Rvlookup(): sử dụng tương tự Vlookup nhưng tìm ngược từ bên phải sang bên trái, cột cần tìm sẽ là số âm (-)
- Sử dụng như hàm bình thường.
1698896511566.png
Em add vào thì hiện thông báo này không sử dụng được ạ!
 
@quangminhici thanks bác. Bác thử nghiên cứu mục in Print titles có tùy chọn một số trang không in được không ạ. Trước em có làm như file này nhưng vẫn lỗi ạ.
 
@quangminhici thanks bác. Bác thử nghiên cứu mục in Print titles có tùy chọn một số trang không in được không ạ. Trước em có làm như file này nhưng vẫn lỗi ạ.
Ý bạn là in từng hạng mục? Cái này bạn phải đặt page break nên nếu chọn trang in thì page break sẽ không biết phải đặt chỗ nào. Bạn thử set vùng in rồi đặt page break xem sao.
 
Ý bạn là in từng hạng mục? Cái này bạn phải đặt page break nên nếu chọn trang in thì page break sẽ không biết phải đặt chỗ nào. Bạn thử set vùng in rồi đặt page break xem sao.
Vâng bác. Em đang có ý tưởng này mà chưa biết cách thực hiện vba được ạ.
1. Người dùng set page breck (mỗi một hạng mục ngắt nhau bằng page breck). Hoặc tạo cột phụ điều 1 cho dòng đầu tiên của mỗi hạng mục.
2. Tính số hạng mục dựa vào sum cột phụ của mục 1, hoặc đếm page breck (n)
3. Copy sheet đang cần in ra các (n) sheet tạm temp1 .... tempn
4. Xoá các dòng thừa (ko thuộc hạng mục cần in) trong các sheet tạm
5. In các sheet tạm
6. Xoá các sheet tạm
 
Vâng bác. Em đang có ý tưởng này mà chưa biết cách thực hiện vba được ạ.
1. Người dùng set page breck (mỗi một hạng mục ngắt nhau bằng page breck). Hoặc tạo cột phụ điều 1 cho dòng đầu tiên của mỗi hạng mục.
2. Tính số hạng mục dựa vào sum cột phụ của mục 1, hoặc đếm page breck (n)
3. Copy sheet đang cần in ra các (n) sheet tạm temp1 .... tempn
4. Xoá các dòng thừa (ko thuộc hạng mục cần in) trong các sheet tạm
5. In các sheet tạm
6. Xoá các sheet tạm
em đã tìm tới bước số 3 tuy nhiên vẫn còn lỗi là chưa copy định dạng của sheet gốc sang dẫn tới các cột ẩn, hàng ẩn, độ rộng cột vẫn hiện hết lên.

Mã:
Sub test()
    Dim HPB As HPageBreak
    Dim rw As Long
    Dim shnum As Long
    Dim Asheet As Worksheet
    Dim Nsheet As Worksheet

    Set Asheet = ActiveSheet
    rw = 1
    shnum = 1
    
    For Each HPB In Asheet.HPageBreaks
    If HPB.Type = xlPageBreakManual Then
        Set Nsheet = Worksheets.Add(After:=ActiveWorkbook.Sheets(ActiveWorkbook.Sheets.Count))
        Nsheet.Name = "Page " & shnum
        With Asheet
            .Range(.Cells(rw, "A"), .Cells(HPB.Location.Row - 1, "K")).Copy _
                Nsheet.Cells(1, 1)
        End With
        rw = HPB.Location.Row
        shnum = shnum + 1
    End If
    Next HPB

End Sub
 
Vâng bác. Em đang có ý tưởng này mà chưa biết cách thực hiện vba được ạ.
1. Người dùng set page breck (mỗi một hạng mục ngắt nhau bằng page breck). Hoặc tạo cột phụ điều 1 cho dòng đầu tiên của mỗi hạng mục.
2. Tính số hạng mục dựa vào sum cột phụ của mục 1, hoặc đếm page breck (n)
3. Copy sheet đang cần in ra các (n) sheet tạm temp1 .... tempn
4. Xoá các dòng thừa (ko thuộc hạng mục cần in) trong các sheet tạm
5. In các sheet tạm
6. Xoá các sheet tạm
Bạn có ý tưởng hay nhưng vấn đề là mỗi hạng mục sẽ có phần không cần lặp lại tiêu đề của hạng mục đó, khi tách ra sheet mới vẫn cần phải đặt page break bằng tay chỗ đó nên không biết code thế nào nữa. Phần không lặp lại tiêu đề có thể là 1 trang hoặc nhiều trang nên không cố định được.
Bài đã được tự động gộp:

em đã tìm tới bước số 3 tuy nhiên vẫn còn lỗi là chưa copy định dạng của sheet gốc sang dẫn tới các cột ẩn, hàng ẩn, độ rộng cột vẫn hiện hết lên.

Mã:
Sub test()
    Dim HPB As HPageBreak
    Dim rw As Long
    Dim shnum As Long
    Dim Asheet As Worksheet
    Dim Nsheet As Worksheet

    Set Asheet = ActiveSheet
    rw = 1
    shnum = 1
   
    For Each HPB In Asheet.HPageBreaks
    If HPB.Type = xlPageBreakManual Then
        Set Nsheet = Worksheets.Add(After:=ActiveWorkbook.Sheets(ActiveWorkbook.Sheets.Count))
        Nsheet.Name = "Page " & shnum
        With Asheet
            .Range(.Cells(rw, "A"), .Cells(HPB.Location.Row - 1, "K")).Copy _
                Nsheet.Cells(1, 1)
        End With
        rw = HPB.Location.Row
        shnum = shnum + 1
    End If
    Next HPB

End Sub
Nếu bạn muốn copy như vậy thì code thêm thao tác copy format và zoom setting. Bạn có thể tham khảo ở code advance filter để xem code.
 
Bạn có ý tưởng hay nhưng vấn đề là mỗi hạng mục sẽ có phần không cần lặp lại tiêu đề của hạng mục đó, khi tách ra sheet mới vẫn cần phải đặt page break bằng tay chỗ đó nên không biết code thế nào nữa. Phần không lặp lại tiêu đề có thể là 1 trang hoặc nhiều trang nên không cố định được.
Bài đã được tự động gộp:


Nếu bạn muốn copy như vậy thì code thêm thao tác copy format và zoom setting. Bạn có thể tham khảo ở code advance filter để xem code.
vì mỗi bảng có cấu hình giống nhau nên em sẽ set tiêu đề chung (ví dụ $4:$5) cho toàn bộ các sheet mới ạ. Em đang thêm thao tác copy độ rộng kiểu này nhưng file chạy nặng quá For i = 1 To LastRow Nsheet.Rows(i).RowHeight = .Rows(i).RowHeight Next i. Để em nghiên cứu thêm giải pháp của bác ạ!
 
vì mỗi bảng có cấu hình giống nhau nên em sẽ set tiêu đề chung (ví dụ $4:$5) cho toàn bộ các sheet mới ạ. Em đang thêm thao tác copy độ rộng kiểu này nhưng file chạy nặng quá For i = 1 To LastRow Nsheet.Rows(i).RowHeight = .Rows(i).RowHeight Next i. Để em nghiên cứu thêm giải pháp của bác ạ!
Phía trên bạn nói độ rộng cột, dưới có cả độ cao của dòng, vậy bạn trước tiên copy bằng cách chọn hết tất cả các dòng đã lọc, paste special với column width, paste lần 2 với paste bình thường, thêm zoom setting là ok.
 
Phía trên bạn nói độ rộng cột, dưới có cả độ cao của dòng, vậy bạn trước tiên copy bằng cách chọn hết tất cả các dòng đã lọc, paste special với column width, paste lần 2 với paste bình thường, thêm zoom setting là ok.
Cảm ơn bác em đã xử lý được vấn đề rồi ạ.
 
Hi Bác Quang Minh
Mình dùng addin nhưng nó cứ báo lỗi như này là sao ạ?

1701420064119.png
 
Em đã tải và add vào Excel, hiện em chưa dùng nhiều, tầm 6 tháng - 1 năm, em sẽ quay lại feedback thêm ạ. Em cám ơn bác Minh ạ.
 
Cập nhật bản mới 18.7. Không biết sao bài #1 không cho phép sửa để update bản mới.
 

File đính kèm

  • QMinh Addin.xlam
    1 MB · Đọc: 10
  • QMinh addin Excel help.pdf
    377.8 KB · Đọc: 12
Web KT
Back
Top Bottom