VBA删除不等于“摘要详细信息”的所有工作簿中的所有工作表

问题描述:

我似乎无法让代码循环打开下一个工作簿。之后,我想将每个工作簿中的所有单个工作表合并到一个工作簿中,并根据工作簿名称重命名每个选项卡。VBA删除不等于“摘要详细信息”的所有工作簿中的所有工作表

我不是太远,但句子一个是我的第一个任务

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 

千恩万谢

+0

是名都对齐?我会使用'wsNAME = LCase(ws.Name)'。 – user3819867

或者更直接,刚才复制的表,如果它存在,而不是删除所有非匹配(如果代码删除所有表这也将导致错误)

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 
+0

你会介意通过你的代码和思想走过我吗?我的VBA还处于低水平,我还不了解对象。此外任何资源材料都会很棒。我想成为VBA专家。 – user2555565

+1

该代码创建一个新的工作簿,然后循环通过活动实例中的所有打开的工作簿。它将检查工作簿是否不是新创建的工作簿,然后查找每个打开的工作簿中名称为wsName(“摘要详细信息”)的工作表。如果找到工作表,则变量ws存在(不是无),并将该工作表复制到主工作簿。如果它没有找到匹配的表单,则该工作簿没有任何变化。 – brettdj

+0

它几乎完美等价于我的,结构不那么重要(在这个尺寸上应该不重要),但速度更快。它“选择”ws,如果没有,则使用错误处理。唯一的缺点:它不检查大写字母。 – user3819867

之所以如此不进入我的简历。

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 
+0

非常感谢你!我将在早上测试代码。每天我都会输出14份报告,其中每份只需要1页(其余是相同数据的摘要)。从那里我需要合并它们并将它们插入到工作表中,然后我使用这14个报告标签并总结我的管理事情......从Office Space中思考TPS报告。 – user2555565

+0

谢谢你,看到它的工作。如果确实如此,请确保您将我的答案标记为正确。 – user3819867

+0

我不会同时打开14个选项卡。我将使用Open方法和字符串。您可以将它们放置为C:\ ertdfgcvb.xlsx | Ertdfgcvb Co. | ertdfgcvb最后:标签名称。然后你的循环会通过它们,然后复制它们的表/值并关闭它们。只有两个会同时开放。 – user3819867