我使用一个将数据导出到多张工作表的程序,并且我需要将这些数据全部放在同一张工作表中。
关于工作表 - 每次导出时它们的名称都会有所不同,因此不需要定义,因为有时会有 100 多个不同的工作表。
工作表内部 - 是不同行和列的数据(我需要将其复制到主表中下一个可用的空白行,直到空白行)。
所有数据都需要复制到的工作表 - 该工作表最初是空白的,但我需要根据来自其他工作表的行复制将所有数据叠加在一起。(如果需要,可以有一个定义的名称)
我是 VBA 新手,所以希望上述解释有所帮助。
我当前的 VBA 不工作:
Sub SheetLoopPasteData()
Dim ws As Worksheet
Dim wsSheet As Worksheet
Set wsSheet = Sheets("Sheet2")
For Each ws In Worksheets
ws.Activate
variable = Cells(Rows.Count, 1).End(xlUp).Row
Rows("1:" & variable).Copy _
Destination:=wsSheet.Range("A" & (wsSheet.Range("A" & wsSheet.Rows.Count).End(xlDown).Row + 1))
Next
End Sub
答案1
我想建议 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
怎么运行的:
- 复制&粘贴此代码作为模块。
- 宏将在现有工作簿中创建新工作表,名称为主表,可编辑。
- 我没有使用将数据从顶行复制到最后一行的方式,而是使用了使用范围方法,因为将适应每一个更新。
答案2
这非常好,但是我需要它来应对特定的范围 - 可以做到吗?
我想建议 VBA(宏)帮助您将所有工作表中使用的范围复制到新工作表中,就像数据合并一样。
子合并数据()
Dim I As Long
Dim xRg As Range
On Error Resume Next
Worksheets.Add Sheets(1)
ActiveSheet.Name = "MasterSheet"
对于 I = 2 至 Sheets.Count 设置 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 工作原理:
将此代码复制并粘贴为模块。宏将在现有工作簿中创建可编辑的新工作表,名为 MasterSheet。我使用了 UsedRange 方法,而不是将数据从顶行复制到最后一行,因为它将适应所有更新。