Nhờ mọi người giúp đở load dữ liệu từ excel sang word (1 người xem)

Liên hệ QC

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

nguyenvantu29

Thành viên chính thức
Tham gia
1/6/21
Bài viết
53
Được thích
2
Mình có một form nhập dữ liệu:
- Khi nhập xong mình bấm vào nút "tải file word" thì tự động mở file word lên và tự động điền dữ liệu từ form sang word ạ.
Tương tự như mail merge từ excel sang word
mong mọi người giúp đở
 

File đính kèm

Mình làm công việc này cho từng người chứ không làm toàn bộ danh sách nên tìm cách khác thay mail merge
 
Upvote 0
Có ai giúp mình không mọi người
Loại bài này trên GPE đã có rất nhiều. Vd. dùng bookmark: trong công cụ tìm kiếm của GPE gõ word bookmark -> đọc tới khi chán thì thôi.

điền xong rồi tính làm gì tiếp
Cái này là form nhập liệu bình thường mà. Từ ngàn xưa tới nay người ta viết code để sau khi nhập dữ liệu vào các TextBox trên Form rồi nhấn nút Lưu thì đập dữ liệu vào sheet. Bây giờ người ta chỉ thêm 1 nút nữa là "Tải file word" để khi nhấn nó thì cũng đập dữ liệu nhưng không vào sheet nữa mà vào tập tin word đã có.
 
Lần chỉnh sửa cuối:
Upvote 0
điền xong rồi tính làm gì tiếp
Một ví dụ cho bạn tham khảo về trường hợp vừa nhập/ lưu dữ liệu vào CSDL, vừa xuất dữ liệu đó sang Word hay PDF để in, gửi mà không dùng Mail Merge. Xuất toàn bộ thông tin có trên Form qua file Word mẫu.

export2word.png
 
Lần chỉnh sửa cuối:
Upvote 0
Vậy có cách nào sử dụng vba để load dữ liệu từ form sang file word không mọi người.
Rất mong mọi người giúp đở
 
Upvote 0
Vậy có cách nào sử dụng vba để load dữ liệu từ form sang file word không mọi người.
Rất mong mọi người giúp đở
Bạn không đọc bài #7 à? Nếu đọc thì bạn sẽ không hỏi: có cách nào?

Bài 7 đã chỉ ra rằng CÓ muôn vàn cách.
 
Upvote 0
Bạn không đọc bài #7 à? Nếu đọc thì bạn sẽ không hỏi: có cách nào?

Bài 7 đã chỉ ra rằng CÓ muôn vàn cách.
Hình như người ta hỏi cách từ a đến z.
Muôn vàn cách của bác chỉ đến a>b>c rồi dừng hoặc rẽ nhánh khác. -.,\;
 
Upvote 0
Mình muốn hỏi có một ví dụ nào cụ thể không vậy bạn
 
Upvote 0
Mình muốn hỏi có một ví dụ nào cụ thể không vậy bạn
Nếu tìm kiếm theo như bài 7 hướng dẫn thì ra rất nhiều ví dụ mà trong đó có code cụ thể mà. Trong những chủ đề đó đâu chỉ có nói suông. Ngoài nước bọt ra còn có cả code ví dụ nữa. Chỉ sợ đọc mãi không hết thôi.
 
Upvote 0
Nếu tìm kiếm theo như bài 7 hướng dẫn thì ra rất nhiều ví dụ mà trong đó có code cụ thể mà. Trong những chủ đề đó đâu chỉ có nói suông. Ngoài nước bọt ra còn có cả code ví dụ nữa. Chỉ sợ đọc mãi không hết thôi.
Khâm phục nết kiên nhẫn của bác thực.
Người ta hỏi ở bài #10. Bác chỉ dẫn ở bài #11.
Người ta lại tiếp tục hỏi ở bài #13. Hiển nhiên là họ không muốn bỏ công và thì giờ đọc rồi tự tìm trong "muôn vàn cách".
Ở đây người ta nhờ "giúp" chứ không có chủ tâm học. Cái câu "chỉ sợ đọc không hết" của bác làm người ta sợ, làm nũng.
Bây giờ bác chỉ còn chọn lựa cuối là tìm giùm luôn cái "ví dụ cụ thể", cóp cả cụm lên đâu cho thớt thôi.
Đã lỡ cúng nếp rồi thì chắc phải thổi xôi giùm luôn. May ra được miễn phần bưng mâm và chờ bón. :p
 
Upvote 0
Một ví dụ cho bạn tham khảo về trường hợp vừa nhập/ lưu dữ liệu vào CSDL, vừa xuất dữ liệu đó sang Word hay PDF để in, gửi mà không dùng Mail Merge. Xuất toàn bộ thông tin có trên Form qua file Word mẫu.

View attachment 272118
Nếu không phiền bạn cho Mình xin File về địa chỉ vumanhhungcp@gmail.com (Bản không khóa password) để học hỏi thêm được không ?
 
Upvote 0
Nếu không phiền bạn cho Mình xin File về địa chỉ vumanhhungcp@gmail.com (Bản không khóa password) để học hỏi thêm được không ?
File này là Ms Access nhé bạn nhưng code VBA thì nó cũng gần giống nhau thôi. File này tôi làm mẫu cho một bạn ở diễn đàn khác và cũng đã chia sẻ file. Đây là link của nó: https://www.mediafire.com/file/c8q6b7iv3ed7jx3/XuatBG_PDF%26WORD.rar/file
 
Upvote 0
Upvote 0
Khâm phục nết kiên nhẫn của bác thực.
Người ta hỏi ở bài #10. Bác chỉ dẫn ở bài #11.
Người ta lại tiếp tục hỏi ở bài #13. Hiển nhiên là họ không muốn bỏ công và thì giờ đọc rồi tự tìm trong "muôn vàn cách".
Ở đây người ta nhờ "giúp" chứ không có chủ tâm học. Cái câu "chỉ sợ đọc không hết" của bác làm người ta sợ, làm nũng.
Bây giờ bác chỉ còn chọn lựa cuối là tìm giùm luôn cái "ví dụ cụ thể", cóp cả cụm lên đâu cho thớt thôi.
Đã lỡ cúng nếp rồi thì chắc phải thổi xôi giùm luôn. May ra được miễn phần bưng mâm và chờ bón. :p
Trên diễn đàn tui hỏi nếu các bạn giúp được thì tui cám ơn. Không được cũng không sao. Tui thấy bạn không giúp được gì mà chỉ chấm biếm người khác.
 
Upvote 0
Upvote 0
b cho mình hỏi lỗi này là như nào vậy b nhỉ, (mình tải về mở lên , nhấn xuất file thì lỗi. View attachment 272546
Nhìn

.FormFields("TongTien").Result = Nz(Me.txtTongTien)

thì 99,99% Nz là hàm tự tạo. Nếu có lỗi thì 200% là tác giả quên đính kèm code của hàm Nz. Tức nói nôm na là gọi hàm không tồn tại (gọi học sinh không tồn tại lên bảng). :D
 
Upvote 0
b cho mình hỏi lỗi này là như nào vậy b nhỉ, (mình tải về mở lên , nhấn xuất file thì lỗi.
Hàm Nz() là hàm mặc định có sẳn của Ms Access, nó biến giá trị Null thành Zero. Trong Excel không có hàm này nên sẽ báo lỗi.
Nếu bạn mở trong Access mà báo lỗi thì bạn phải chụp hình hoặc ghi nội dung cái thông báo lỗi + dòng báo lỗi thì mới định bệnh được nhé.
 
Upvote 0
Hàm Nz() là hàm mặc định có sẳn của Ms Access, nó biến giá trị Null thành Zero. Trong Excel không có hàm này nên sẽ báo lỗi.
Nếu bạn mở trong Access mà báo lỗi thì bạn phải chụp hình hoặc ghi nội dung cái thông báo lỗi + dòng báo lỗi thì mới định bệnh được nhé.
Cái này là mình ở file Access của b lên luôn mà, (VBA của access)
1646104604334.png
 
Upvote 0
Cái này là mình ở file Access của b lên luôn mà, (VBA của access)
View attachment 272562
Nếu vậy thì lỗi có thể liên quan đến thư viện của Ms Access. Nz() là hàm thuộc Access Aplication, không phải hàm của VBA.
- Bạn vô màn hình code, Tool - Reference - kiểm tra xem có thư viện nào "Missing:..." không, chọn thư viện "Microsoft Access xx.0 Object Library" theo đúng phiên bản Office của bạn.
- Vô Object Browser (F2) - chọn All libraries - gõ hàm Nz vào ô tìm kiếm, nếu không ra kết quả gì thì bạn cài lại (hoặc repair) Office.
- Nếu có cài 2 phiên bản Office 32 và 64 bit chung thì nên gỡ bỏ 1 cái đi.
 
Upvote 0
Nếu vậy thì lỗi có thể liên quan đến thư viện của Ms Access. Nz() là hàm thuộc Access Aplication, không phải hàm của VBA.
- Bạn vô màn hình code, Tool - Reference - kiểm tra xem có thư viện nào "Missing:..." không, chọn thư viện "Microsoft Access xx.0 Object Library" theo đúng phiên bản Office của bạn.
- Vô Object Browser (F2) - chọn All libraries - gõ hàm Nz vào ô tìm kiếm, nếu không ra kết quả gì thì bạn cài lại (hoặc repair) Office.
- Nếu có cài 2 phiên bản Office 32 và 64 bit chung thì nên gỡ bỏ 1 cái đi.
Do tò mò nên tôi thử như sau. Trước hết tôi kiểm tra không có Missing. Có hàm Nz.

Tôi chọn trong ComboBox "Tiệm Tạp hoá Cô Hoa", sau đó nhấn nút "Xuất sang MS Word". Sẽ có lỗi ở dòng

.FormFields("TongTien").Result = Nz(Me.txtTongTien)

Do ở txtTongTien co giá trị 33885280 nên tôi thay dòng trên bằng

.FormFields("TongTien").Result = 33885280 ' Nz(Me.txtTongTien)

Vẫn có lỗi tương tự.

Tức lỗi không thể đổ tội cho Nz. Tôi lại thay bằng

.FormFields("TongTien").Result = 1

Không thấy báo lỗi, mà chỉ báo "Da xuat sang MS Word hoan tat"
 
Upvote 0
Do tò mò nên tôi thử như sau. Trước hết tôi kiểm tra không có Missing. Có hàm Nz.

Tôi chọn trong ComboBox "Tiệm Tạp hoá Cô Hoa", sau đó nhấn nút "Xuất sang MS Word". Sẽ có lỗi ở dòng

.FormFields("TongTien").Result = Nz(Me.txtTongTien)

Do ở txtTongTien co giá trị 33885280 nên tôi thay dòng trên bằng

.FormFields("TongTien").Result = 33885280 ' Nz(Me.txtTongTien)

Vẫn có lỗi tương tự.

Tức lỗi không thể đổ tội cho Nz. Tôi lại thay bằng

.FormFields("TongTien").Result = 1

Không thấy báo lỗi, mà chỉ báo "Da xuat sang MS Word hoan tat"

Cảm ơn bác đã test. Cái lỗi này lạ quá, tôi chưa gặp phải bao giờ - "Command Failed" và cũng chưa biết cách khắc phục.
Tôi đã test chạy tốt trên: (kể cả việc thay bằng số trực tiếp vào câu lệnh)
- Windows 7 64 + Office 2016 64.
- Windows 10 64 + Office 2013 32.

Tôi đã tạo lại file Access mới (import dữ liệu từ file cũ sang) + file Word mẫu mới. Các bạn kiểm tra lại xem còn lỗi như trên không nhé.

 

File đính kèm

Upvote 0
- Windows 10 64 + Office 2013 32.

Bài #26 tôi đã test cho Windows 10 64 + Office 2013 32

Tôi test bài #27 thì cũng y như bài #26. Tức có lỗi y hệt, nhưng khi tôi thay 33885280 bằng 1 thì lại không có lỗi. Cũng hơi khó hiểu thật.
 
Lần chỉnh sửa cuối:
Upvote 0
Cảm ơn bác đã test. Cái lỗi này lạ quá, tôi chưa gặp phải bao giờ - "Command Failed" và cũng chưa biết cách khắc phục.
Vấn đề nằm bên Word, có thể nhập vào google "Method 'Result' of object FormField failed" và đọc

vd.


Nếu không dùng Result:

.FormFields("TongTien").Range.Text = Nz(Me.txtTongTien")

hoặc

.FormFields("TongTien").Range.Text = 33885280

thì không có lỗi nữa.
 
Upvote 0
Vấn đề nằm bên Word, có thể nhập vào google "Method 'Result' of object FormField failed" và đọc
Nếu không dùng Result:

.FormFields("TongTien").Range.Text = Nz(Me.txtTongTien")

hoặc

.FormFields("TongTien").Range.Text = 33885280

thì không có lỗi nữa.

Vậy là có sự khác biệt khi dùng các thuộc tính cho Controls (FormFields("xxx")) trên Word. Trong file mẫu Access có 2 dạng tham số được truyền qua Control trong Word, 1 cách thì hoạt động 1 cách thì báo lỗi mặc dù dùng cùng 1 phương thức "Result".
- Các FormFields đầu thì được truyền dữ liệu từ việc tổng hợp Recordset.
- FormFields("TongTien") thì được truyền tham số từ Textbox trên Form. --> báo lỗi đối với cách truyền dữ liệu này.

Nếu dùng: .Range.Text thì phải thêm hàm định dạng tham số vì nó không tự định djang theo cách đã thiết lập sẳn trong Word.

Mã:
.FormFields("TongTien").Range.Text = Format(Nz(Me.txtTongTien"),"#,##0")
 
Upvote 0
Vậy là có sự khác biệt khi dùng các thuộc tính cho Controls (FormFields("xxx")) trên Word. Trong file mẫu Access có 2 dạng tham số được truyền qua Control trong Word, 1 cách thì hoạt động 1 cách thì báo lỗi mặc dù dùng cùng 1 phương thức "Result".
- Các FormFields đầu thì được truyền dữ liệu từ việc tổng hợp Recordset.
- FormFields("TongTien") thì được truyền tham số từ Textbox trên Form. --> báo lỗi đối với cách truyền dữ liệu này.

Nếu dùng: .Range.Text thì phải thêm hàm định dạng tham số vì nó không tự định djang theo cách đã thiết lập sẳn trong Word.

Mã:
.FormFields("TongTien").Range.Text = Format(Nz(Me.txtTongTien"),"#,##0")
Ở bài cuối tôi không thử trong Access mà mở tập tin BG.docx và chạy code ngay trong nó.
Mã:
Sub tes()
    ThisDocument.FormFields("TongTien").Result = 33885280
End Sub
Thì có lỗi Command failed.
Nhưng không phải Result luôn lỗi. Nếu tôi thay 33885280 bằng vd. 9000 thì không lỗi.

Tôi thử kiểm tra Properties -> Number format thì có #,##0. Như vậy có thể đây chính là vấn đề. Vì trong system của tôi dấu phẩy "," là ký tự thập phân, còn dấu cách là ký tự phân cách hàng ngàn. Để kiểm nghiệm tôi đổi thành # ##0 thì code trên không còn lỗi nữa.

Có một thói quen của nhiều người Việt Nam là cứ xin code để chuyển hết ngày tháng thành dd/mm/yyyy mà không biết là rất có thể chạy code đó trên máy khác nó là TEXT chứ không phải ngày tháng vì thiết lập ở máy khác nó khác. Trên máy tôi nó là dd.mm.yyyy. Nếu tôi chạy XP Home, vẫn thiết lập mặc định Ba Lan thì là yyyy-mm-dd. Vì thế không nên đòi phải là dd/mm/yyyy. Cứ nhập đúng ngày tháng thì Excel sau đó sẽ tự hiển thị tùy theo thiết lập của system hiện hành.

Tương tự thiết lập cứng #,##0 là không được. Trên máy tôi là # ##0.

- Các FormFields đầu thì được truyền dữ liệu từ việc tổng hợp Recordset.

Những trường ở đầu hoặc là text hoặc là ngày tháng nhưng ở dạng text. Vd. tôi mở BG.docx và thấy 21/01/2021 (ngày báo giá bạn định dạng cứng nhắc là dd/MM/yyyy) thì đó là text, vì ngày tháng trên máy tôi là 21.01.2021. Chỉ sảy ra vấn đề khi định dạng SỐ không chuẩn thôi. Các trường text không thể phát sinh lỗi.
 
Lần chỉnh sửa cuối:
Upvote 0

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

Back
Top Bottom