2 file nằm chung 1 folder thì code như sau: (Mở file B ra và copy dữ liệu file A vào, đóng file B lại)Mình có 1 File A và file B đều nằm trong thư mục C. Vấn đề là làm sao không cần mở file B nhưng từ file A có thể ghi dữ liệu vào sheet 1 ô A1 của file B. Mong các bạn giúp
Sub Copy()
On Error Resume Next
Dim wk As Workbook
Dim s As Worksheet
Dim a As Range
Dim strPath, strFile As String
Set a = Sheet1.Range("a1:f" & Sheet1.Range("a65500").End(xlUp).Row)
strPath = ThisWorkbook.Path
strFile = "B.xls"
Set wk = Workbooks.Open(strPath & "\" & strFile)
Set s = wk.Sheets("Sheet1")
a.Copy s.Range("a65536").End(xlUp).Offset(1, 0)
Set a = Nothing
Set s = Nothing
wk.Save
wk.Close True
Set wk = Nothing
End Sub
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
@ ptlong04x1
1. Tôi đã xem bài của bạn nhưng đối với tôi việc nhập chính xác đường dẫn bằng thủ công còn khó hơn việc mở file ra copy rồi đóng lại bằng thủ công nên bài này đã nhiều lần "mở ra rồi lại đậy lại, chẳng làm gì được". Nếu bạn thêm phần Open... thì tốt quá.
2. Không phải ai cũng biết sửa code để làm ngược lại những bài tương tự do đó bạn làm giúp luôn đi để khi chưa kịp học vẫn có cái mà sài tạm.
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
PHP:Sub RecData(FilPath As String) On Error Resume Next 1 With New Scripting.FileSystemObject 2 With .GetFile(FilPath) 3 If InStr(.Name, ".xls") = 0 Then Exit Sub 4 With Workbooks.Open(.Path) 5 .Sheets(1).Range("A1") = ThisWorkbook.Sheets(1).Range("A1") 6 .Close (True) End With End With End With End Sub '------------------------------------------------------------' Sub Run() On Error Resume Next 7 With Application.FileDialog(msoFileDialogFilePicker) 8 .Show 9 .AllowMultiSelect = False 10 Call RecData(.SelectedItems(1)) End With End Sub
@ ptlong04x1
1. Tôi đã xem bài của bạn nhưng đối với tôi việc nhập chính xác đường dẫn bằng thủ công còn khó hơn việc mở file ra copy rồi đóng lại bằng thủ công nên bài này đã nhiều lần "mở ra rồi lại đậy lại, chẳng làm gì được". Nếu bạn thêm phần Open... thì tốt quá.
2. Không phải ai cũng biết sửa code để làm ngược lại những bài tương tự do đó bạn làm giúp luôn đi để khi chưa kịp học vẫn có cái mà sài tạm.
Sub RecData()
On Error Resume Next
With Workbooks.Open(ThisWorkbook.Path & "\B.xls")
.Sheets(1).[A1] = ThisWorkbook.Sheets(1).[A1]
.Close (True)
End With
End Sub
Hi anh, có lẽ chúng ta đang phức tạp hoá vấn đề và lạc sang topic khác mất rồi, với yêu cầu của tác giả thì theo em code chỉ thế này là đủ.
Code ở bài trước em viết, nó chỉ là 1 ví dụ cho việc sử dụng đối tượng FileSystemObject (đối tượng này có nhiều thứ rất hay ho), nhưng theo em không cần thiết sử dụng nó cho bài này.PHP:Sub RecData() On Error Resume Next With Workbooks.Open(ThisWorkbook.Path & "\B.xls") .Sheets(1).[A1] = ThisWorkbook.Sheets(1).[A1] .Close (True) End With End Sub
.Sheets(1).[A1] = ThisWorkbook.Sheets(1).[A1]
ThisWorkbook.Sheets(1).Cells.Copy .Sheets(1).Cells
Chào anh chị.Mình muốn có một macro ghi dữ liệu từ một file excel này (đang mở) sang một file excel khác đang đóng. Bạn nào biết xin hướng dẫn dùm cú pháp, cám ơn
Thử ví dụ như sau:Chào anh chị.
Trường hợp của em cũng giống như bạn hanhpptc, em đã tìm trong diễn đàn có mấy bài tương tự dùng ADO (tại hướng dẫn của thầy NDU, thầy Hai Lúa Miền Tây, thầy Viet Hoài, Thuyeu và các bài ADO căn bản của thớt học ADO) nhưng vẫn chưa làm được. Em cũng tìm trên google nhưng toàn là trường hợp ngược lại (Nghĩa là lấy dữ liệu từ file đang đóng sang book đang mở).
Nhờ anh chị gửi giúp em một ví dụ thật đơn giản để ghi dữ liệu từ một file A (đang mở) sang một file B (đang đóng) bằng ADO được không ạ? Trên file A chỉ 1 vùng nhỏ thôi ạ.
Em cảm ơn nhiều.
.Execute "INSERT INTO [Data$B8:D23] SELECT STT,TEN,SL FROM [excel 8.0;database=" & _ ThisWorkbook.FullName & ";HDR=Yes].[Sheet1$B8:D23]"
.Execute "INSERT INTO [Sheet1$B8:D23] SELECT STT,TEN,SL FROM [excel 8.0;database=" & _ ThisWorkbook.FullName & ";HDR=Yes].[Sheet1$B8:D23]"
Sub GhiDL_HLMT()
Dim cn As Object
Set cn = CreateObject("ADODB.Connection")
With cn
.ConnectionString = "Provider= Microsoft.Jet.OLEDB.4.0;" & _
"data source=" & ThisWorkbook.Path & _
"\B.xls;extended properties=""excel 8.0;HDR=Yes;"";"
.Open
.Execute "INSERT INTO [[COLOR=#ff0000][B]Data_B[/B][/COLOR]$] SELECT STT,TEN,SL FROM [excel 8.0;database=" & _
ThisWorkbook.FullName & ";HDR=Yes].[[B][COLOR=#ff0000]Data_A[/COLOR][/B]$[B][COLOR=#ff0000]B8[/COLOR][/B]:D23]"
End With
cn.Close: Set cn = Nothing
End Sub
Bạn muốn chèn dữ liệu vào File B Tại vùng B8Cảm ơn anh TrungChinhs.
Chắc anh hiểu nhầm ý em rồi. Ý em ở đây là mình thay đổi địa chỉ đầu ra của file B. Dùng code của thầy "Hai Lúa Miền Tây" thì khi chạy nó tự động đưa về vị trí ô A1 của file B. Ý em muốn ở đây là mình muốn ghi vào một vùng bất kỳ trên file B. (Chẳng hạn nằm đúng với vị trí giống như ở file A).
Cảm ơn anh đã đóng góp, mong nhận ý kiến phải hồi của anh.
Cảm ơn anh TrungChinhs.
Chắc anh hiểu nhầm ý em rồi. Ý em ở đây là mình thay đổi địa chỉ đầu ra của file B. Dùng code của thầy "Hai Lúa Miền Tây" thì khi chạy nó tự động đưa về vị trí ô A1 của file B. Ý em muốn ở đây là mình muốn ghi vào một vùng bất kỳ trên file B. (Chẳng hạn nằm đúng với vị trí giống như ở file A).
Cảm ơn anh đã đóng góp, mong nhận ý kiến phải hồi của anh.
Nghĩa là đối với việc này ADO nó không cho phép phải không ạnh.
Cảm ơn anh, đúng là làm như vậy là sẽ xử lý được vấn đề của em rồi. Cho em hỏi thêm một câu nữa, Các tiêu đề STT, TEN,SL mình có set gì không? Hay là cứ đặt STT, TEN, SL là được. Nếu trong file đích có nhiều hơn 1 ký tự STT thì câu lệnh sẽ xử lý thế nào anh nhỉ.Bạn muốn chèn dữ liệu vào File B Tại vùng B88 trở xuống thì tại B8
8 tại file B bạn đặt tiêu đề STT,TEN,SL. Sau đó chạy Code anh HLMT.
Cảm ơn anh, đúng là làm như vậy là sẽ xử lý được vấn đề của em rồi. Cho em hỏi thêm một câu nữa, Các tiêu đề STT, TEN,SL mình có set gì không? Hay là cứ đặt STT, TEN, SL là được. Nếu trong file đích có nhiều hơn 1 ký tự STT thì câu lệnh sẽ xử lý thế nào anh nhỉ.
Để biết cách xử lý cho các trường hợp phát sinh bạn cần tìm hiểu ADO thì mới có thể tuỳ biến nhiều được.Cảm ơn anh, đúng là làm như vậy là sẽ xử lý được vấn đề của em rồi. Cho em hỏi thêm một câu nữa, Các tiêu đề STT, TEN,SL mình có set gì không? Hay là cứ đặt STT, TEN, SL là được. Nếu trong file đích có nhiều hơn 1 ký tự STT thì câu lệnh sẽ xử lý thế nào anh nhỉ.
.Execute "INSERT INTO [Data_B$] SELECT [B]STT,TEN,SL [/B]FROM [excel 8.0;database=" & _
ThisWorkbook.FullName & ";[B]HDR=Yes[/B]].[Data_A$B8:D23]"
Tôt nhất bạn nên tìm hiểu các đề tài của anh HaiLuaMienTay có hướng dẫn và giải thích rất rõ ràng nếu chưa biết gì ADO chúc bạn thành côngCảm ơn anh. Cái gì cũng phải có nguyên tắc của nó đúng không anh, nếu cứ bám theo hướng đó là xử lý được, không nên đặt ra những truờng hợp khó xử lý. ^^
Cảm ơn mọi người nhiều lắm.
Hihi. Kiểu này chắc em phải đọc lại từ bài 1 trong thớt của thầy HLMT quá. Thầy đưa ra có một yêu cầu, mà anh Viet Hoai đã xử luôn rồi, không ai hỏi tiếp về chủ đề update nữa. Bài tiếp theo là sắp xếp và xoá trong cơ sở dữ liệu. ^^Ah vậy là câu lệnh khác rồi bạn tìm hiểu lệnh update từ bài 101 nhen Bài tập về ADO căn bản.
Trong trường hợp của em, em muốn update toàn bộ các giá trị như ví dụ của thấy HLMT, em set theo cú pháp hướng dẫn của thầy có phải là như vầy không anh nmhung49:1./ Cú pháp:
[GPECODE=sql]UPDATE [Tên Bảng] SET [Cột 1]=GiaTri_1, [Cột 2]=GiaTri_2, ...,[Cột n]=GiaTri_n
WHERE [Tên_Cột_Và_Điều_Kiện_Update][/GPECODE]
lrs.Open lsSQL, cnn, 3, 1
Có thể do bài viết không đưa lên được các bài trong này nên chắc mọi người không để ý.
Nhờ các anh chị tư vấn giúp em thêm về trường hợp này nhé.
Cảm ơn anh chị nhiều.
Cảm ơn anh.- Dùng update thì ít nhất file B phải có cái gì đó để làm điều kiện update chứ bạn.
- Các câu lệnh Update, Insert, Delete... Nói chung là những câu lệnh không trả về dòng nào thì ta không cần khởi tạo Recordset.
---------------------------------------------------------------------------------------Thử ví dụ như sau:
[GPECODE=sql]Sub GhiDL_HLMT()
Dim cn As Object
Set cn = CreateObject("ADODB.Connection")
With cn
.ConnectionString = "Provider= Microsoft.Jet.OLEDB.4.0;" & _
"data source=" & ThisWorkbook.Path & _
"\B.xls;extended properties=""excel 8.0;HDR=Yes;"";"
.Open
.Execute "INSERT INTO [Data$] SELECT STT,TEN,SL FROM [excel 8.0;database=" & _
ThisWorkbook.FullName & ";HDR=Yes].[Sheet1$B823]"
End With
cn.Close: Set cn = Nothing
End Sub
[/GPECODE]
Bạn chịu khó gửi ví dụ xem sao nhé.Thầy ơi, cũng là vd này nhưng chỉ ghi dòng mới nào có đặt nút "GHI DL SANG FILE B" thì nội dung của dòng đó trên file A được ghi vào file B thôi được không thầy.
Vì e muốn ứng dụng vào mỗi lần em nhập nội dung xuất kho cho NV KD tên A thì cuối dòng e để tên A và khi click vào tên A đó nội dung xuất kho được nhập vào công nợ cho NVKD A ( file công nợ của A này đang là file B trong VD của Thầy) .
Xin cảm ơn Thầy nhiều lắm a.
--------------------------------------------------------
---------------------------------------------------------------------------------------
Bạn dùng code sau nhé.Gởi thầy Fiile đính kèm. Thầy giúp dùm em nha. Cảm ơn thầy nhiều.
Sub GhiDL()
Dim cn, rst As Object
Dim arrNV As Variant
Dim strFile As String
Set cn = CreateObject("ADODB.Connection")
Set rst = CreateObject("ADODB.Recordset")
cn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.FullName & ";Extended Properties=Excel 12.0"
rst.Open "select distinct NVKD from [XUAT KHO T#10$A3:M]", cn, 1
arrNV = rst.GetRows()
For i = 0 To rst.RecordCount - 1
strFile = ThisWorkbook.Path & "\CONGNO-" & arrNV(0, i) & ".xlsx"
cn.Close
cn.Open ("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & strFile & ";Extended Properties=Excel 12.0")
cn.Execute ("Insert Into [A:K] select TT,NgayCT,SoCT,KhachHang,MaHang,MatHang,DVT,SoLuong,DonGia,ThanhTien,GhiChu from [Excel 12.0;Database=" & ThisWorkbook.FullName & "].[XUAT KHO T#10$A3:M] where DaGhiDL is null and NVKD='" & arrNV(0, i) & "'")
Next
Sheet1.Range("M4:M" & Sheet1.Range("J65000").End(xlUp).Row) = "x"
End Sub
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 ạ.