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 B88 trở xuống thì tại B88 tại file B bạn đặt tiêu đề STT,TEN,SL. Sau đó chạy Code anh HLMT.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.
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.