Import dữ liệu
E có 2 file excel (A và B), giả sử 2 file này đều nằm trong một folder
Sự kiện: đang mở file A, có marco nào có thể tự động copy dữ liệu sheet1 của B sang sheet1 của A (không phải thủ công: mở file B -> bôi đen -> ctrl C -> paste sang A)
Demo một cái thế này vậy. Bạn mở file A, nhấn nút lệnh, chọn file nguồn, nếu chọn file nào thì dữ liệu trên Sheet1 của file ấy sẽ được chép vào Sheet1 của file A.
Code như sau:
Sub CopyTuFileKhac()
With Application.FileDialog(1)
.InitialFileName = ThisWorkbook.Path
.Title = "Chon file nguon"
.FilterIndex = 3
.AllowMultiSelect = False
Do
.Show
If .SelectedItems.Count = 0 Then Exit Sub
If .SelectedItems(1) = ThisWorkbook.FullName Then MsgBox "Khong chon file nay!"
Loop Until .SelectedItems(1) <> ThisWorkbook.FullName
With Workbooks.Open(.SelectedItems(1))
.Sheets(1).Cells.Copy ThisWorkbook.Sheets(1).[A1]
.Close False
End With
End With
End Sub
www.giaiphapexcel.com/diendan/threads/import-d%E1%BB%AF-li%E1%BB%87u.86477/
Khóa học SprinGO phù hợp
Khóa học Power PI – Ứng dung trong Nhân sự
TỔNG QUAN KHÓA HỌC: POWER BI CHO NGÀNH NHÂN SỰ Khóa học Power BI cho Nhân sự được thiết kế dành riêng cho các...
Xem khóa học
Em chạy thử xem thế nào, cần thì mình bổ sung và fix lại.
Có trường hợp nào file kết quả đang mở không để bẫy tình huống. Vì code kia chỉ thực hiện với file đóng
Em tải bản này, vùng chọn là tùy ý nhưng phải sửa code. Nên đọc code để hiểu cách thực hiện
File đó có Sheet2, Sheet3 đâu em?
Tên Sheet trên phải đặt trong dấu ngoặc kép chứ, mà phải chỉ rõ máy mới hiểu được. Nếu không lấy tên Sheet1 trong phần VBProject.
Lúc đầu tôi thấy tác giả hỏi cách để LẤY DỮ LIỆU TỪ FILE ĐANG ĐÓNG VÀO FILE ĐANG MỞ (1)
Còn code của thầy hình như làm ngược lạ: COPY DỮ LIỆU TỪ FILE ĐANG MỞ VÀO FILE ĐANG ĐÓNG (2)
Hay tác giả thay đổi chủ ý?
Tóm lại: Tác giả cần trường hợp nào? (1) hay (2) vậy?
Vậy thì dùng ADO mới là vô địch. Tặng bạn 2 code này:
Tùy chọn xài 1 trong 2 cái nha!
– Cả 2 cái đều có thể dùng trực tiếp trong VBA
– Cái thứ nhất là HÀM, vậy bạn có thể gõ trực tiếp trên bảng tính
– Cái thứ hai là SUB, vậy chỉ có thể dùng trong VBA (không gõ đươc trên bảng tính)
——————————-
Phần code ở trên bạn cho vào 1 Module và cũng không cần hiểu, chỉ cần biết áp dụng là đủ
Ví dụ: Bạn chọn áp dụng HÀM
– File dữ liệu đang đóng nằm ở: "D:DuLieuB.xls"
– Tên sheet của file dữ liệu là "Sheet3"
– Vùng dữ liệu cần lấy là "C1:H10"
– Vậy ta viết thêm code áp dụng thế này:
Chỉ cần lưu ý 3 dòng màu đỏ, khai báo cho đúng là được
Chổ màu xanh chính là nơi bạn cần copy đến
Lưu ý:
– Nếu bạn chỉ khai báo FileName, không khai báo SheetName, RangeAddress thì đồng nghĩa bạn muốn lấy toàn bộ dữ liệu của sheet đầu tiên
– Trong Sub Main (là Sub áp dụng), phần FileName bạn có thể dùng GetOpenFileName để tùy ý chọn file nguồn. Ví dụ:
Màu đỏ dùng để mở hộp chọn file. Đoạn code trên không khai báo SheetName và RangeAddress nên code sẽ lấy toàn bộ dữ liệu ở sheet đầu tiên
——————
Bạn cứ tự thêm kiểu file xlsb vào rồi thí nghiệm là biết liền chứ gì
Đó đâu phải code của tôi
Code tôi nằm ở bài 19 đấy
Nói chung tôi không bao giờ bỏ qua công đoạn bẫy lỗi
Thì vâng! Code ở bài 19 có bẫy lỗi vậy đấy: Nếu đóng cửa sổ OpenFile hoặc bấm Cancel thì nó sẽ không làm gì cả. Câu lệnh để bẫy lỗi là vầy
Còn code mà thầy nói là người ta "chế" lại, bỏ mất đoạn bẫy lỗi đi rồi
——————————-
Sẽ khác nếu như hộp OpenFile mở ra nhưng bạn lại không chọn file nào mà bấm nút Cancel
Thử sẽ biết
Theo nhận định của tôi: Viết code đã khó mà bẫy lỗi để lường trước mọi trường hợp trục trặc phát sinh lại càng khó gấp trăm lần
Em thử phát này xem sao.
Thì Import xong sheet này lại tiếp tục Import sheet khác! Chẳng phải trong hàm có đối số SheetName sao?
Gì mà 2 Sub chứ! Thế sao bạn không gôm 2 sub ấy làm một?
Cho dù không biết nhưng ít ra điều bạn có thể làm là:
– Viết code bình thường trên 1 Sub, Import 1 sheet
– Viết tiếp 1 code nữa trên 1 Sub khác để import 1 Sheet khác
– Kiểm tra, nếu thấy 2 sub này chạy ổn định thì điều đơn giản là gôm 2 Sub ấy thành 1 rồi chạy (sẽ tương đương với việc chạy 2 Sub cùng lúc)
Thế thôi
Gần giống mà. Ví dụ:
Cái này chỉ chổ nó dữ liệu "đáp xuống" luôn (chính là biến Target)
(thử xem, tôi viết đại, chưa test)
—————-
Các bạn cần nên đặt 1 câu hỏi: Khi nào thì nên dùng hàm GetData và khi nào thì nên dùng Sub GetDataFromRS? —> Thế mới hiểu sâu vấn đề
1> Thứ nhất: Sửa chổ này:
thành vầy:
Chổ này là tôi sơ sót
2> Thứ 2: Sub Main2 sửa thành:
Tôi nghĩ quan trọng là sửa kiểu biến trong Sub GetDataFromRS thôi
————————–
Câu hỏi này cứ từ từ suy nghĩ. Trong quá trình làm việc có lúc sẽ nhận ra thôi
Thì cứ đoán đi
Nhưng mà câu trả lời này.. trật lất
Ẹc… Ẹc…