使用VBA对多个工作表中的多个工作簿求和,而无需手动选择

使用VBA对多个工作表中的多个工作簿求和,而无需手动选择,vba,excel,Vba,Excel,我一直在尝试用相同格式的多个工作表汇总多个工作簿。到目前为止,我一直在关注这一点。虽然我已经看了一些链接,也试图得到一个好的和简短的想法,第一个工作很好,所以我遵循 到目前为止,我第一次提到的帖子进展得相当顺利。然而,有一个(小)问题我在任何地方都找不到答案。如何在不选择文件的情况下使代码正常工作?我把它们都列在工作簿中名为“Main”的一列中,它们都在同一个文件夹中,但是,我不知道如何自动获取它们,而不必手动选择 例如,我想在工作簿“Main”中的工作表(1)的范围(“A1:A100”)中获取

我一直在尝试用相同格式的多个工作表汇总多个工作簿。到目前为止,我一直在关注这一点。虽然我已经看了一些链接,也试图得到一个好的和简短的想法,第一个工作很好,所以我遵循

到目前为止,我第一次提到的帖子进展得相当顺利。然而,有一个(小)问题我在任何地方都找不到答案。如何在不选择文件的情况下使代码正常工作?我把它们都列在工作簿中名为“Main”的一列中,它们都在同一个文件夹中,但是,我不知道如何自动获取它们,而不必手动选择

例如,我想在工作簿“Main”中的工作表(1)的范围(“A1:A100”)中获取文件名(及其地址)

谁能帮我一把吗?这是我正在使用的代码:

Sub Results()

Dim WS_Count As Integer 'not being used
Dim FileNameXls, f
Dim wb As Workbook, i As Integer

'locate where are the Templates and how many sheets they have
Range("Template").Select
ncol = ActiveCell.Column
Selection.End(xlToRight).Select
lastcolumn = ActiveCell.Column
numSheets = lastcolumn - ncol

'Name of the First Template
Business = Cells(2, ncol)

Windows("StressTestPlatform.xlsm").Activate

'THIS IS WHERE I'M ASKED TO SELECT THE FILES
FileNameXls = Application.GetOpenFilename(filefilter:="Excel Files, *.xl*", MultiSelect:=True)

If Not IsArray(FileNameXls) Then Exit Sub

Application.ScreenUpdating = False

For Each f In FileNameXls
     Set wb = Workbooks.Open(f)
     For i = 3 To numSheets
         wb.Worksheets(i).Range("C5:H93").Copy 
         'The Range must be changed accordingly to the template being used
         Workbooks("Main.xlsm").Sheets("Results").Range("C5:H93").PasteSpecial Paste:=xlPasteValues, Operation:=xlAdd, SkipBlanks:=True,     Transpose:=False
     Next i
        Application.CutCopyMode = False
        wb.Close SaveChanges:=False
Next f

    Application.CutCopyMode = False
    Application.ScreenUpdating = True
End Sub

如果您将完整的文件路径存储在某个范围内,为什么不在该范围内循环并打开每个文件

Dim TemplateRange as Range
Dim r as Range

Set TemplateRange = ThisWorkbook.Sheets(1).Range("A1:A100")
'^^ Change this to wherever your list of files is stored.

'You can eliminate the GetOpenFilename dialog entirely
'FileNameXls = Application.GetOpenFilename(filefilter:="Excel Files, *.xl*", MultiSelect:=True)

'Instead, just loop through the template range one by one and get
'each filename and proceed with the rest of your code as before
For Each r In TemplateRange
    FileNameXls = r.Value2
    Set wb = Workbooks.Open(FileNameXls)

    '
    'The rest of your code as before
    '
Next r

如果模板范围中有工作簿名称,但没有完整的文件路径,则需要做一些额外的工作,获取主工作簿的目录(假设所有其他文件都在同一目录中),然后将工作簿名称附加到该目录中。

文件名是包含完整路径还是仅包含文件?所有工作簿都在同一个文件夹中吗?我们说的是多个工作簿、多张工作表,还是多个带有多张工作表的工作簿?@jbarker2160我有一个带路径的单元格,还有一个带文件名的单元格,我想我可以在代码中做一些类似路径和名称的事情。我说的是几个excel文件和几个工作表。具有多个工作表的多个工作簿。