E đã thay A1 thành A2, thì dữ liệu copy chuyển xuống 1 dòng được rồi ạ, e ko biết code để copy tiêu đề bên trên, bác giúp e đoạn code đó với, e cảm ơn!
E đã thay A1 thành A2, thì dữ liệu copy chuyển xuống 1 dòng được rồi ạ, e ko biết code để copy tiêu đề bên trên, bác giúp e đoạn code đó với, e cảm ơn!
Chỉ cần tạo 1 biến mở Recordset là đủ. Tôi tạm chỉnh code của bạn như sau:
Mã:
Public Sub GetDataBase()
Dim Db As Object
Dim Rs As Object
Dim AccPath As String
Dim i As Integer
AccPath = Application.GetOpenFilename("TEXT FILES(*.mdb),*.mdb")
Set Db = MyDAO(AccPath)
Set Rs = Db.OpenRecordset("Frame Sections")
With Sheets("Frame Sections")
.Columns("A:V").Delete
For i = 0 To Rs.Fields.Count - 1
.Cells(1, i + 1) = Rs.Fields(i).Name
Next
.Range("A2").CopyFromRecordset Rs
End With
Rs.Close
Set Rs = Db.OpenRecordset("Frame Assignments - Summary")
With Sheets("Frame Assignments- Summary")
.Columns("A:V").Delete
For i = 0 To Rs.Fields.Count - 1
.Cells(1, i + 1) = Rs.Fields(i).Name
Next
.Range("A2").CopyFromRecordset Rs
End With
Rs.Close
Set Rs = Db.OpenRecordset("Column Forces")
With Sheets("Column Forces")
.Columns("A:V").Delete
For i = 0 To Rs.Fields.Count - 1
.Cells(1, i + 1) = Rs.Fields(i).Name
Next
.Range("A2").CopyFromRecordset Rs
End With
Sheets("ThepCot").Select
Range("A1").Select
End Sub
E đã test và thấy đoạn code bác thêm vào hoạt động tốt, toàn bộ phần tiêu đề giờ đã xuất hiện, e đang cố đọc code để hiểu
nguyên đoạn code này là để chừa lại dòng trên cùng nhập tên đúng ko bác:
For i = 0 To Rs.Fields.Count - 1
.Cells(1, i + 1) = Rs.Fields(i).Name
Next
E đã test và thấy đoạn code bác thêm vào hoạt động tốt, toàn bộ phần tiêu đề giờ đã xuất hiện, e đang cố đọc code để hiểu
nguyên đoạn code này là để chừa lại dòng trên cùng nhập tên đúng ko bác:
Nôm na là khi đổ dữ liệu từ Recordset xuống sheet thì mặc định nó không có tiêu đề cột. Muốn có tiêu đề cột thì bạn phải đọc cái tiêu đề cột trong bảng và ghi xuống sheet. Những dòng code trên có ý nghĩa như thế.
Nôm na là khi đổ dữ liệu từ Recordset xuống sheet thì mặc định nó không có tiêu đề cột. Muốn có tiêu đề cột thì bạn phải đọc cái tiêu đề cột trong bảng và ghi xuống sheet. Những dòng code trên có ý nghĩa như thế.
Hic, có chút vấn đề bác ơi, giờ thì vấn đề nhập dữ liệu từ Access sang Excel ok rùi, nhưng khi e nhấn lệnh nhập dữ liệu xong, thì toàn bộ những công thức ở các sheet khác, mà e lấy số liệu từ sheet vừa nhập dữ liệu xong ý bị mất địa chỉ ô toàn bộ, kiểu như hình e gửi kèm ý ạ! Bác giúp e với! E cảm ơn!
Hic, có chút vấn đề bác ơi, giờ thì vấn đề nhập dữ liệu từ Access sang Excel ok rùi, nhưng khi e nhấn lệnh nhập dữ liệu xong, thì toàn bộ những công thức ở các sheet khác, mà e lấy số liệu từ sheet vừa nhập dữ liệu xong ý bị mất địa chỉ ô toàn bộ, kiểu như hình e gửi kèm ý ạ! Bác giúp e với! E cảm ơn!
E ko hiểu lắm, e chỉ nghĩ đơn giản là, File này e dùng chung cho nhiều số liệu khác nhau nhập từ 1 file access, nên mỗi lần nhập số liệu mới thì phải xóa số liệu cũ đi, e cứ nghĩ là nó ko ảnh hưởng đến các sheet công thức bên cạnh ??? vậy có cách nào giữ được công thức các sheet khác ko ạ?
E ko hiểu lắm, e chỉ nghĩ đơn giản là, File này e dùng chung cho nhiều số liệu khác nhau nhập từ 1 file access, nên mỗi lần nhập số liệu mới thì phải xóa số liệu cũ đi, e cứ nghĩ là nó ko ảnh hưởng đến các sheet công thức bên cạnh ??? vậy có cách nào giữ được công thức các sheet khác ko ạ?
Bài đã được tự động gộp:
E vừa xóa dòng đó đi và chạy lại, may quá ko bị lỗi gì ạ!
Nhân đây, bác giúp e chút vấn đề này nữa nhé! File excel e gửi bên trên, có sheet(BxH), sheet này là e nhặt số liệu từ các sheet vừa nhập dữ liệu ban đầu, bác viết giúp e đoạn code sao chép hàng loạt dòng xuống tương ứng với số dòng của bên sheet(Column forces) ý ạ, nghĩa là bên sheet(Column forces) có bao nhiêu dòng thì bên sheet(BxH) tự động copy xuống từng đó dòng ý ạ! E xin chân thành cảm ơn bác!
Đây là đoạn code trước e cóp nhặt và chế ra, nhưng là giới hạn số dòng copy, e ko biết cách để nó tự phát hiện xem sheet(column force) bao nhiêu dòng thì nó tự kéo xuống bấy nhiêu dòng ý ạ, bác sửa giúp e với!
Nhân đây, bác giúp e chút vấn đề này nữa nhé! File excel e gửi bên trên, có sheet(BxH), sheet này là e nhặt số liệu từ các sheet vừa nhập dữ liệu ban đầu, bác viết giúp e đoạn code sao chép hàng loạt dòng xuống tương ứng với số dòng của bên sheet(Column forces) ý ạ, nghĩa là bên sheet(Column forces) có bao nhiêu dòng thì bên sheet(BxH) tự động copy xuống từng đó dòng ý ạ! E xin chân thành cảm ơn bác!
Bài đã được tự động gộp:
E sửa theo thế thì thì ok luôn rồi ạ! E cảm ơn bác!
Bài đã được tự động gộp:
Đây là đoạn code trước e cóp nhặt và chế ra, nhưng là giới hạn số dòng copy, e ko biết cách để nó tự phát hiện xem sheet(column force) bao nhiêu dòng thì nó tự kéo xuống bấy nhiêu dòng ý ạ, bác sửa giúp e với!
Dạ, ý e là sheet(Column Force) có thể có nhiều hơn số hàng đó (hiện giờ file e đang làm là có từng ấy hàng ạ), nghĩa là số hàng là ko biết trước, trường hợp sheet(Column Force) có tầm 123 hàng (chẳng hạn), thì việc để cho code tự phát hiện có bao nhiêu hàng để nó tự động copy xuống hàng cuối cùng của sheet(Column Force) liệu có khả thi ko ạ? E cảm ơn!
Dạ, ý e là sheet(Column Force) có thể có nhiều hơn số hàng đó (hiện giờ file e đang làm là có từng ấy hàng ạ), nghĩa là số hàng là ko biết trước, trường hợp sheet(Column Force) có tầm 123 hàng (chẳng hạn), thì việc để cho code tự phát hiện có bao nhiêu hàng để nó tự động copy xuống hàng cuối cùng của sheet(Column Force) liệu có khả thi ko ạ? E cảm ơn!
Dạ, nghĩa là muốn copy xuống, kiểu gì vẫn phải qua bước đếm xem Sheets("Column Forces") có bao nhiêu hàng đã ạ?
Sau đó ứng với từng File cụ thể thì mình sẽ sửa code để máy tự động chạy xuống từng đó dòng ạ?
E cảm ơn bác!
Dạ, nghĩa là muốn copy xuống, kiểu gì vẫn phải qua bước đếm xem Sheets("Column Forces") có bao nhiêu hàng đã ạ?
Sau đó ứng với từng File cụ thể thì mình sẽ sửa code để máy tự động chạy xuống từng đó dòng ạ?
E cảm ơn bác!
Đúng rồi bạn, mình phải xác định được số dòng tương ứng trước chứ. Bạn có thể xác định nó khi lấy dữ liệu
Mã:
Public Sub GetDataBase()
Dim Db As Object
Dim Rs As Object
Dim AccPath As String
Dim i As Integer
Dim sodong As Integer
AccPath = Application.GetOpenFilename("TEXT FILES(*.mdb),*.mdb")
Set Db = MyDAO(AccPath)
Set Rs = Db.OpenRecordset("Frame Sections")
With Sheets("Frame Sections")
.Columns("A:V").ClearContents
For i = 0 To Rs.Fields.Count - 1
.Cells(1, i + 1) = Rs.Fields(i).Name
Next
sodong = Rs.RecordCount + 1
MsgBox "So dong cua sheet [Frame Sections] la: " & sodong
.Range("A2").CopyFromRecordset Rs
End With
Rs.Close
Set Rs = Db.OpenRecordset("Frame Assignments - Summary")
With Sheets("Frame Assignments- Summary")
.Columns("A:V").ClearContents
For i = 0 To Rs.Fields.Count - 1
.Cells(1, i + 1) = Rs.Fields(i).Name
Next
sodong = Rs.RecordCount + 1
MsgBox "So dong cua sheet [Frame Assignments- Summary] la: " & sodong
.Range("A2").CopyFromRecordset Rs
End With
Rs.Close
Set Rs = Db.OpenRecordset("Column Forces")
With Sheets("Column Forces")
.Columns("A:V").ClearContents
For i = 0 To Rs.Fields.Count - 1
.Cells(1, i + 1) = Rs.Fields(i).Name
Next
sodong = Rs.RecordCount + 1
MsgBox "So dong cua sheet [Column Forces] la: " & sodong
.Range("A2").CopyFromRecordset Rs
End With
Sheets("ThepCot").Select
Range("A1").Select
End Sub
Rút gọn code trên lại một chút. Lưu ý tên bảng phải giống tên sheet nhé.
Mã:
Public Sub GetDataBase()
Dim Db As Object, Rs As Object
Dim AccPath As String, TenSheet As String
Dim i As Integer, SoDong As Integer, iSht As Integer
Dim arrTenSheet As Variant
arrTenSheet = Array("Frame Sections", "Frame Assignments - Summary", "Column Forces")
AccPath = Application.GetOpenFilename("TEXT FILES(*.mdb),*.mdb")
Set Db = MyDAO(AccPath)
For iSht = 0 To 2
TenSheet = arrTenSheet(iSht)
Set Rs = Db.OpenRecordset(TenSheet)
With Sheets(TenSheet)
.Columns("A:V").ClearContents
For i = 0 To Rs.Fields.Count - 1
.Cells(1, i + 1) = Rs.Fields(i).Name
Next
SoDong = Rs.RecordCount + 1
MsgBox "So dong cua sheet " & TenSheet & " la: " & SoDong
.Range("A2").CopyFromRecordset Rs
End With
Rs.Close
Next
Sheets("ThepCot").Select
Range("A1").Select
End Sub
Đúng rồi bạn, mình phải xác định được số dòng tương ứng trước chứ. Bạn có thể xác định nó khi lấy dữ liệu
Mã:
Public Sub GetDataBase()
Dim Db As Object
Dim Rs As Object
Dim AccPath As String
Dim i As Integer
Dim sodong As Integer
AccPath = Application.GetOpenFilename("TEXT FILES(*.mdb),*.mdb")
Set Db = MyDAO(AccPath)
Set Rs = Db.OpenRecordset("Frame Sections")
With Sheets("Frame Sections")
.Columns("A:V").ClearContents
For i = 0 To Rs.Fields.Count - 1
.Cells(1, i + 1) = Rs.Fields(i).Name
Next
sodong = Rs.RecordCount + 1
MsgBox "So dong cua sheet [Frame Sections] la: " & sodong
.Range("A2").CopyFromRecordset Rs
End With
Rs.Close
Set Rs = Db.OpenRecordset("Frame Assignments - Summary")
With Sheets("Frame Assignments- Summary")
.Columns("A:V").ClearContents
For i = 0 To Rs.Fields.Count - 1
.Cells(1, i + 1) = Rs.Fields(i).Name
Next
sodong = Rs.RecordCount + 1
MsgBox "So dong cua sheet [Frame Assignments- Summary] la: " & sodong
.Range("A2").CopyFromRecordset Rs
End With
Rs.Close
Set Rs = Db.OpenRecordset("Column Forces")
With Sheets("Column Forces")
.Columns("A:V").ClearContents
For i = 0 To Rs.Fields.Count - 1
.Cells(1, i + 1) = Rs.Fields(i).Name
Next
sodong = Rs.RecordCount + 1
MsgBox "So dong cua sheet [Column Forces] la: " & sodong
.Range("A2").CopyFromRecordset Rs
End With
Sheets("ThepCot").Select
Range("A1").Select
End Sub
Rút gọn code trên lại một chút. Lưu ý tên bảng phải giống tên sheet nhé.
Mã:
Public Sub GetDataBase()
Dim Db As Object, Rs As Object
Dim AccPath As String, TenSheet As String
Dim i As Integer, SoDong As Integer, iSht As Integer
Dim arrTenSheet As Variant
arrTenSheet = Array("Frame Sections", "Frame Assignments - Summary", "Column Forces")
AccPath = Application.GetOpenFilename("TEXT FILES(*.mdb),*.mdb")
Set Db = MyDAO(AccPath)
For iSht = 0 To 2
TenSheet = arrTenSheet(iSht)
Set Rs = Db.OpenRecordset(TenSheet)
With Sheets(TenSheet)
.Columns("A:V").ClearContents
For i = 0 To Rs.Fields.Count - 1
.Cells(1, i + 1) = Rs.Fields(i).Name
Next
SoDong = Rs.RecordCount + 1
MsgBox "So dong cua sheet " & TenSheet & " la: " & SoDong
.Range("A2").CopyFromRecordset Rs
End With
Rs.Close
Next
Sheets("ThepCot").Select
Range("A1").Select
End Sub
E giờ mới để ý thấy bác giúp e rút gọn lại code!
E vừa chạy thử, code báo cho số dòng, nhưng bị lỗi như trong ảnh ạ!
Với lại bác ko cần sửa lỗi này nữa đâu ạ, trước khi chạy code e để ý số dòng cũng được!
Có điều, e nhớ cũng lâu rồi, cách đây 3, 4 năm gì đó, có lần e xem trên mạng có đoạn code cho phép copy (thay cho thao tác bôi đen hàng trên (như bảng của e là bôi đen row(11:11), sau đó đặt chuột vào dấu cộng màu đen rồi kéo xuống, đến khi nào đến dòng cuối của sheet("Column Forces") thì dừng lại), kiểu như có code để tự động phát hiện ra dòng cuối của sheet("Column Forces") ý ạ!
E có tìm trong File hồi xưa, có đoạn code thế này, bác xem giúp e ko biết có phải là nó ko?
E giờ mới để ý thấy bác giúp e rút gọn lại code!
E vừa chạy thử, code báo cho số dòng, nhưng bị lỗi như trong ảnh ạ!
Với lại bác ko cần sửa lỗi này nữa đâu ạ, trước khi chạy code e để ý số dòng cũng được!
Có điều, e nhớ cũng lâu rồi, cách đây 3, 4 năm gì đó, có lần e xem trên mạng có đoạn code cho phép copy (thay cho thao tác bôi đen hàng trên (như bảng của e là bôi đen row(11:11), sau đó đặt chuột vào dấu cộng màu đen rồi kéo xuống, đến khi nào đến dòng cuối của sheet("Column Forces") thì dừng lại), kiểu như có code để tự động phát hiện ra dòng cuối của sheet("Column Forces") ý ạ!
E có tìm trong File hồi xưa, có đoạn code thế này, bác xem giúp e ko biết có phải là nó ko?
Nhờ các bác giúp đỡ . Em tạo một button trên file excel để mở một file access từ ỗ D. Em đã thử lệnh shell nhưng không được. Nhờ các bác cho em sub để mở file access đó ạ. Em cảm ơn