Lần đầu tiên viết macro , mong mọi người giúp đỡ mình sửa code này ạ.
Mình có 2 vấn đề nhờ giúp ạ:
* Vấn đề 1:
Mình có ghi chú vấn đề cần giúp đỡ (thay vì thoát khỏi function thì mình muốn xử lí dừng macro) trong code sau, hic hic
Function CreateFileList(FileFilter As String, IncludeSubFolder As Boolean) As Variant
' trả về list tên file trong thư mục
Dim FileList() As String, FileCount As Long
Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")
CreateFileList = "" : Erase FileList
If FileFilter = "" Then FileFilter = "*.*" ' tat ca cac tap tin
With Application.FileSearch
.NewSearch: .LookIn = CurDir + "\ConfigFile"
.FileName = FileFilter
.SearchSubFolders = IncludeSubFolder
.FileType = msoFileTypeAllFiles
If .Execute(SortBy:=msoSortByFileName, SortOrder:=msoSortOrderAscending) _
= 0 Then
CreateFileList = Null
MsgBox ("File is open, can't merge. Program is close!")
Exit Function <- thay vì thoát khỏi function thì mình muốn xử lí dừng macro
End If
ReDim FileList(.FoundFiles.count)
For FileCount = 1 To .FoundFiles.count
FileList(FileCount) = .FoundFiles(FileCount)
Next FileCount
.FileType = msoFileTypeExcelWorkbooks
End With
CreateFileList = FileList
Erase FileList
End Function
* Vấn đề 2:
Function CreateFileList ở trên sẽ được gọi trong function CopyContentSheet bên dưới đây. Mình muốn hỏi cách kiểm tra xem CreateFileList có rỗng hay không.
Function CopyContentSheet()
Dim FullName As String, FileName As String
Dim FileNamesList As Variant, i As Integer
Dim xlr_source As Excel.Range
Dim xlr_dest As Excel.Range
MyPath = ActiveWorkbook.Path
ChDrive MyPath
ChDir MyPath
Dim R As Range
Set exerciseWB = ActiveWorkbook
Set destrange = exerciseWB.Worksheets("TABLE_A")
FileNamesList = CreateFileList("*.*", False)
If FileNamesList = Null Then
Exit Function <- mình không biết cách kiểm tra FileNamesList có rỗng hay không nên mặc dù list file không được tạo, mình đã gán CreateFileList = Null trong function CreateFileList nhưng chương trình vẫn không vào được dòng lệnh này
End If
FileName = FileNamesList(1)
Set fileConfig1WB = Workbooks.Open(FileName)
Set sourceRange = fileConfig1WB.Worksheets("TABLE_A")
Set xlr_source = sourceRange.Cells
Set xlr_dest = destrange.Cells(1, 1)
xlr_source.Copy xlr_dest
Set xlr_dest = destrange.Cells
xlr_dest.Copy
xlr_dest.PasteSpecial xlPasteValues
fileConfig1WB.Close False
Application.CutCopyMode = False
End Function
Mong mọi người chỉ giáo, xin cám ơn nhiều lắm.
Mình có 2 vấn đề nhờ giúp ạ:
* Vấn đề 1:
Mình có ghi chú vấn đề cần giúp đỡ (thay vì thoát khỏi function thì mình muốn xử lí dừng macro) trong code sau, hic hic
Function CreateFileList(FileFilter As String, IncludeSubFolder As Boolean) As Variant
' trả về list tên file trong thư mục
Dim FileList() As String, FileCount As Long
Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")
CreateFileList = "" : Erase FileList
If FileFilter = "" Then FileFilter = "*.*" ' tat ca cac tap tin
With Application.FileSearch
.NewSearch: .LookIn = CurDir + "\ConfigFile"
.FileName = FileFilter
.SearchSubFolders = IncludeSubFolder
.FileType = msoFileTypeAllFiles
If .Execute(SortBy:=msoSortByFileName, SortOrder:=msoSortOrderAscending) _
= 0 Then
CreateFileList = Null
MsgBox ("File is open, can't merge. Program is close!")
Exit Function <- thay vì thoát khỏi function thì mình muốn xử lí dừng macro
End If
ReDim FileList(.FoundFiles.count)
For FileCount = 1 To .FoundFiles.count
FileList(FileCount) = .FoundFiles(FileCount)
Next FileCount
.FileType = msoFileTypeExcelWorkbooks
End With
CreateFileList = FileList
Erase FileList
End Function
* Vấn đề 2:
Function CreateFileList ở trên sẽ được gọi trong function CopyContentSheet bên dưới đây. Mình muốn hỏi cách kiểm tra xem CreateFileList có rỗng hay không.
Function CopyContentSheet()
Dim FullName As String, FileName As String
Dim FileNamesList As Variant, i As Integer
Dim xlr_source As Excel.Range
Dim xlr_dest As Excel.Range
MyPath = ActiveWorkbook.Path
ChDrive MyPath
ChDir MyPath
Dim R As Range
Set exerciseWB = ActiveWorkbook
Set destrange = exerciseWB.Worksheets("TABLE_A")
FileNamesList = CreateFileList("*.*", False)
If FileNamesList = Null Then
Exit Function <- mình không biết cách kiểm tra FileNamesList có rỗng hay không nên mặc dù list file không được tạo, mình đã gán CreateFileList = Null trong function CreateFileList nhưng chương trình vẫn không vào được dòng lệnh này
End If
FileName = FileNamesList(1)
Set fileConfig1WB = Workbooks.Open(FileName)
Set sourceRange = fileConfig1WB.Worksheets("TABLE_A")
Set xlr_source = sourceRange.Cells
Set xlr_dest = destrange.Cells(1, 1)
xlr_source.Copy xlr_dest
Set xlr_dest = destrange.Cells
xlr_dest.Copy
xlr_dest.PasteSpecial xlPasteValues
fileConfig1WB.Close False
Application.CutCopyMode = False
End Function
Mong mọi người chỉ giáo, xin cám ơn nhiều lắm.
Lần chỉnh sửa cuối: