Bạn ptlong04x1 cho mình hỏi có cách nào để copy vào nhiều file cùng 1 lúc không?Em xin giải thích như sau :
1. Tạo 1 đối tượng FileSytemObject mới (đối tượng này dùng để xử lý file và thư mục).
2. Tạo đối tượng File với phương thức .GetFile của đối tượng FileSytemObject với đường đẫn FilPath được truyền vào.
3. Nếu tên file chứa ".xls" thì ...
4. Mở file với đường dẫn là thuộc tính .Path của .GetFile.
5. Gán dữ liệu.
6. Đóng file vừa mở --> True --> Saves Change.
7. Mở hộp thoại Browse.
8. Hiện hộp thoại.
9. Không cho chọn nhiều File --> False.
10. Gọi Sub RecData với tham số truyền vào là đường đẫn của File vừa được chọn trong hộp thoại Browse (.SelectedItems(1) <--> FilPath).
Bạn xem link này, trong link mình làm bài toán là lấy dữ liệu từ các file đang đóng sang file hiện hành, bài toán ngược lại là hoàn toàn tương tự.
http://www.giaiphapexcel.com/forum/showthread.php?t=28735
Hi anh! Và mọi người! có thể điều chỉnh giúp em theo nhu cầu thực tế được không ạ. Em có tìm hiểu về VBA, nhưng vì không chuyên em không sao điều chỉnh được ạ. Nội dung như sau ạ:Mình làm thử 1 ví dụ này, mọi người chỉnh sửa code lại cho phù hợp.
PHP:Sub RecData(FilPath As String) On Error Resume Next With New Scripting.FileSystemObject With .GetFile(FilPath) If InStr(.Name, ".xls") = 0 Then Exit Sub With Workbooks.Open(.Path) .Sheets(1).Range("A1") = ThisWorkbook.Sheets(1).Range("A1") .Close (True) End With End With End With End Sub '------------------------------------------------------------' Sub Run() On Error Resume Next With Application.FileDialog(msoFileDialogFilePicker) .Show .AllowMultiSelect = False Call RecData(.SelectedItems(1)) End With End Sub
Có lẽ ý tưởng mà mình nghĩ ra khó. Nhưng cũng hy vọng có anh chị nào thấy và giúp đỡ. Mình đang cố tìm cách rút ngắn thời gian làm việc với excel.Hi anh! Và mọi người! có thể điều chỉnh giúp em theo nhu cầu thực tế được không ạ. Em có tìm hiểu về VBA, nhưng vì không chuyên em không sao điều chỉnh được ạ. Nội dung như sau ạ:
- em muốn ghi một vùng dữ liệu "M2 : P2" ở sheet "TIEN_DO" của file A sang vùng dữ liệu "M2 : P2" bên sheet " dulieu" của file B đồng thời hiển thị thời gian ghi dữ liệu và đường dẫn của file A ở vùng "Q2 : R2" sheet "dulieu" của file B .
- mỗi lần ghi dữ liệu từ file A sang file B thì dữ liệu mới nằm dưới dữ liệu cũ ( không xóa dữ liệu cũ)
Giúp em với ạ, em cảm ơn nhiều
Sao rút ngắn thời gian làm việc với Excel?Có lẽ ý tưởng mà mình nghĩ ra khó. Nhưng cũng hy vọng có anh chị nào thấy và giúp đỡ. Mình đang cố tìm cách rút ngắn thời gian làm việc với excel.
Có thể dùng ADO để giải bài toán này không bạn?Sao rút ngắn thời gian làm việc với Excel?
Ở đây (forum) mọi người đều tăng thời gian làm việc với Exce để có kiến thức, kinh nghiệm
Muốn giúp gì thì đưa file lên thì mới cụ thể được, còn mô tả kiểu này thì mọi người chỉ đọc cho vui, sau đó có thể giúp bằng cách chỉ đường chung chung như sau:
Dùng VBA: không ghi được với ADO thì dùng cách workbooks.open mở file mà ghi rồi save vào là được
Anh hiểu nhầm ý mình rồi ạ. DO mình làm việc nhóm, mình muốn làm file tiến độ thực hiện để rút ngắn thời gian làm việc với excel ạ. Mình rất hào hứng khi tìm hiểu về VBA nên mình quyết định tìm hiểu để đáp ứng công việc và có cơ hội để học hỏi cố tìm cách giải quyết ý tưởng với VBA và khi được các anh chị giúp đỡ. Mình lang thang tìm giải pháp thích hợp thì thấy có code của anh ptlong04x1 thích hợp với yêu cầu bản thân đặt ra là: Từ "file A" thành viên nhóm sẽ ghi tiến độ thực hiện vào " File B" mà không cần mở " file B", nội dung như sau ạ:Sao rút ngắn thời gian làm việc với Excel?
Ở đây (forum) mọi người đều tăng thời gian làm việc với Exce để có kiến thức, kinh nghiệm
Muốn giúp gì thì đưa file lên thì mới cụ thể được, còn mô tả kiểu này thì mọi người chỉ đọc cho vui, sau đó có thể giúp bằng cách chỉ đường chung chung như sau:
Dùng VBA: không ghi được với ADO thì dùng cách workbooks.open mở file mà ghi rồi save vào là được
Ở bài trước là vùng M2 : P2 mà bạn?"M2 : Q2"
Dạ. Em ghi nhầm ạ. Từ M2 : q2 ạỞ bài trước là vùng M2 : P2 mà bạn?
Dùng thử code sau nhé:Dạ. Em ghi nhầm ạ. Từ M2 : q2 ạ
Sub GhiDL_HLMT()
Dim strFileA As String, strFileB As String
strFileA = ThisWorkbook.FullName
strFileB = ThisWorkbook.Path & "\File B.xlsm"
With CreateObject("ADODB.Connection")
.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & strFileB & ";Extended Properties=""Excel 12.0;HDR=No"""
.Execute ("Insert Into [dulieu$M2:S] Select F1,F2,F3,F4,F5,NOW() as F6,'" & strFileA & "' as F7 FROM [EXCEL 12.0;HDR=No;Database=" & strFileA & "].[TIEN_DO$M2:Q2] ")
End With
End Sub
Dạ. em cảm ơn nhiều. Em sẽ xem rồi báo lại ạDùng thử code sau nhé:
Mã:Sub GhiDL_HLMT() Dim strFileA As String, strFileB As String strFileA = ThisWorkbook.FullName strFileB = ThisWorkbook.Path & "\File B.xlsm" With CreateObject("ADODB.Connection") .Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & strFileB & ";Extended Properties=""Excel 12.0;HDR=No""" .Execute ("Insert Into [dulieu$M2:S] Select F1,F2,F3,F4,F5,NOW() as F6,'" & strFileA & "' as F7 FROM [EXCEL 12.0;HDR=No;Database=" & strFileA & "].[TIEN_DO$M2:Q2] ") End With End Sub
Thật tuyêt! code chạy ổn ạ, em đã mất hơn 15 đêm làm và nghiên cứu mà ko có kết quả. Vì em đang giai đoạn bắt đầu thực hiện ý tưởng nên có phát sinh thêm chút nữa ạ. Có thể giúp em thêm chứ, em sẽ rất cảm kích vì điều này. Em có ghi cụ thể trong 2 file em gửi kèm. Sơ bộ như sau:Dạ. em cảm ơn nhiều. Em sẽ xem rồi báo lại ạ
(1) Xóa cả dòng từ dưới tiêu đề cột đến dòng 20. Lưu ý là phải xóa bằng cách delete entire row nhé.Thật tuyêt! code chạy ổn ạ, em đã mất hơn 15 đêm làm và nghiên cứu mà ko có kết quả. Vì em đang giai đoạn bắt đầu thực hiện ý tưởng nên có phát sinh thêm chút nữa ạ. Có thể giúp em thêm chứ, em sẽ rất cảm kích vì điều này. Em có ghi cụ thể trong 2 file em gửi kèm. Sơ bộ như sau:
(1) - em điều chỉnh vùng dữ liệu của file nhận ( vị trí cột) , chỉ thay đổi cột trong code. nhưng qua file nhận " file B" dữ liệu nó cách hàng đầu tiên tới 20 hàng chứ không như ban đầu Anh code giúp.
(2) - Vì file B ( file chính) nó nằm ở vị trí khác cùng mạng, và đổi tên theo dự án. Làm sao để cho phép chọn file chứa dữ liệu ghi "file B" trước khi ghi dữ liệu .
(3) - Ghi dữ liệu vào file B với điều kiện ( nếu ở ô L2 ở file A là "a" thì ghi dữ liệu vào vùng có điều kiện :"a" ở sheet "dulieu" của file B.
(4) - Đây là cơ hội tốt để em tìm hiểu chuyên sâu về excel, Anh có thể giải thích giúp em về code đã viết được không ạ
Em có gửi kèm file và ghi rõ nội dung trong file ạ.
Sub test()
Dim fd As Office.FileDialog
Set fd = Application.FileDialog(msoFileDialogFilePicker)
With fd
.Filters.Clear
.Title = "Select an Excel File"
.Filters.Add "Excel Files", "*.xls*", 1
.AllowMultiSelect = False
Dim sFile As String
If .Show = True Then
sFile = .SelectedItems(1)
End If
End With
MsgBox sFile
End Sub
Sub GhiDL_HLMT()
Dim strFileA As String, strFileB As String
strFileA = ThisWorkbook.FullName
strFileB = ThisWorkbook.Path & "\File B.xlsm"
With CreateObject("ADODB.Connection")
.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & strFileB & ";Extended Properties=""Excel 12.0;HDR=No"""
.Execute ("Insert Into [" & Sheets("TIEN_DO").Range("L2") & "] Select F1,F2,F3,F4,F5,NOW() as F6,'" & strFileA & "' as F7 FROM [EXCEL 12.0;HDR=No;Database=" & strFileA & "].[TIEN_DO$M2:Q2] ")
End With
End Sub
Vâng. Em rất cảm kích. Sẽ cố gắng với tiêu chí gian nan không nản. Cảm ơn ạ.(1) Xóa cả dòng từ dưới tiêu đề cột đến dòng 20. Lưu ý là phải xóa bằng cách delete entire row nhé.
(2) Chịu khó tìm kiếm cách dùng Open FileDialog
Ví dụ ráp code sau vào:
(3) Không thể ghi dữ liệu trên cùng 1 bảng tính với nhiều bảng dữ liệu như bạn quy định ngoại trừ cách đặt name.Mã:Sub test() Dim fd As Office.FileDialog Set fd = Application.FileDialog(msoFileDialogFilePicker) With fd .Filters.Clear .Title = "Select an Excel File" .Filters.Add "Excel Files", "*.xls*", 1 .AllowMultiSelect = False Dim sFile As String If .Show = True Then sFile = .SelectedItems(1) End If End With MsgBox sFile End Sub
Code như sau:
Mã:Sub GhiDL_HLMT() Dim strFileA As String, strFileB As String strFileA = ThisWorkbook.FullName strFileB = ThisWorkbook.Path & "\File B.xlsm" With CreateObject("ADODB.Connection") .Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & strFileB & ";Extended Properties=""Excel 12.0;HDR=No""" .Execute ("Insert Into [" & Sheets("TIEN_DO").Range("L2") & "] Select F1,F2,F3,F4,F5,NOW() as F6,'" & strFileA & "' as F7 FROM [EXCEL 12.0;HDR=No;Database=" & strFileA & "].[TIEN_DO$M2:Q2] ") End With End Sub
(4) Hãy tập đọc và viết nhiều hơn nữa để tích lũy kinh nghiệm nhé.
Riêng mục (2) hãy tự thân vận động mới mau tiến bộ nhé.
Theo tôi thì bạn nên cho vào 1 bảng dữ liệu, không nên tách ra thành nhiều bảng. Trong bảng dữ liệu đó thêm 1 cột để ghi thông tin tên danh mục của các bảng đó. Như vậy dữ liệu sẽ mạch lạc hơn.Vâng. Em rất cảm kích. Sẽ cố gắng với tiêu chí gian nan không nản. Cảm ơn ạ.
Cảm ơn anh góp ý thêm. Có lẻ em sẽ xem sét vấn đề này sau khi em ghép được cái sub tìm file đích "file b" vào sub ghi dữ liệu. Em nghĩ chắc lâuTheo tôi thì bạn nên cho vào 1 bảng dữ liệu, không nên tách ra thành nhiều bảng. Trong bảng dữ liệu đó thêm 1 cột để ghi thông tin tên danh mục của các bảng đó. Như vậy dữ liệu sẽ mạch lạc hơn.
Hi anh. Anh không phiền nếu tiếp tục giúp em chứ ạ. Em có gửi ảnh đính kèm, ANh xem và giúp em với(1) Xóa cả dòng từ dưới tiêu đề cột đến dòng 20. Lưu ý là phải xóa bằng cách delete entire row nhé.
(2) Chịu khó tìm kiếm cách dùng Open FileDialog
Ví dụ ráp code sau vào:
(3) Không thể ghi dữ liệu trên cùng 1 bảng tính với nhiều bảng dữ liệu như bạn quy định ngoại trừ cách đặt name.Mã:Sub test() Dim fd As Office.FileDialog Set fd = Application.FileDialog(msoFileDialogFilePicker) With fd .Filters.Clear .Title = "Select an Excel File" .Filters.Add "Excel Files", "*.xls*", 1 .AllowMultiSelect = False Dim sFile As String If .Show = True Then sFile = .SelectedItems(1) End If End With MsgBox sFile End Sub
Code như sau:
Mã:Sub GhiDL_HLMT() Dim strFileA As String, strFileB As String strFileA = ThisWorkbook.FullName strFileB = ThisWorkbook.Path & "\File B.xlsm" With CreateObject("ADODB.Connection") .Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & strFileB & ";Extended Properties=""Excel 12.0;HDR=No""" .Execute ("Insert Into [" & Sheets("TIEN_DO").Range("L2") & "] Select F1,F2,F3,F4,F5,NOW() as F6,'" & strFileA & "' as F7 FROM [EXCEL 12.0;HDR=No;Database=" & strFileA & "].[TIEN_DO$M2:Q2] ") End With End Sub
(4) Hãy tập đọc và viết nhiều hơn nữa để tích lũy kinh nghiệm nhé.
Riêng mục (2) hãy tự thân vận động mới mau tiến bộ nhé.
Đưa 2 dòng code sau lên trên cùng Module1Hi anh. Anh không phiền nếu tiếp tục giúp em chứ ạ. Em có gửi ảnh đính kèm, ANh xem và giúp em với
Option Explicit
Public strFileB As String
Sub DuongDan()
Dim fd As Office.FileDialog
Set fd = Application.FileDialog(msoFileDialogFilePicker)
With fd
.Filters.Clear
.Title = "Select an Excel File"
.Filters.Add "Excel Files", "*.xls*", 1
.AllowMultiSelect = False
If .Show = True Then
strFileB = .SelectedItems(1)
End If
End With
End Sub
Sub GhiDL_HLMT()
Dim strFileA As String
If Len(strFileB) = 0 Then
Call DuongDan
End If
strFileA = ThisWorkbook.FullName
With CreateObject("ADODB.Connection")
.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & strFileB & ";Extended Properties=""Excel 12.0;HDR=No"""
.Execute ("Insert Into [" & Sheets("TIEN_DO").Range("L2") & "] Select F1,F2,F3,F4,F5,NOW() as F6,'" & strFileA & "' as F7 FROM [EXCEL 12.0;HDR=No;Database=" & strFileA & "].[TIEN_DO$M2:Q2] ")
End With
End Sub
Help! Em đã học được rất nhiều và đang hoàn thành ý tưởng của mình nhờ sự giúp đỡ của anh, vấn đề của em vướng phải bây giờ là khi đưa file lên ondriver để mọi người dùng chung. lấy fileA ghi vào fileB thì nhận thông báo lỗi như hình đính kèm. Em không biết lý do vì sao. Em lang thang khắp các diễn đàn, có nhiều hướng hướng dẫn, mà vì mới nghiên cứu nên em chưa hiểu hết và áp dụng, ráp vào code mà anh đã chỉ giúp. Anh có thể giúp đỡ thêm vấn đề này được không ạ.Đưa 2 dòng code sau lên trên cùng Module1
Mã:Option Explicit Public strFileB As String
Chép code sau vào Module1
Mã:Sub DuongDan() Dim fd As Office.FileDialog Set fd = Application.FileDialog(msoFileDialogFilePicker) With fd .Filters.Clear .Title = "Select an Excel File" .Filters.Add "Excel Files", "*.xls*", 1 .AllowMultiSelect = False If .Show = True Then strFileB = .SelectedItems(1) End If End With End Sub
Cuối cùng cũng chép code sau và chạy nó.
Mã:Sub GhiDL_HLMT() Dim strFileA As String If Len(strFileB) = 0 Then Call DuongDan End If strFileA = ThisWorkbook.FullName With CreateObject("ADODB.Connection") .Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & strFileB & ";Extended Properties=""Excel 12.0;HDR=No""" .Execute ("Insert Into [" & Sheets("TIEN_DO").Range("L2") & "] Select F1,F2,F3,F4,F5,NOW() as F6,'" & strFileA & "' as F7 FROM [EXCEL 12.0;HDR=No;Database=" & strFileA & "].[TIEN_DO$M2:Q2] ") End With End Sub
Có cách nào để mình dùng được trên ondriver không ạ. Nếu ở trên onedriver từ fileA cho chọn tìm fileB mà vẫn dùng được, nếu ở máy tính cục bộ vẫn cho duyệt tìm fileB và dùng được. Do tụi em làm việc nhóm bằng ondriver, làm việc từ xa.Help! Em đã học được rất nhiều và đang hoàn thành ý tưởng của mình nhờ sự giúp đỡ của anh, vấn đề của em vướng phải bây giờ là khi đưa file lên ondriver để mọi người dùng chung. lấy fileA ghi vào fileB thì nhận thông báo lỗi như hình đính kèm. Em không biết lý do vì sao. Em lang thang khắp các diễn đàn, có nhiều hướng hướng dẫn, mà vì mới nghiên cứu nên em chưa hiểu hết và áp dụng, ráp vào code mà anh đã chỉ giúp. Anh có thể giúp đỡ thêm vấn đề này được không ạ.