select * from [A:E] .......
select * from [A6:E]
trước khi bắt đầu vòng lặp For thì xóa hết dữ liệu cũ trong file tổng hợp
kiếm cái nàyEm đã sữa lại như vậy rồi, dữ liệu copy thì copy từ dòng 6 nhưng khi dán vào file tổng hợp thì dán bắt đầu từ dòng 2
mRow = Sheet2.[B50000].End(xlUp).Row + 1
mRow = WorksheetFunction.Max(Sheet2.[B50000].End(xlUp).Row + 1, 6)
Cho mình hỏi "ngu" chút xíu, sửa thành như thế này có được không nhỉ?kiếm cái này
Mã:mRow = Sheet2.[B50000].End(xlUp).Row + 1
sửa lại thành
Mã:mRow = WorksheetFunction.Max(Sheet2.[B50000].End(xlUp).Row + 1, 6)
Cho mình hỏi "ngu" chút xíu, sửa thành như thế này có được không nhỉ?
mRow = Sheet2.[B50000].End(xlUp).Row + 5
P/s: Hông có ngồi trên máy nên hông test được. hehe
Cho mình hỏi "ngu" chút xíu, sửa thành như thế này có được không nhỉ?
mRow = Sheet2.[B50000].End(xlUp).Row + 5
P/s: Hông có ngồi trên máy nên hông test được. hehe
---------------------------------------------------
À, mình biết "ngu" ở chỗ nào rồi.
Bởi vậy mình mới nói là hỏi "ngu" chút xíu, chứ mình cũng như bạn mù tịt mấy khoản này luôn, nên chấp nhận chịu "ngu" để hỏi cho khôn ra ý.Sửa vậy khi tổng hợp dữ liệu các file sẽ cách nhau 5 ô, mình không biết vba nhưng cũng mò thử trước rồi, mò nhiệt tình lắm nhưng không được mới nhờ giúp đỡ.
Function GetData(ByVal FileName As String, ByVal SheetName As String, ByVal RangeAddress As String, _ ByVal HasTitle As Boolean, ByVal UseTitle As Boolean)
Dim rsCon As Object, rsData As Object, cat As Object, tbl As Object
Dim tmpArr, Arr()
Dim szConnect As String, szSQL As String, tmp As String
Dim lCount As Long, lR As Long, lC As Long, lVer As Long
lVer = Val(Application.Version)
Set rsCon = CreateObject("ADODB.Connection")
Set rsData = CreateObject("ADODB.Recordset")
Set cat = CreateObject("ADOX.Catalog")
If lVer < 12 Then
szConnect = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & FileName & ";" & _
"Extended Properties=""Excel 8.0;HDR=" & IIf(HasTitle, "Yes", "No") & """;"
Else
szConnect = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & FileName & ";" & _
"Extended Properties=""Excel 12.0;HDR=" & IIf(HasTitle, "Yes", "No") & """;"
End If
If SheetName = "" Then
Dim Dbs As Object, db As Object
Set Dbs = CreateObject("DAO.DBEngine." & IIf(lVer < 12, "36", "120"))
Set db = Dbs.OpenDatabase(FileName, False, False, "Excel 8.0;")
tmp = db.TableDefs(0).Name
tmp = Replace(tmp, " ", "?")
tmp = Replace(tmp, "'", " ")
tmp = WorksheetFunction.Trim(tmp)
tmp = Replace(tmp, " ", "'")
tmp = Replace(tmp, "?", " ")
SheetName = tmp
db.Close
Set Dbs = Nothing: Set db = Nothing
End If
If Right(SheetName, 1) <> "$" Then SheetName = SheetName & "$"
rsCon.Open szConnect
cat.ActiveConnection = rsCon
szSQL = "SELECT * FROM [" & SheetName & RangeAddress & "];"
rsData.Open szSQL, rsCon, 0, 1, 1
tmpArr = rsData.GetRows
ReDim Arr(UBound(tmpArr, 2) - UseTitle, UBound(tmpArr, 1) + 1)
If UseTitle Then
For lC = LBound(tmpArr, 1) To UBound(tmpArr, 1)
Arr(0, lC) = rsData.Fields(lC).Name
Next
End If
For lR = LBound(tmpArr, 2) To UBound(tmpArr, 2)
For lC = LBound(tmpArr, 1) To UBound(tmpArr, 1)
Arr(lR - UseTitle, lC) = tmpArr(lC, lR)
Next
Next
rsData.Close: Set rsData = Nothing
rsCon.Close: Set rsCon = Nothing
GetData = Arr
End Function
Sub Danhsach_Thauphu()
Dim vFile, FileItem, aRes, Target As Range
Dim FileName As String, SheetName As String, RangeAddress As String
On Error Resume Next
vFile = Application.GetOpenFilename("Excel File, *.xls; *.xlsx; *.xlsm", , , , True)
If TypeName(vFile) = "Variant()" Then
SheetName = "Ma TP": RangeAddress = "B2:O2"
For Each FileItem In vFile
FileName = CStr(FileItem)
If UCase(FileName) <> UCase(ThisWorkbook.FullName) Then
aRes = GetData(FileName, SheetName, RangeAddress, False, False)
If IsArray(aRes) Then
Set Target = Sheet3.Range("A60000").End(xlUp).Offset(1)
Target.Resize(UBound(aRes, 1) + 1, UBound(aRes, 2) + 1).Value = aRes
End If
End If
Next
Cells.Select
Range("A8").Activate
Selection.EntireColumn.Hidden = False
Range("A9:A10").Select
MsgBox "HOÀN THÀNH!"
End If
End Sub
Em chào cả nhà
Em định lập thớt nhưng nhân tiện có thớt này nên em hỏi luôn ở đây.
Lâu nay em có file tổng hợp dữ liệu từ nhiều file khác mà không cần mở file. Giờ em muốn chèn thêm 1 đoạn code để khi chạy macro này thì tạo luôn 1 đường link bên cạnh để ta bấm vào đó là mở được file kia ra.
Đoạn code cũ của em vẫn dùng đây ạ:
Các bác giúp em với nhé, em cảm ơn nhiều ạPHP:Function GetData(ByVal FileName As String, ByVal SheetName As String, ByVal RangeAddress As String, _ ByVal HasTitle As Boolean, ByVal UseTitle As Boolean) Dim rsCon As Object, rsData As Object, cat As Object, tbl As Object Dim tmpArr, Arr() Dim szConnect As String, szSQL As String, tmp As String Dim lCount As Long, lR As Long, lC As Long, lVer As Long lVer = Val(Application.Version) Set rsCon = CreateObject("ADODB.Connection") Set rsData = CreateObject("ADODB.Recordset") Set cat = CreateObject("ADOX.Catalog") If lVer < 12 Then szConnect = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & FileName & ";" & _ "Extended Properties=""Excel 8.0;HDR=" & IIf(HasTitle, "Yes", "No") & """;" Else szConnect = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & FileName & ";" & _ "Extended Properties=""Excel 12.0;HDR=" & IIf(HasTitle, "Yes", "No") & """;" End If If SheetName = "" Then Dim Dbs As Object, db As Object Set Dbs = CreateObject("DAO.DBEngine." & IIf(lVer < 12, "36", "120")) Set db = Dbs.OpenDatabase(FileName, False, False, "Excel 8.0;") tmp = db.TableDefs(0).Name tmp = Replace(tmp, " ", "?") tmp = Replace(tmp, "'", " ") tmp = WorksheetFunction.Trim(tmp) tmp = Replace(tmp, " ", "'") tmp = Replace(tmp, "?", " ") SheetName = tmp db.Close Set Dbs = Nothing: Set db = Nothing End If If Right(SheetName, 1) <> "$" Then SheetName = SheetName & "$" rsCon.Open szConnect cat.ActiveConnection = rsCon szSQL = "SELECT * FROM [" & SheetName & RangeAddress & "];" rsData.Open szSQL, rsCon, 0, 1, 1 tmpArr = rsData.GetRows ReDim Arr(UBound(tmpArr, 2) - UseTitle, UBound(tmpArr, 1) + 1) If UseTitle Then For lC = LBound(tmpArr, 1) To UBound(tmpArr, 1) Arr(0, lC) = rsData.Fields(lC).Name Next End If For lR = LBound(tmpArr, 2) To UBound(tmpArr, 2) For lC = LBound(tmpArr, 1) To UBound(tmpArr, 1) Arr(lR - UseTitle, lC) = tmpArr(lC, lR) Next Next rsData.Close: Set rsData = Nothing rsCon.Close: Set rsCon = Nothing GetData = Arr End Function Sub Danhsach_Thauphu() Dim vFile, FileItem, aRes, Target As Range Dim FileName As String, SheetName As String, RangeAddress As String On Error Resume Next vFile = Application.GetOpenFilename("Excel File, *.xls; *.xlsx; *.xlsm", , , , True) If TypeName(vFile) = "Variant()" Then SheetName = "Ma TP": RangeAddress = "B2:O2" For Each FileItem In vFile FileName = CStr(FileItem) If UCase(FileName) <> UCase(ThisWorkbook.FullName) Then aRes = GetData(FileName, SheetName, RangeAddress, False, False) If IsArray(aRes) Then Set Target = Sheet3.Range("A60000").End(xlUp).Offset(1) Target.Resize(UBound(aRes, 1) + 1, UBound(aRes, 2) + 1).Value = aRes End If End If Next Cells.Select Range("A8").Activate Selection.EntireColumn.Hidden = False Range("A9:A10").Select MsgBox "HOÀN THÀNH!" End If End Sub
Function GetData(ByVal FileName As String, ByVal SheetName As String, ByVal RangeAddress As String, ByVal HasTitle As Boolean, ByVal UseTitle As Boolean)
Dim rsCon As Object, rsData As Object, cat As Object, tbl As Object
Dim tmpArr, Arr()
Dim szConnect As String, szSQL As String, tmp As String
Dim lCount As Long, lR As Long, lC As Long, lVer As Long
lVer = Val(Application.Version)
Set rsCon = CreateObject("ADODB.Connection")
Set rsData = CreateObject("ADODB.Recordset")
Set cat = CreateObject("ADOX.Catalog")
If lVer < 12 Then
szConnect = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & FileName & ";" & _
"Extended Properties=""Excel 8.0;HDR=" & IIf(HasTitle, "Yes", "No") & """;"
Else
szConnect = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & FileName & ";" & _
"Extended Properties=""Excel 12.0;HDR=" & IIf(HasTitle, "Yes", "No") & """;"
End If
If SheetName = "" Then
Dim Dbs As Object, db As Object
Set Dbs = CreateObject("DAO.DBEngine." & IIf(lVer < 12, "36", "120"))
Set db = Dbs.OpenDatabase(FileName, False, False, "Excel 8.0;")
tmp = db.TableDefs(0).Name
tmp = Replace(tmp, " ", "?")
tmp = Replace(tmp, "'", " ")
tmp = WorksheetFunction.Trim(tmp)
tmp = Replace(tmp, " ", "'")
tmp = Replace(tmp, "?", " ")
SheetName = tmp
db.Close
Set Dbs = Nothing: Set db = Nothing
End If
If Right(SheetName, 1) <> "$" Then SheetName = SheetName & "$"
rsCon.Open szConnect
cat.ActiveConnection = rsCon
szSQL = "SELECT [SIZE=4][COLOR=#ff0000][B]'" & FileName & "',[/B][/COLOR][/SIZE]* FROM [" & SheetName & RangeAddress & "];"
rsData.Open szSQL, rsCon, 0, 1, 1
tmpArr = rsData.GetRows
ReDim Arr(UBound(tmpArr, 2) - UseTitle, UBound(tmpArr, 1) + 1)
If UseTitle Then
For lC = LBound(tmpArr, 1) To UBound(tmpArr, 1)
Arr(0, lC) = rsData.Fields(lC).Name
Next
End If
For lR = LBound(tmpArr, 2) To UBound(tmpArr, 2)
For lC = LBound(tmpArr, 1) To UBound(tmpArr, 1)
Arr(lR - UseTitle, lC) = tmpArr(lC, lR)
Next
Next
rsData.Close: Set rsData = Nothing
rsCon.Close: Set rsCon = Nothing
GetData = Arr
End Function
Sub Danhsach_Thauphu()
Dim vFile, FileItem, aRes, Target As Range
Dim FileName As String, SheetName As String, RangeAddress As String
On Error Resume Next
vFile = Application.GetOpenFilename("Excel File, *.xls; *.xlsx; *.xlsm", , , , True)
If TypeName(vFile) = "Variant()" Then
SheetName = "Ma TP": RangeAddress = "B2:O2"
For Each FileItem In vFile
FileName = CStr(FileItem)
If UCase(FileName) <> UCase(ThisWorkbook.FullName) Then
aRes = GetData(FileName, SheetName, RangeAddress, False, False)
If IsArray(aRes) Then
Set Target = Sheet3.Range("A60000").End(xlUp).Offset(1)
Target.Resize(UBound(aRes, 1) + 1, UBound(aRes, 2) + 1).Value = aRes
End If
End If
Next
Cells.Select
Range("A8").Activate
Selection.EntireColumn.Hidden = False
Range("A9:A10").Select
MsgBox "HOÀN THÀNH!"
End If
End Sub
Bạn xem bài #36Em cần thêm tên file đã ghép vào 1 cột mới ở mỗi dòng trong file tổng hợp. Các anh chị giúp em với. Thanks
Bác giúp nốt em cái vụ này đi, em mù tịt VBA bác ạBạn xem bài #36 mà tôi đã có đề cập nhé.
Thì tôi đã chỉnh code lại rồi còn gì bạn.Bác giúp nốt em cái vụ này đi, em mù tịt VBA bác ạ
Cảm ơn bác.