Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.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
VBA删除所有工作簿中不相等的所有工作表;摘要详情“;_Vba_Excel - Fatal编程技术网

VBA删除所有工作簿中不相等的所有工作表;摘要详情“;

VBA删除所有工作簿中不相等的所有工作表;摘要详情“;,vba,excel,Vba,Excel,我似乎无法让代码循环到打开的下一个工作簿。之后,我想将每个工作簿中的所有单个工作表合并到单个工作簿中,并根据工作簿名称重命名每个选项卡 我不太远,但第一句话是我的第一项任务 Sub cullworkbooksandCONSOLIDATE() Dim ws As Worksheet Dim wb As Workbook Dim wsNAME As String For Each wb In Application.Wor

我似乎无法让代码循环到打开的下一个工作簿。之后,我想将每个工作簿中的所有单个工作表合并到单个工作簿中,并根据工作簿名称重命名每个选项卡

我不太远,但第一句话是我的第一项任务

  Sub cullworkbooksandCONSOLIDATE()
        Dim ws As Worksheet
        Dim wb As Workbook
        Dim wsNAME As String

            For Each wb In Application.Workbooks

            With wb
                For Each ws In ActiveWorkbook.Worksheets

                    With ws
                        wsNAME = ws.Name
                        If wsNAME <> "summary details" Then
                            ws.Delete
                        End If

                    End With

                Next
            End With
            Next


    End Sub
子工作簿和合并()
将ws设置为工作表
将wb设置为工作簿
将wsNAME设置为字符串
对于应用程序中的每个wb。工作簿
与wb
对于ActiveWorkbook.Worksheets中的每个ws
与ws
wsNAME=ws.Name
如果wsNAME为“摘要详细信息”,则
ws.Delete
如果结束
以
下一个
以
下一个
端接头

非常感谢

我的简历中没有这样的内容

Sub cullworkbooksandCONSOLIDATE()
      Dim ws As Worksheet
      Dim wb As Workbook
      Dim wsNAME As String
      Dim wbex As Workbook
'You'll need to define wbex, this is where your worksheets will be inserted
For Each wb In Application.Workbooks
    With wb
        If .Name <> wbex.Name Then 'if it's not the export workbook
                For Each ws In wb.Worksheets 'not necessarily active workbook
                    With ws
                        wsNAME = LCase(.Name)
                        If wsNAME <> "summary details" Then
                            .Delete 'why do you need to delete it?
                        Else
                            .Name = wb.Name
                            .Copy Before:=wbex.Sheets(1)
                        End If
                    End With
                Next
            .Close SaveChanges:=False 'you really don't want to corrupt your source data, do you?
        End If
    End With
Next
End Sub
子工作簿和合并()
将ws设置为工作表
将wb设置为工作簿
将wsNAME设置为字符串
将wbex设置为工作簿
'您需要定义wbex,这是插入工作表的位置
对于应用程序中的每个wb。工作簿
与wb
If.Name wbex.Name然后“如果它不是导出工作簿
对于wb.Worksheets中的每个ws不一定是活动工作簿
与ws
wsNAME=LCase(.Name)
如果wsNAME为“摘要详细信息”,则
.Delete'为什么需要删除它?
其他的
.Name=wb.Name
.复制前:=wbex.表(1)
如果结束
以
下一个
.Close SaveChanges:=False“您确实不想损坏源数据,是吗?”?
如果结束
以
下一个
端接头

或者更直接地说,只要复制工作表(如果存在),而不是删除所有不匹配的工作表(如果代码删除所有工作表,也会导致错误)

子工作簿和合并()
将wb设置为工作簿
将wb1设置为工作簿
将ws设置为工作表
将wsNAME设置为字符串
设置wb1=工作簿。添加(1)
wsNAME=“摘要详细信息”
对于应用程序中的每个wb。工作簿
与wb
If.Name wb1.Name然后“如果它不是导出工作簿
出错时继续下一步
设置ws=wb.Sheets(wsNAME)
错误转到0
如果不是,那么ws.Copy Before:=wb1.Sheets(1)
如果结束
以
下一个
端接头

名称是否全部对齐?我会使用
wsNAME=LCase(ws.Name)
。非常感谢!我将在早上测试代码。每天我导出14份报告,每个报告只需要一张表(其余是相同数据的摘要)。从那以后,我需要将它们合并并插入工作表中,然后使用这14个报告选项卡并总结我的管理事项。。。想想办公室里的TPS报告吧。当你看到它工作时,谢谢我。如果它确实有效,请确保您将我的答案标记为正确。我不会同时打开14个选项卡。我将使用带字符串的Open方法。您可以将它们放置为C:\ertdfgcvb.xlsx | ertdfgcvb Co.| ertdfgcvb last:tab name。然后循环将遍历它们,然后复制它们的表/值并关闭它们。只有两个会同时打开。你介意带我看看你的代码和想法吗。我的VBA仍然处于低水平,我还不了解对象。此外,任何资源材料都将是惊人的。我想成为VBA专家。代码创建一个新工作簿,然后在活动实例中的所有打开的Workboo中循环。它检查工作簿是否不是新创建的工作簿,然后在每个打开的工作簿中查找名为wsName(“摘要详细信息”)的工作表。如果找到工作表,则变量ws存在(不是空),并且该工作表将复制到主工作簿。如果它找不到匹配的工作表,那么该工作簿将不会发生任何事情。它几乎与我的工作簿完全相同,结构更少(在这个大小上应该不重要),但速度更快。它“选择”ws,如果没有,则使用错误处理。唯一的缺点是:它不检查大写字母。OPis没有指定检查大写字母。有一种方法可以扩展代码,以便在出错时删除工作表,并在复制后删除工作表。还是在检测并复制工作表后关闭每个工作簿的更简单方法?感谢您的演练-错误处理看起来非常漂亮
Sub cullworkbooksandCONSOLIDATE()

Dim wb As Workbook
Dim wb1 As Workbook
Dim ws As Worksheet
Dim wsNAME As String


Set wb1 = Workbooks.Add(1)
wsNAME = "summary details"


For Each wb In Application.Workbooks
    With wb
        If .Name <> wb1.Name Then 'if it's not the export workbook
            On Error Resume Next
            Set ws = wb.Sheets(wsNAME)
            On Error GoTo 0
            If Not ws Is Nothing Then ws.Copy Before:=wb1.Sheets(1)
        End If
    End With
Next
End Sub