excel 将工作表从多个工作簿复制到现有工作簿- VBA

mnowg1ta  于 2023-01-06  发布在  其他
关注(0)|答案(1)|浏览(272)

我正试图复制4张从4个不同的工作簿到'主'工作簿,我在
下面的代码只为一个工作表,但我想这样做的所有4张
此外,当前下面的代码打开源工作表,但我不想打开源工作表。如果我从下面的文件路径中删除“.Open”,则会显示下标超出范围
谢啦,谢啦

Sub Copysheets()

Dim source As Workbook
Dim Master As Workbook

Set source = Workbooks.Open("\\filepath\filename.xlsx")
Set Master = Workbooks.Open("\\filepath\filename.xlsm")

Dim sourcesheet As Worksheet

For Each sourcesheet In source.Sheets

sourcesheet.Copy After:=Master.Sheets(Master.Sheets.Count)
Next

End Sub
lyr7nygr

lyr7nygr1#

如果你有一个需要重复执行的任务,通常把这个任务外包给一个子程序是个好主意。
下面的例程有两个参数,第一个是master(要复制工作表的工作簿)和一个filename(要打开和复制的文件名)。这个复制例程不关心你的业务逻辑,它只是复制工作表:

Sub Copysheets(masterWB As Workbook, sourceWBName As String)
    Dim sourceWB As Workbook, sourceSheet As Worksheet
    Set sourceWB = Workbooks.Open("\\filepath\filename.xlsx")

    For Each sourceSheet In sourceWB.Sheets
        sourceSheet.Copy After:=masterWB.Sheets(masterWB.Sheets.Count)
    Next
    ' Don't forget to close the file afterwards:
    sourceWB.Close SaveChanges:=False
End Sub

然后,您可以像这样调用例程(这段代码处理您的业务逻辑,但不关心复制是如何完成的):

Sub CopySheetsFrom4Workbooks()
    Dim masterWB As Workbook
    masterWB = Workbooks.Open("\\filepath\filename.xlsm")
    
    Copysheets masterWB, "\\filepath\filename1.xlst"
    Copysheets masterWB, "\\filepath\filename2.xlst"
    Copysheets masterWB, "\\filepath\filename3.xlst"
    Copysheets masterWB, "\\filepath\filename4.xlst"

    masterWB.Save
End Sub

或者,例如,使用循环复制所有文件的工作表:

Sub CopyAllMyWorkbooks()
    Dim masterWB As Workbook
    masterWB = Workbooks.Open("\\filepath\filename.xlsm")
    
    Dim sourceFilename As String
    sourceFilename = Dir("\\filepath\filename*.xlst")
    Do While sourceFilename <> ""
        Copysheets masterWB, sourceFilename
        sourceFilename = Dir
    Loop
End Sub

相关问题