目前,我使用此代码存储多个工作簿中的整行。 它有两个按钮:清除和填充
Sub ClearTable()
Application.ScreenUpdating = False
Me.Range("5:5000").ClearContents
Me.Range("5:500").EntireRow.AutoFit
End Sub
Sub CreateTable()
Application.ScreenUpdating = False: Application.DisplayAlerts = False
Dim coll As New Collection, wb As Workbook, sh As Worksheet, newRow As Range
Mask = Replace(ThisWorkbook.FullName, ThisWorkbook.Name, "*.xlsx")
filename = Dir(Mask)
While filename <> ""
If Not filename Like ThisWorkbook.Name & "*" Then coll.Add filename
filename = Dir
Wend
'For Each Item In coll: Debug.Print Item: Next
On Error Resume Next
For Each Item In coll
Set wb = Workbooks.Open(Replace(ThisWorkbook.FullName, ThisWorkbook.Name, Item), , True)
If Not wb Is Nothing Then
Set sh = wb.Worksheets(1)
LastRow = sh.Range("a65000").End(xlUp).Row
If LastRow > 4 Then
For i = 5 To LastRow
Set newRow = Me.Range("a65000").End(xlUp).Offset(1)
sh.Rows(i).Copy newRow
newRow.EntireRow.AutoFit
Next i
End If
wb.Close False
End If
Next
Application.DisplayAlerts = True
End Sub
现在我有一个迷你项目,存储客户数据(姓名,城市,电话№等)。
我最多还有50个工作簿存储在一个文件夹中。 但现在我需要从单元格C4:C12中提取数据,它应该被移动(转置)到masterbook的A5:I5及以下。
如何根据我目前的需求进行转换? 谢谢!
答案 0 :(得分:0)
我认为这就是你想要的。
Sub Basic_Example_1()
Dim MyPath As String, FilesInPath As String
Dim MyFiles() As String
Dim SourceRcount As Long, Fnum As Long
Dim mybook As Workbook, BaseWks As Worksheet
Dim sourceRange As Range, destrange As Range
Dim rnum As Long, CalcMode As Long
'Fill in the path\folder where the files are
MyPath = "C:\Users\Excel\Desktop\test\"
'Add a slash at the end if the user forget it
If Right(MyPath, 1) <> "\" Then
MyPath = MyPath & "\"
End If
'If there are no Excel files in the folder exit the sub
FilesInPath = Dir(MyPath & "*.xl*")
If FilesInPath = "" Then
MsgBox "No files found"
Exit Sub
End If
'Fill the array(myFiles)with the list of Excel files in the folder
Fnum = 0
Do While FilesInPath <> ""
Fnum = Fnum + 1
ReDim Preserve MyFiles(1 To Fnum)
MyFiles(Fnum) = FilesInPath
FilesInPath = Dir()
Loop
'Change ScreenUpdating, Calculation and EnableEvents
With Application
CalcMode = .Calculation
.Calculation = xlCalculationManual
.ScreenUpdating = False
.EnableEvents = False
End With
'Add a new workbook with one sheet
Set BaseWks = Workbooks.Add(xlWBATWorksheet).Worksheets(1)
rnum = 5
'Loop through all files in the array(myFiles)
If Fnum > 0 Then
For Fnum = LBound(MyFiles) To UBound(MyFiles)
Set mybook = Nothing
On Error Resume Next
Set mybook = Workbooks.Open(MyPath & MyFiles(Fnum))
On Error GoTo 0
If Not mybook Is Nothing Then
On Error Resume Next
With mybook.Worksheets(1)
Set sourceRange = .Range("C4:C12")
End With
If Err.Number > 0 Then
Err.Clear
Set sourceRange = Nothing
Else
'if SourceRange use all columns then skip this file
If sourceRange.Columns.Count >= BaseWks.Columns.Count Then
Set sourceRange = Nothing
End If
End If
On Error GoTo 0
If Not sourceRange Is Nothing Then
SourceRcount = sourceRange.Rows.Count
If rnum + SourceRcount >= BaseWks.Rows.Count Then
MsgBox "Sorry there are not enough rows in the sheet"
BaseWks.Columns.AutoFit
mybook.Close savechanges:=False
GoTo ExitTheSub
Else
'Copy the file name in column A
With sourceRange
BaseWks.Cells(rnum, "A"). _
Resize(.Rows.Count).Value = MyFiles(Fnum)
End With
'Set the destrange
Set destrange = BaseWks.Range("B" & rnum)
'X = ActiveSheet.Range(destrange).Value
'XT = Application.Transpose(X)
'we copy the values from the sourceRange to the destrange
With sourceRange
Set destrange = destrange. _
Resize(.Rows.Count, .Columns.Count)
End With
destrange.Value = sourceRange.Value
rnum = rnum + SourceRcount
End If
End If
mybook.Close savechanges:=False
End If
Next Fnum
BaseWks.Columns.AutoFit
End If
ExitTheSub:
'Restore ScreenUpdating, Calculation and EnableEvents
With Application
.ScreenUpdating = True
.EnableEvents = True
.Calculation = CalcMode
End With
End Sub