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