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
千恩万谢
或者更直接,刚才复制的表,如果它存在,而不是删除所有非匹配(如果代码删除所有表这也将导致错误)
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
你会介意通过你的代码和思想走过我吗?我的VBA还处于低水平,我还不了解对象。此外任何资源材料都会很棒。我想成为VBA专家。 – user2555565
该代码创建一个新的工作簿,然后循环通过活动实例中的所有打开的工作簿。它将检查工作簿是否不是新创建的工作簿,然后查找每个打开的工作簿中名称为wsName(“摘要详细信息”)的工作表。如果找到工作表,则变量ws存在(不是无),并将该工作表复制到主工作簿。如果它没有找到匹配的表单,则该工作簿没有任何变化。 – brettdj
它几乎完美等价于我的,结构不那么重要(在这个尺寸上应该不重要),但速度更快。它“选择”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
非常感谢你!我将在早上测试代码。每天我都会输出14份报告,其中每份只需要1页(其余是相同数据的摘要)。从那里我需要合并它们并将它们插入到工作表中,然后我使用这14个报告标签并总结我的管理事情......从Office Space中思考TPS报告。 – user2555565
谢谢你,看到它的工作。如果确实如此,请确保您将我的答案标记为正确。 – user3819867
我不会同时打开14个选项卡。我将使用Open方法和字符串。您可以将它们放置为C:\ ertdfgcvb.xlsx | Ertdfgcvb Co. | ertdfgcvb最后:标签名称。然后你的循环会通过它们,然后复制它们的表/值并关闭它们。只有两个会同时开放。 – user3819867
是名都对齐?我会使用'wsNAME = LCase(ws.Name)'。 – user3819867