Excel 宏VBA用于复制特定工作表的帮助

Excel 宏VBA用于复制特定工作表的帮助,excel,vba,Excel,Vba,我对VBA非常陌生。。今天第一次试过 我正在寻找一个Excel宏,它可以将桌面上某个文件夹中5本工作簿的最后两张工作表复制到名为output_DDMMYYHHMMSS.xlsx的新工作簿中 我能够将所有5本工作簿中的所有工作表复制到输出工作簿中。 以下是使用的代码: 子文件() Dim fnameList,fnameCurFile作为变量 将计数文件、计数表设置为整数 将工作表变暗为工作表 将wbkCurBook、wbkSrcBook设置为工作簿 fnameList=Application.Ge

我对VBA非常陌生。。今天第一次试过

我正在寻找一个Excel宏,它可以将桌面上某个文件夹中5本工作簿的最后两张工作表复制到名为output_DDMMYYHHMMSS.xlsx的新工作簿中

我能够将所有5本工作簿中的所有工作表复制到输出工作簿中。 以下是使用的代码: 子文件()

Dim fnameList,fnameCurFile作为变量
将计数文件、计数表设置为整数
将工作表变暗为工作表
将wbkCurBook、wbkSrcBook设置为工作簿
fnameList=Application.GetOpenFilename(文件过滤器:=“Microsoft Excel工作簿(*.xls;*.xlsx;*.xlsm),*.xls;*.xlsx;*.xlsm”,标题:=“选择要合并的Excel文件”,多选:=True)
Path=“C:\Users\se\Desktop”
outputName=“output.xlsx”
如果是(vbBoolean变量类型(fnameList)),则
如果(UBound(fnameList)>0,则
countFiles=0
计数表=0
Application.ScreenUpdating=False
Application.Calculation=xlCalculationManual
设置wbkCurBook=ActiveWorkbook
对于fnameList中的每个fnameCurFile
countFiles=countFiles+1
设置wbkSrcBook=Workbooks.Open(文件名:=fnameCurFile)

对于wbkSrcBook.Sheets中的每个工作表 计数表=计数表+1 wksCurSheet.Copy after:=wbkCurBook.Sheets(wbkCurBook.Sheets.Count) 下一个 wbkSrcBook.Close SaveChanges:=False 下一个 fName=Application.GetSaveAsFilename wbkCurBook.SaveAs文件名:=fName Application.ScreenUpdating=True Application.Calculation=xlCalculationAutomatic MsgBox“Procesed”&countFiles&“files”&vbCrLf&“Merged”&countSheets&“worksheets”,标题:=“Merge Excel files” 如果结束 其他的 MsgBox“未选择任何文件”,标题:=“合并Excel文件” 如果结束

End Sub

工作簿中的所有工作表都有一个
索引
属性。索引1表示第一张,索引2表示第二张,依此类推。因此,最后一张工作表的索引将等于
Sheets.Count
。了解此情况后,请尝试更换此部件:

For Each fnameCurFile In fnameList
            countFiles = countFiles + 1
            Set wbkSrcBook = Workbooks.Open(Filename:=fnameCurFile)
            For Each wksCurSheet In wbkSrcBook.Sheets
                countSheets = countSheets + 1
                wksCurSheet.Copy after:=wbkCurBook.Sheets(wbkCurBook.Sheets.Count)
            Next
            wbkSrcBook.Close SaveChanges:=False
        Next
并使用此代码:

For Each fnameCurFile In fnameList
            Set wbkSrcBook = Workbooks.Open(Filename:=fnameCurFile)
             countFiles = countFiles + 1
            countSheets = wbkSrcBook.Sheets.Count 'total sheets in this workbook
            For Each wksCurSheet In wbkSrcBook.Sheets
                'last sheet got an index equal to countSheets.
                'the sheet before the last one will be then countSheets-1
                If wksCurSheet.Index = countSheets Or wksCurSheet.Index = (countSheets - 1) Then wksCurSheet.Copy after:=wbkCurBook.Sheets(wbkCurBook.Sheets.Count)
            Next
            wbkSrcBook.Close SaveChanges:=False
        Next
此外,更换管路:

MsgBox "Procesed " & countFiles & " files" & vbCrLf & "Merged " & countSheets & " worksheets", Title:="Merge Excel files"
与:


不需要使用标题中的所有大写字母。欢迎使用堆栈溢出!你的问题显示了你解决问题的能力。如果您尝试过,您应该编辑我们的问题,详细说明您所做的工作、研究的目的,并指向任何有帮助但没有回答您问题的链接。如果您试图编写解决方案,则应将其添加到编辑中。你的尝试应该转变成一个清晰的阅读和理解。也请阅读感谢您的输入。我已经相应地更新了@chade_请看,别忘了阅读,我已经更新了@foxfireandburns。你能帮个忙吗?谢谢Foxfire和Burns还有Burns你的解决方案很有帮助。你能帮我做下面的事情吗?我正在尝试对最终工作簿的某些工作表的某些列进行排序。我在FOR循环之后添加了以下代码:对于wbkSrcBook中的每个Wkscrsheet.sheets If wkscrsheet.Name=“ma_SMS%”然后将strDataRange Dim作为Range Dim keyRange作为Range'将目标排序范围分配给strDataRange Set strDataRange=Range(“A1:S400”)Set keyRange=Range(“A1”)'使用范围对象和排序方法strDataRange对数据进行排序。sort Key1:=keyRange,Header:=xlYes nextb但上面的代码没有帮助。。。虽然用于排序的语句是正确的,但我在另一个excel文档中验证了这一点
MsgBox "Procesed " & countFiles & " files" & vbCrLf & "Merged " & countSheets & " worksheets", Title:="Merge Excel files"
MsgBox "Procesed " & countFiles & " files" & vbCrLf & "Merged 2 worksheets", Title:="Merge Excel files"