如何将客户名称列与工作表名称匹配并返回表总计

时间:2015-11-24 09:20:33

标签: excel vba excel-vba

我的主要表格被命名为“主要摘要”。这张表有三列。

  1. 序列号
  2. 客户名称
  3. 未结余额
  4. 其他表被命名为“Salman”,“Rehman”和“Islam”。 每张纸都有一张桌子。该表有5列,末尾有一行。

    我正在尝试将“客户名称”列中的名称与工作表进行匹配,然后将表格总行的最后一个单元格与客户名称链接到未结余额列。

    这是我到目前为止所尝试的内容:

    Sub CopyRows() 
      Dim bottomD As Integer 
      bottomD = Range("D" & Rows.Count).End(xlUp).Row 
    
      Dim c As Range 
      Dim ws As Worksheet 
    
      For Each c In Sheets("all").Range("D2:D" & bottomD) 
        For Each ws In Sheets ws.Activate 
          If ws.Name = c Then 
            c.EntireRow.Copy Cells(Rows.Count, "A").End(xlUp).Offset(1, 0) 
          End If 
        Next ws 
      Next c 
    End Sub
    

1 个答案:

答案 0 :(得分:0)

如果我理解正确,那么你的解决方案就是不必要的迭代。此外,您的解释并不完全符合您的代码。您在问题中引用Column B,代码会查看Column D。您还可以讨论名为Main Summary的代码表和代码引用all

你循环遍历所有单元格,然后是工作表,实际上你可以声明工作表并使用一个循环

Option Explicit
Sub CopyRows()
    Dim ws As Worksheet
    Dim all As Worksheet
    Dim rng As Range
    Dim c As Range

    Set all = ThisWorkbook.Sheets("Main Summary")
    With all
        Set rng = Range("D2:D" & .Range("D" & Rows.Count).End(xlUp).Row)
    End With

    For Each c In rng
        ' By using error handling you can avoid using a second loop
        On Error GoTo ContinueLoop
        Set ws = Sheets(c.Value)
        On Error GoTo 0

        c.Offset(0, 1).Formula = "=" & ws.ListObjects(1).Name & "[[#Totals],[Balance]]"
ContinueLoop:
    Next c
End Sub