|
哦,忘记还有密码了。不好意思。
Private Sub Roll_Up_Click()
Dim numFiles As Integer
Dim numRollup As Integer
Dim ctrlCursorRow As Long
Dim ctrlCursorCol As Long
Dim fileList(9999) As String
Dim filePath As String
Dim startCell As String
Dim rangeSelect As String
Dim sheetSelect As String
Dim emptyRow As Long
'change file path to designated folder
filePath = Workbooks("Roll_up.v3.xls").Sheets("Guide").Range("C8").Value
ChDir (filePath)
'get all file names in the folder
Do
If numFiles = 0 Then
fileList(numFiles) = Dir("")
ActiveWorkbook.Sheets("FileDir").Select
ActiveSheet.Cells(numFiles + 5, "B").Value = fileList(numFiles)
numFiles = numFiles + 1
Else
fileList(numFiles) = Dir
Workbooks("Roll_up.v3.xls").Worksheets("FileDir").Cells(numFiles + 5, "B").Value = fileList(numFiles)
numFiles = numFiles + 1
End If
Loop Until ActiveSheet.Cells(numFiles + 4, "B").Value = ""
'initialize variables
numRollup = numFiles - 2
numFiles = 0
startCell = Workbooks("Roll_up.v3.xls").Sheets("Guide").Range("C10").Value
ctrlCursorRow = Workbooks("Roll_up.v3.xls").Sheets("Rollup").Range(startCell).Row
ctrlCursorCol = Workbooks("Roll_up.v3.xls").Sheets("Rollup").Range(startCell).Column
sheetSelect = Workbooks("Roll_up.v3.xls").Sheets("Guide").Range("C14").Value
rangeSelect = Workbooks("Roll_up.v3.xls").Sheets("Guide").Range("C12").Value
'open each spreadsheet, copy range and paste in current file
For numFiles = 0 To numRollup Step 1
Workbooks.Open (fileList(numFiles))
Workbooks(fileList(numFiles)).Worksheets(sheetSelect).Range(rangeSelect).Copy
Workbooks("Roll_up.v3.xls").Activate
Worksheets("Rollup").Select
ActiveSheet.Cells(ctrlCursorRow, ctrlCursorCol).Select
ActiveSheet.Paste
Call rangeCleanEmptyRows(emptyRow)
ctrlCursorRow = ctrlCursorRow + Workbooks(fileList(numFiles)).Worksheets(sheetSelect).Range(rangeSelect).Rows.Count - emptyRow
Workbooks(fileList(numFiles)).Close
Next
End Sub
Private Sub rangeCleanEmptyRows(ByRef emptyRow As Long)
Dim rangeValue(1 To 9999) As Variant
Dim rangeValueA(1 To 9999) As Variant
Dim T As Variant
Dim rangeRows As Long
Dim rangeCols As Long
Dim S As Variant
Dim Counter As Long
Dim rangeAddr As String
Dim lastRow As Long
Dim lastCol As Long
'Define range and determine last row of range
Workbooks("Roll_up.v3.xls").Sheets("Rollup").Select
rangeAddr = ActiveWindow.RangeSelection.Address(ReferenceStyle:=xlA1)
lastRow = ActiveSheet.Range(rangeAddr).Rows.Count
'Mark the row to last row of range
For lastCol = 1 To (Range(rangeAddr).Columns.Count)
ActiveSheet.Range(rangeAddr).Cells(lastRow + 1, lastCol).Value = "##END_OF_ROLLUP##"
Next
'Count all empty rows and remove any empty rows within range
emptyRow = 0
For rangeRows = 1 To (Range(rangeAddr).Rows.Count)
For rangeCols = 1 To (Range(rangeAddr).Columns.Count)
rangeValue(rangeCols) = IsEmpty(ActiveSheet.Range(rangeAddr).Cells(rangeRows, rangeCols))
rangeValueA(rangeCols) = ActiveSheet.Range(rangeAddr).Cells(rangeRows, rangeCols)
Next rangeCols
Counter = 0
For Each S In rangeValue()
If S = True Then
Counter = Counter + 1
End If
Next S
For Each T In rangeValueA()
If T = "##END_OF_ROLLUP##" Then
Exit Sub
End If
Next T
If Counter = Range(rangeAddr).Columns.Count Then
emptyRow = emptyRow + 1
ActiveSheet.Range(rangeAddr).Rows(rangeRows).Delete
rangeRows = rangeRows - 1
End If
Next rangeRows
End Sub |
|