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

Liên hệ QC

nguyenvantu29

Thành viên mới
Tham gia
1/6/21
Bài viết
44
Đượ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

  • Book1.xlsm
    19.8 KB · Đọc: 19
  • Mẫu.docx
    11.2 KB · Đọc: 12
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
Tôi đã quay màn hình.
 

File đính kèm

  • access.rar
    3.1 MB · Đọc: 7
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

  • XuatBG_PDF&WORD.rar
    171.6 KB · Đọc: 12
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
Web KT

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

Back
Top Bottom