Excel 同一工作表中的表格

Excel 同一工作表中的表格,excel,vba,worksheet,Excel,Vba,Worksheet,现在,当我运行宏71和72时,如果运行时错误“1004”源引用与目标区域重叠,我已经替换了它,我不确定我在哪里做错了什么。请协助。如果我理解正确,请在每个宏中用下面的代码替换Set ws2=wb.Sheets.Add() Option Explicit Sub Macro70() Dim wb As Workbook Dim ws As Worksheet Dim ws2 As Worksheet Dim sheets_Count As Int

现在,当我运行宏71和72时,如果运行时错误“1004”源引用与目标区域重叠,我已经替换了它,我不确定我在哪里做错了什么。请协助。

如果我理解正确,请在每个宏中用下面的代码替换
Set ws2=wb.Sheets.Add()

    Option Explicit

    Sub Macro70()

    Dim wb As Workbook
    Dim ws As Worksheet
    Dim ws2 As Worksheet
    Dim sheets_Count As Integer
    Dim sheets_Name() As String
    Dim i As Integer
    sheets_Count = Sheets.Count

    ReDim sheets_Name(0 To sheets_Count - 1)

    For i = 1 To sheets_Count
       sheets_Name(i - 1) = "'" & ActiveWorkbook.Sheets(i).Name & "'!R1C1:R17C2"
    Next i

    Set wb = ThisWorkbook
    For Each ws2 In wb.Sheets
If ws2.Name = "consolidated" Then Exit For
Next

    If ws2 Is Nothing Then
    Set ws2 = wb.Sheets.Add()
    ws2.Name = "consolidated"
    End If

    With ws2
        .Range("A1").Consolidate sheets_Name, xlSum, True, True, False
    End With

    End Sub


    Sub Macro71()

    Dim wb As Workbook
    Dim ws As Worksheet
    Dim ws2 As Worksheet
    Dim sheets_Count As Integer
    Dim sheets_Name() As String
    Dim i As Integer
    sheets_Count = Sheets.Count

    ReDim sheets_Name(0 To sheets_Count - 1)

    For i = 1 To sheets_Count
       sheets_Name(i - 1) = "'" & ActiveWorkbook.Sheets(i).Name & "'!R24C1:R35C2"
    Next i

    Set wb = ThisWorkbook
    For Each ws2 In wb.Sheets
If ws2.Name = "consolidated" Then Exit For
Next

    If ws2 Is Nothing Then
    Set ws2 = wb.Sheets.Add()
    ws2.Name = "consolidated"
    End If
With ws2
        .Range("A24").Consolidate sheets_Name, xlSum, True, True, False
    End With

    End Sub


    Sub Macro72()

    Dim wb As Workbook
    Dim ws As Worksheet
    Dim ws2 As Worksheet
    Dim sheets_Count As Integer
    Dim sheets_Name() As String
    Dim i As Integer
    sheets_Count = Sheets.Count

    ReDim sheets_Name(0 To sheets_Count - 1)

    For i = 1 To sheets_Count
       sheets_Name(i - 1) = "'" & ActiveWorkbook.Sheets(i).Name & "'!R39C1:R50C2"
    Next i

    Set wb = ThisWorkbook
   For Each ws2 In wb.Sheets
If ws2.Name = "consolidated" Then Exit For
Next

    If ws2 Is Nothing Then
    Set ws2 = wb.Sheets.Add()
    ws2.Name = "consolidated"
    End If
With ws2
        .Range("A39").Consolidate sheets_Name, xlSum, True, True, False
    End With

    End Sub     

您可以这样做:

For Each ws2 In wb.Sheets
If ws2.Name = "consolidated" Then Exit For
Next

    If ws2 Is Nothing Then
    Set ws2 = wb.Sheets.Add()
    ws2.Name = "consolidated"
    End If
子测试仪()
Const SHT_CONS As String=“合并”
将wb设置为工作簿,ws设置为工作表
将wsCons设置为工作表
Dim colSheets作为新系列
设置wb=ActiveWorkbook
'如果缺少合并表,则添加合并表
出错时继续下一步
设置wsCons=wb.工作表(SHT_CONS)
错误转到0
如果wsCons什么都不是
设置wsCons=wb.Worksheets.Add(后面:=wb.Sheets(wb.Sheets.Count))
wsCons.Name=SHT\u CONS
如果结束
'收集工作表名称
对于wb.工作表中的每个ws
如果ws.Name SHT_CONS,那么colSheets.Add ws.Name
下一个ws
'调用子对象以创建每个合并
DoConsolidate表格,“R1C1:R17C2”,wsCons.范围(“A1”)
DoConsolidate表格,“R24C1:R35C2”,wsCons.范围(“A24”)
DoConsolidate表格,“R39C1:R50C2”,wsCons.范围(“A39”)
端接头
子文档合并(sheetNames作为集合,rngR1C1作为字符串,rngDest作为范围)
Dim arr(),i,s
ReDim arr(0到sheetNames。计数-1)
i=0
对于每张图纸,请使用图纸名称
arr(i)=“'”&s&“!”&rngR1C1
i=i+1
下一个s
合并arr、xlSum、True、True、False
端接头

正如您所看到的,我已经编辑了宏,但是它显示了前面提到的错误。如果您能帮助我修复它,请告诉我。我想做的是在同一个名为“consolidated”的工作簿中包含所有3个表的主工作表。您需要从收集源范围的循环中排除“consolidated”工作表。@TimWilliams您能帮助我在代码中编写什么来排除“consolidated”工作表吗我收集源代码范围的循环中的工作表非常感谢它工作完美:)谢谢堆
Sub Tester()

    Const SHT_CONS As String = "consolidated"
    Dim wb As Workbook, ws As Worksheet
    Dim wsCons As Worksheet
    Dim colSheets As New Collection

    Set wb = ActiveWorkbook

    'add the consolidation sheet if missing
    On Error Resume Next
    Set wsCons = wb.Worksheets(SHT_CONS)
    On Error GoTo 0
    If wsCons Is Nothing Then
        Set wsCons = wb.Worksheets.Add(after:=wb.Sheets(wb.Sheets.Count))
        wsCons.Name = SHT_CONS
    End If

    'collect the sheet names
    For Each ws In wb.Worksheets
        If ws.Name <> SHT_CONS Then colSheets.Add ws.Name
    Next ws

    'call a sub to create each consolidation
    DoConsolidate colSheets, "R1C1:R17C2", wsCons.Range("A1")
    DoConsolidate colSheets, "R24C1:R35C2", wsCons.Range("A24")
    DoConsolidate colSheets, "R39C1:R50C2", wsCons.Range("A39")

End Sub

Sub DoConsolidate(sheetNames As Collection, rngR1C1 As String, rngDest As Range)
    Dim arr(), i, s
    ReDim arr(0 To sheetNames.Count - 1)
    i = 0
    For Each s In sheetNames
        arr(i) = "'" & s & "'!" & rngR1C1
        i = i + 1
    Next s
    rngDest.Consolidate arr, xlSum, True, True, False
End Sub