首页 > 解决方案 > 动态工作表中的宏

问题描述

我是 vba 的新手。我正在尝试执行一个可以在不同工作表中工作的宏。(每张表都有一个数据表)。

选择动态表中的特定列(存在于所有七个工作表中),并在表中(特定列的)最后一个单元格之后的一个单元格中计算该列中单元格的总和。

我在网站上搜索了很多,但我不完全明白。我将不胜感激任何帮助

Sub Employees()

Dim wrkSht As Worksheet
Dim lRow As Long
Dim vSheets() As Variant
Dim vItem As Variant
Dim rngFound As range

vSheets = Array("Employees 1", "Employees 2", "Employees 3", "Employees 4", "Employees 5")

For Each vItem In vSheets
    With Worksheets(vItem).Activate
    Set rngFound = .range("1:1").Find(What:="Monthly Salary")
   lRow = wrkSht.Cells(Rows.Count, 1).End(xlUp).Row + 1
      wrkSht.Cells(lRow, 6).FormulaR1C1 = "=SUBTOTAL(9,R2C:R[-1]C)"
      
      
        
    End With
Next vItem  
End Sub

标签: excelvba

解决方案


正如@GMalc 所说 - 遍历所有工作表。工作表是工作表集合的一部分,您可以遍历集合:

For Each Worksheet In ThisWorkbook.Worksheets

Next Worksheet

Worksheet必须用变量替换以保存对工作表的引用,因此:

Sub Test()

    Dim wrkSht As Worksheet
    Dim lRow As Long

    For Each wrkSht In ThisWorkbook.Worksheets
        lRow = wrkSht.Cells(Rows.Count, 1).End(xlUp).Row + 1
        
        'Single cell can be referenced with row/column number.
        wrkSht.Cells(lRow, 6).FormulaR1C1 = "=SUBTOTAL(9,R2C:R[-1]C)"
        'or
        'wrkSht.Cells(lRow, 6).Formula = "=SUBTOTAL(9,F2:F" & lRow - 1 & ")"
    Next wrkSht

End Sub

或者,如果它是一本大书中的精选表格,您可以使用:

Sub Test()

    Dim wrkSht As Worksheet
    Dim lRow As Long
    Dim vSheets() As Variant
    Dim vItem As Variant
    
    vSheets = Array("Sheet2", "Sheet3")

    For Each vItem In vSheets
        With Worksheets(vItem)
            lRow = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
            
            'Single cell can be referenced with row/column number.
            .Cells(lRow, 6).FormulaR1C1 = "=SUBTOTAL(9,R2C:R[-1]C)"
            'or
            '.Cells(lRow, 6).Formula = "=SUBTOTAL(9,F2:F" & lRow - 1 & ")"
        End With
    Next vItem

End Sub

推荐阅读