【发布时间】:2020-10-29 21:07:46
【问题描述】:
所以,我有一个包含大约 80 张工作表的 Excel 工作簿,这些工作表被命名为 Input、Input(1)、input、INPUT、INPUT(2) 和 Output、Output(1)、Output(2)、output,输出等等,你明白了......我想创建一个宏,它在名为“MASTERSHEET INPUT”和“MASTERSHEET Output”的工作簿中创建两个母版表。宏应从其工作表名称中具有任何输入变化的任何工作表中复制所有数据,并将其粘贴到 MASTERSHEET INPUT 中,对于名为 output 的工作表也是如此,它将被粘贴到 MASTERSHEET OUTPUT 中。我对 VBA 比较陌生,如果有人可以帮助我,我将不胜感激。 提前致谢!
这是我之前使用的代码
Sub CombineData()
Dim I As Long
Dim xRg As Range
On Error Resume Next
Worksheets.Add Sheets(1)
ActiveSheet.Name = "MasterSheet"
For I = 2 To Sheets.Count
Set xRg = Sheets(1).UsedRange
If I > 2 Then
Set xRg = Sheets(1).Cells(xRg.Rows.Count + 1, 1)
End If
Sheets(I).Activate
ActiveSheet.UsedRange.Copy xRg
Next
End Sub
但这会将工作簿中的所有工作表合并为一个而不检查工作表名称。
接下来我尝试使用这个,但这只是将第一个输出表粘贴到两个母版表中,然后结束:
Sub CombineData()
Dim I As Long
Dim xRg As Range
Dim xWs As Worksheet
Application.ScreenUpdating = False
Application.DisplayAlerts = False
On Error Resume Next
Worksheets.Add Sheets(1)
ActiveSheet.Name = "MasterSheet Output"
For I = 2 To Sheets.Count
Set xRg = Sheets(1).UsedRange
If I > 2 Then
Set xRg = Sheets(1).Cells(xRg.Rows.Count + 1, 1)
End If
For Each xWs In Application.ActiveWorkbook.Worksheets
If xWs.Name = "OUTPUT*" Or xWs.Name = "output*" Or xWs.Name = "Output*" Then
Sheets(I).Activate
ActiveSheet.UsedRange.Copy xRg
End If
Next
Next
On Error Resume Next
Worksheets.Add Sheets(1)
ActiveSheet.Name = "MasterSheet Input"
For I = 3 To Sheets.Count
Set xRg = Sheets(1).UsedRange
If I > 2 Then
Set xRg = Sheets(1).Cells(xRg.Rows.Count + 1, 1)
End If
For Each xWs In Application.ActiveWorkbook.Worksheets
If xWs.Name = "INPUT*" Or xWs.Name = "input*" Or xWs.Name = "Input*" Then
Sheets(I).Activate
ActiveSheet.UsedRange.Copy xRg
End If
Next
Next
Application.DisplayAlerts = True
Application.ScreenUpdating = True
Call DeleteAllSheetsExceptMaster
End Sub
我也尝试过使用它,但这完全没有任何作用:
Sub CombineData()
Dim I As Long
Dim xrg As Range
Dim counter As Long
Dim xWs1 As Worksheet
Dim xWs2 As Worksheet
Application.ScreenUpdating = False
Application.DisplayAlerts = False
On Error Resume Next
For counter = 1 To 2
Worksheets.Add Sheets(1)
If counter = 1 Then
ActiveSheet.Name = "MasterSheet Input"
Set xWs1 = ActiveSheet
End If
If counter = 2 Then
ActiveSheet.Name = "MasterSheet Output"
Set xWs2 = ActiveSheet
End If
Next counter
For I = 2 To Sheets.count
Set xrg = Sheets(1).UsedRange
If I > 2 Then
Set xrg = Sheets(1).Cells(xrg.Rows.count + 1, 1)
End If
Sheets(I).Activate
If Sheets(I).Name = "OUTPUT*" Or Sheets(I).Name = "output*" Or Sheets(I).Name = "Output*" Then
ActiveSheet.UsedRange.Copy xWs2
End If
If Sheets(I).Name = "INPUT*" Or Sheets(I).Name = "input*" Or Sheets(I).Name = "Input*" Then
ActiveSheet.UsedRange.Copy xWs1
End If
Next
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
【问题讨论】:
-
当您在编写代码时遇到困难,Stackoverflow 将为您提供帮助。但我们不会只为您编写所有代码。
-
嘿@Marc 很抱歉上次无法提供代码,你现在能帮我吗?
-
你能告诉我们工作表中的数据吗?它在一个连续的范围内吗?每个工作表中的列数是否相同?您只需要值,还是还需要格式?它有标题吗?以及您可能认为相关的任何其他内容。
-
所有输入工作表在每个工作表中具有相同的标题和相同的列数,输出工作表具有不同的列数但前九列相同,之后开始更改,只需要值不需要格式化。输入中的所有数据都显示为一个连续的范围,因为输出的前九列是连续的,但其余的不是。