Excel 只能在一个工作簿上运行一个VBA
我正试着翻阅几本作业本。当我运行以下代码时,它只在一个工作簿上运行,然后关闭,不会继续到下一个wb。任何帮助都会很好Excel 只能在一个工作簿上运行一个VBA,excel,vba,Excel,Vba,我正试着翻阅几本作业本。当我运行以下代码时,它只在一个工作簿上运行,然后关闭,不会继续到下一个wb。任何帮助都会很好 Sub AllFiles() Dim folderPath As String Dim filename As String Dim wb As Workbook folderPath = "C:\Users\USER\Desktop\OCCREPORTS\Files\" 'change to suit If Right(folderPath, 1) <> "\"
Sub AllFiles()
Dim folderPath As String
Dim filename As String
Dim wb As Workbook
folderPath = "C:\Users\USER\Desktop\OCCREPORTS\Files\" 'change to suit
If Right(folderPath, 1) <> "\" Then folderPath = folderPath + "\"
filename = Dir(folderPath & "*.xlsx")
Do While filename <> ""
Application.ScreenUpdating = False
Set wb = Workbooks.Open(folderPath & filename)
wb.Activate
Call Combine
filename = Dir()
Loop
Application.ScreenUpdating = True
End Sub
Sub Combine()
Dim J As Integer
Dim s As Worksheet
Dim LastCol As Integer
On Error Resume Next
Sheets(1).Select
Worksheets.Add ' add a sheet in first place
Sheets(1).Name = "Combined"
For Each s In ActiveWorkbook.Sheets
If s.Name <> "Combined" Then
Application.Goto Sheets(s.Name).[A1]
Selection.CurrentRegion.Select
Sheet.UsedRange.Clear
LastCol = Sheets("Combined").Cells(1, Columns.Count).End(xlToLeft).Column
Selection.Copy Destination:=Sheets("Combined"). _
Cells(1, LastCol + 1)
End If
Next
ActiveWorkbook.Save
End Sub
Sub-AllFiles()
将folderPath设置为字符串
将文件名设置为字符串
将wb设置为工作簿
folderPath=“C:\Users\USER\Desktop\OCCREPORTS\Files\”,根据需要进行更改
如果正确(folderPath,1)“\”则folderPath=folderPath+“\”
filename=Dir(folderPath&“*.xlsx”)
文件名“”时执行此操作
Application.ScreenUpdating=False
设置wb=Workbooks.Open(文件夹路径和文件名)
wb.激活
呼叫联合收割机
filename=Dir()
环
Application.ScreenUpdating=True
端接头
子联合收割机()
作为整数的Dim J
将s设置为工作表
将LastCol设置为整数
出错时继续下一步
第(1)页。选择
工作表。添加“首先添加工作表”
第(1)页。Name=“组合”
对于ActiveWorkbook.Sheets中的每个
如果美国名称为“合并”,则
申请表。转到表(s.Name)。[A1]
Selection.CurrentRegion.Select
Sheet.UsedRange.Clear
LastCol=工作表(“组合”)。单元格(1,Columns.Count)。结束(xlToLeft)。列
选择。复制目标:=工作表(“组合”)_
单元格(1,LastCol+1)
如果结束
下一个
活动工作簿。保存
端接头
根据我在评论中的建议,尝试将文件信息作为参数传递给调用
子节点,请参见以下内容:
Sub AllFiles()
Dim folderPath As String
Dim filename As String
Dim wb As Workbook
folderPath = "C:\Users\USER\Desktop\OCCREPORTS\Files\" 'change to suit
If Right(folderPath, 1) <> "\" Then folderPath = folderPath + "\"
filename = Dir(folderPath & "*.xlsx")
Do While filename <> ""
Application.ScreenUpdating = False
Call Combine(folderPath & filename)
filename = Dir()
Loop
Application.ScreenUpdating = True
End Sub
Sub Combine(fileToOpen As String)
Dim J As Integer
Dim s As Worksheet
Dim LastCol As Integer
Dim wb As Workbook
Set wb = Workbooks.Open(fileToOpen)
With wb
On Error Resume Next
.Sheets(1).Select
Worksheets.Add ' add a sheet in first place
.Sheets(1).Name = "Combined"
For Each s In .Sheets
If s.Name <> "Combined" Then
Application.Goto .Sheets(s.Name).[A1]
Selection.CurrentRegion.Select
.Sheet.UsedRange.Clear
LastCol = .Sheets("Combined").Cells(1, Columns.Count).End(xlToLeft).Column
Selection.Copy Destination:=.Sheets("Combined"). _
Cells(1, LastCol + 1)
End If
Next
.Save
.Close
End With
End Sub
Sub-AllFiles()
将folderPath设置为字符串
将文件名设置为字符串
将wb设置为工作簿
folderPath=“C:\Users\USER\Desktop\OCCREPORTS\Files\”,根据需要进行更改
如果正确(folderPath,1)“\”则folderPath=folderPath+“\”
filename=Dir(folderPath&“*.xlsx”)
文件名“”时执行此操作
Application.ScreenUpdating=False
调用合并(文件夹路径和文件名)
filename=Dir()
环
Application.ScreenUpdating=True
端接头
子联合收割机(文件打开为字符串)
作为整数的Dim J
将s设置为工作表
将LastCol设置为整数
将wb设置为工作簿
设置wb=工作簿。打开(fileToOpen)
与wb
出错时继续下一步
.工作表(1)。选择
工作表。添加“首先添加工作表”
.Sheets(1).Name=“合并”
对于每一个s In.表
如果美国名称为“合并”,则
申请表(s.Name)。[A1]
Selection.CurrentRegion.Select
.Sheet.UsedRange.Clear
LastCol=.Sheets(“合并”).Cells(1,Columns.Count).End(xlToLeft).Column
选择。复制目标:=.Sheets(“组合”)_
单元格(1,LastCol+1)
如果结束
下一个
拯救
.结束
以
端接头
filename=Dir
应该是filename=Dir()
谢谢你的建议。。。我做了更改,但它仍然只循环1个文件。我让它循环文件,但它没有执行联合收割机(我从错误的目录运行它)。尝试将Combine
更改为Call Combine
只需将ActiveWorkbook
添加到它们前面,就像您对其他调用do工作表所做的那样。Raugmor。。。感谢您的帮助。Raugmor,如果我想更进一步,对于每一张标题为“合并”的新工作表,我们如何将新工作表添加到名为Target的新工作簿中的下一个空闲行?将新工作表添加到空闲行?我不太明白。您能澄清一下吗?对于创建的每个“组合”工作表,程序将复制整个“组合”选项卡,并在下一个空闲行将其放入名为Target的新工作簿中。