excel - 动态工作表中的宏
问题描述
我是 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
解决方案
正如@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
推荐阅读
- python - 如何检查 PosixPath 是目录还是文件
- excel - 我想在 Google 表格上的公式后自动添加文本
- java - 无法在使用 Spring Java 12 的 Maven 项目中使用 java.net.http
- java - 在 Java 11 及更高版本中使用 HttpClient 时如何跟踪 HTTP 303 状态代码?
- python - Python中的Selenium - 如何单击具有特定标签的所有按钮?
- mysql - MySQL 在特定条件下返回最新和最长的连续行
- firebase - 为什么我会收到未经授权的 Firebase 存储错误?
- reactjs - 在嵌套数组上反应映射
- r - 如何在图形标题中打印矢量?
- azure-cosmosdb - cosmos DB - 需要每个逻辑分区图表的“逻辑分区”计数和项目数