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