Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 只能在一个工作簿上运行一个VBA_Excel_Vba - Fatal编程技术网

Excel 只能在一个工作簿上运行一个VBA

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) <> "\"

我正试着翻阅几本作业本。当我运行以下代码时,它只在一个工作簿上运行,然后关闭,不会继续到下一个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) <> "\" 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的新工作簿中。