Excel 如何在多个工作簿中获取特定工作表?

Excel 如何在多个工作簿中获取特定工作表?,excel,vba,Excel,Vba,比如说,, 我有10节课的考试成绩。 每门课都有自己的练习册。 每个练习册有3张工作表:英语成绩、数学成绩和物理成绩 我怎样才能得到所有课程的所有数学结果并将其合并到一张工作表中 我试图写一个If语句来实现它,但是有一些错误。 我当前使用的代码只能从只有一个工作表的工作簿中获取结果。 请帮帮我 以下是我当前使用的代码: Sub CombineDataFiles() Dim DataBook As Workbook, OutBook As Workbook Dim DataSheet As Wo

比如说,, 我有10节课的考试成绩。 每门课都有自己的练习册。 每个练习册有3张工作表:英语成绩、数学成绩和物理成绩 我怎样才能得到所有课程的所有数学结果并将其合并到一张工作表中

我试图写一个If语句来实现它,但是有一些错误。 我当前使用的代码只能从只有一个工作表的工作簿中获取结果。 请帮帮我

以下是我当前使用的代码:

Sub CombineDataFiles()

Dim DataBook As Workbook, OutBook As Workbook
Dim DataSheet As Worksheet, OutSheet As Worksheet
Dim TargetFiles As FileDialog
Dim MaxNumberFiles As Long, FileIdx As Long, _
    LastDataRow As Long, LastDataCol As Long, _
    HeaderRow As Long, LastOutRow As Long
Dim DataRng As Range, OutRng As Range

'initialize constants
MaxNumberFiles = 2001
HeaderRow = 1 'assume headers are always in row 1
LastOutRow = 1

'prompt user to select files
Set TargetFiles = Application.FileDialog(msoFileDialogOpen)
With TargetFiles
    .AllowMultiSelect = True
    .Title = "Multi-select target data files:"
    .ButtonName = ""
    .Filters.Clear
    .Show
End With

'error trap - don't allow user to pick more than 2000 files
' Can Modify By Changing the 2000


If TargetFiles.SelectedItems.Count > MaxNumberFiles Then
    MsgBox ("Too many files selected, please pick more than " & MaxNumberFiles & ". Exiting sub...")
    Exit Sub
End If


'set up the output workbook
Set OutBook = Workbooks.Add
Set OutSheet = OutBook.Sheets(1)

'loop through all files

For FileIdx = 1 To TargetFiles.SelectedItems.Count

    'open the file and assign the workbook/worksheet
    Set DataBook = Workbooks.Open(TargetFiles.SelectedItems(FileIdx))
    Set DataSheet = DataBook.ActiveSheet


    'identify row/column boundaries
    LastDataRow = DataSheet.Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
    LastDataCol = DataSheet.Cells.Find("*", SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column

    'if this is the first go-round, include the header
    If FileIdx = 1 Then
        Set DataRng = Range(DataSheet.Cells(HeaderRow, 1), DataSheet.Cells(LastDataRow, LastDataCol))
        Set OutRng = Range(OutSheet.Cells(HeaderRow, 1), OutSheet.Cells(LastDataRow, LastDataCol))
    'if this is NOT the first go-round, then skip the header
    Else
        Set DataRng = Range(DataSheet.Cells(HeaderRow + 1, 1), DataSheet.Cells(LastDataRow, LastDataCol))
        Set OutRng = Range(OutSheet.Cells(LastOutRow + 1, 1), OutSheet.Cells(LastOutRow + 1 + LastDataRow, LastDataCol))
    End If

    'copy the data to the outbook

    DataRng.Copy OutRng

    'close the data book without saving
    DataBook.Close False

    'update the last outbook row
    LastOutRow = OutSheet.Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row

    ' On Error Resume Next
        ' Range (A1;K100000).Select
        ' Selection

Next FileIdx

'let the user know we're done!
MsgBox ("Combined " & TargetFiles.SelectedItems.Count & " files!")

End Sub

如果我没弄错的话,您希望合并来自不同工作簿的相同形状(相同列数和列顺序)的数据列表。微软在这方面有一部很好的纪录片:


让我们看看你尝试过什么,以及你挣扎过什么。我一定能做到。你需要展示一些东西;文件所在的位置,详细信息。这不是Enough。请阅读网站上关于回答StackOverflow问题的信息。你写的东西最好放在评论里。只有链接的回复是糟糕的答案,因为链接可能会中断-重要信息应该在答案中。谢谢@Cindymister!我会这样做。我只是开始这里,只是想帮助:)我应该删除答案吗?要么复制内容,因为它站在评论和删除答案-这是绝对好的评论。或者将与此问题相关的信息整合到您自己的答案(您自己的措辞/解释和代码)中,或者写一个简短的总结,说明它将如何帮助您,并复制/粘贴文章的相关部分和属性(以及链接)。StackOverflow不介意你从其他地方复制,如果你给予了充分的信任-重要的是,问题的所有信息都在现场。如果你不确定对方真正在问什么,最好使用评论。进一步注意:如果问题确实不清楚,或者提问的人显然没有做过任何研究/尝试过任何事情,那么最好不要写答案,因为1)这不是免费的编码服务或教程网站;2) 没有努力的问题将被关闭和删除;3) 这意味着,最终,你可能浪费了你的时间。只是一个提示-这些都是你经过一段时间阅读元站点后学到的东西:-)