Phần mềm ôn thi sát hạch chứng chỉ hành nghề xây dựng

Tiêu đề: [Nhờ kiểm tra giúp] Code VBA Copy dữ liệu từ file Excel (sheet) khác [In trang]

Tác giả: thanh.bm    Thời gian: 11/10/2019 12:00
Tiêu đề: [Nhờ kiểm tra giúp] Code VBA Copy dữ liệu từ file Excel (sheet) khác
Chào anh em,
Hiện tôi đang lập 1 file tổng hợp các dữ liệu (Copy) từ các file khác vào 1 file tổng hợp, để làm báo cáo khi cần.
Nôm na là:
+ 1 file chính được xây dựng các form được xây dựng sẵn (Chính).
+ Lấy dữ liệu (Copy) bao gồm cả định dạng từ các file báo cáo (File này với dòng cột, định dạng tương ứng file chính).
Tuy nhiên, khi chạy VBA, không rõ lỗi ở đâu mà không thể chạy được. Mong anh em kiểm tra code VBA này giúp.

Cụ thể: Theo file đính kèm là:
1. File excel với tên  "STL00Full_Master_Full" là File chính, để báo cáo, các dữ liệu được copy từ các file con vào đây.
trong này, vùng tiêu đề đã được xây dựng sẵn.
- Các cột tương ứng với các tiêu đề tương ứng với tất cả các file báo cáo.
- Có 1 nút được đặt tên "COPY DATA", khi click vào đây sẽ hiện ô cửa sổ để chọn các file cần lấy dữ liệu.

[attach]20190[/attach]

2. Các file có tiêu đề là "STL001; STL002; STL003" - tạm lấy mẫu cho 3 file, thực tế sẽ có nhiều file hơn nữa.
- Là các file được các đơn vị báo cáo, gửi về.
- Là dữ liệu cơ sở để tổng hợp vào file chính như ở mục (1),c hỉ lấy dữ liệu ở sheet có tên "NganSach"

[attach]20187[/attach][attach]20188[/attach][attach]20189[/attach]

VẤN ĐỀ:
- Tôi đã xây dựng code VBA. Nhưng ở đây chỉ chạy được độc lập (Copy) được 1 file.
- Nếu chọn nhiều file (từ 2 file excel báo cáo trở lên thì chỉ copy được file cuối cùng.
- Khi chạy VBA thường xuất hiện các bản thông báo Update, có cách nào bỏ được thông báo này không?

MONG ANH EM GIÚP.

Thân chào!




Tác giả: tranhoe    Thời gian: 11/10/2019 21:27
Đầu tiên là bị lỗi ở:
Set master = ActiveWorkbook.Sheets("Ngan Sach_SAMTUYENLAM")
Đúng phải là:
Set master = ActiveWorkbook.Sheets("Ngan Sach_Master")

Sửa xong mới đến nhều vấn đề:
- Cái này nói sau nhưng phải nói trước: các file của em (STL001_Du An.slsx, STL002_Du An.slsx, STL003_Du An.slsx, STL00Full_Master_Full.xlsm) đều bị lỗi Update dữ liệu khi chưa dùng đến Macro. Vậy thì phải xử trước, khi đó sẽ không có câu hỏi cần Update dữ liệu (khi chạy VBA) đối với từng file nữa.
- Cơ sở dữ liệu của Em: với từng file thì cell cuối cùng (của dòng dữ liệu cần lấy) không phải ở cột "A", nên sẽ rối Code (Anh cũng chưa chạy từng dòng để phát hiện), dẫn đến chỉ ghi được 1 file dữ liệu thôi.
- Anh cũng chưa hiểu hết ý đồ của file Master nên với CSDL của em thì không thể áp dụng cái Code trong những bài thực hành (như em vừa đăng trên xd360), còn rất và rất nhiều cái để giải quyết.

Đôi điều góp ý!. Thân


Tác giả: thanh.bm    Thời gian: 16/10/2019 09:37
Chào anh em,
Sau khi mầy mò, cuối cùng cũng làm được. Nay fix lại, gửi anh em tham khảo.
1. Đây là file mà tôi thường hay quản lý Ngân sách dự án, trong này:
- Đây là file quản lý các hợp đồng, phục vụ cho việc lập ngân sách/ quản lý ngân sách của Các dự án riêng rẽ hoặc tổng hợp (FIle Master).
- Anh em có thể tuỳ biến muốn bổ sung thông tin hoặc copy dữ liệu nào (Tuỳ chọn).
Lưu ý: Tên sheet Copy  "NganSach", Các anh em tải về sửa lại tên Sheet, và đồng thời sửa lại Code, đoạn nào có chữ "NganSach", tuỳ thích ở File có tên "STL00Full_Master_Full" .

2. Anh em tham khảo theo file này nhé.

                               
Đăng nhập/Đăng ký mở rộng

[attach]20201[/attach]


Lưu ý: Nếu anh em nào quan tâm đến VAB thì hướng dẫn viết mã code được hướng dẫn trong bài 11, video links sau: http://xaydung360.vn/thuvien/-mp ... -hay-40515-1-1.html


Thân chào!


Tác giả: tranhoe    Thời gian: 16/10/2019 16:35
thanh.bm gửi lúc 16/10/2019 09:37
Chào anh em,
Sau khi mầy mò, cuối cùng cũng làm được. Nay fix lại, gửi anh em tham khảo ...

1./ Trong cả file tổng STL00Full_Master_Full.xlsm và các file dữ liệu con đều có Name "Status" nên mỗi lần Copy dữ liệu qua đều bị báo trùng Name phải xác nhận ghi đè hay sửa Name
Name "Status" có cần dùng không?, nếu không thì xóa để khỏi bị hỏi.
2./ Sau khi dán dữ liệu thì nên nhớ giải phóng bộ nhớ cho phần copy (để khỏi bị hỏi). Dùng
[Visual Basic] 纯文本查看 复制代码
Application.CutCopyMode = False


3./ Macro Xóa dữ liệu còn thừa nhiều lệnh (do ghi macro rồi xóa chưa hết.



Tác giả: tranhoe    Thời gian: 20/10/2019 15:11
thanh.bm gửi lúc 16/10/2019 09:37
Chào anh em,
Sau khi mầy mò, cuối cùng cũng làm được. Nay fix lại, gửi anh em tham khảo ...

Đã rà soát kỹ Code và tinh chỉnh lại; đồng thời xóa 4 name trong 4 file. File chạy khá nhanh.
File: [attach]20202[/attach]

Tác giả: thanh.bm    Thời gian: 25/10/2019 15:18
tranhoe gửi lúc 20/10/2019 15:11
Đã rà soát kỹ Code và tinh chỉnh lại; đồng thời xóa 4 name trong 4 file. File chạy kh ...

Chào anh Hoè,
Em vẫn bị 1 lỗi, mò mãi không ra, cụ thể:
1. Xuất hiện Status khi chạy VBA. Mình có cách nào dùng VBA bỏ thông báo này không? Em đã tìm trên Google mà chưa mò ra, mong anh em chỉ giúp.
[attach]20209[/attach]

2. Và file STL003 này không chuyển dữ liệu vào file Master được.
[attach]20210[/attach]


Cám ơn các anh em.
Thân chào!






Tác giả: tranhoe    Thời gian: 26/10/2019 20:05
thanh.bm gửi lúc 25/10/2019 15:18
Chào anh Hoè,
Em vẫn bị 1 lỗi, mò mãi không ra, cụ thể:
1. Xuất hiện Status khi chạy  ...

1./ Tất cả các file của em đều chứa rất nhiều Name rác và bị ẩn nữa (hàng chục ngàn Name), Xóa cũng khá lâu mới hết được. Dùng code sau để Xem Name, Xóa Name
[Visual Basic] 纯文本查看 复制代码
Sub Xem_AllNames()
Dim wsName As Name
For Each wsName In ActiveWorkbook.Names
If wsName.Visible = False Then wsName.Visible = True
Next wsName
End Sub
Sub Xoa_AllNames()
Dim wsName As Name
    For Each wsName In ActiveWorkbook.Names
        'If wsName.Name <> "Status" Then wsName.Delete   'Giu lại name Status khong Xoa
        wsName.Delete
    Next wsName
End Sub

2./ Sau khi đã xóa hết Name rồi thì chạy mượt mà như file đính kèm.
3./ File STL003_Du An 03.xlsx có bố cục khác với các file khác.

[attach]20212[/attach]

Tác giả: tranhoe    Thời gian: 12/11/2019 22:36
thanh.bm gửi lúc 25/10/2019 15:18
Em kiểm tra theo trong Name Manager, thì thấy rất ít Name được tạo. Không rõ Name đang bị ẩn thì phải....

Anh đã nói rồi. Vì có rất nhiều Mame ẩn. Muốn xem được thì phải hiện nó lên, bằng cách chạy Sub Xem_AllNames().
Chạy xong, vào phần quản lý name trong Excel sẽ thấy tất tần tật.
Thấy rồi thì thích Xóa thằng nào thì Xóa thôi; chạy Sub Xoa_AllNames(). Trong sub này muố giữ name nào thì thay trong câu lệnh:
If wsName.Name <> "Status" Then wsName.Delete   'Giu lại name Status khong Xoa





Chào mừng ghé thăm Phần mềm ôn thi sát hạch chứng chỉ hành nghề xây dựng (https://xaydung360.vn/diendan/) Powered by Discuz! X3.2