【问题标题】:Excel VBA Calculate last row for each worksheet storing the value with a different nameExcel VBA计算存储具有不同名称的值的每个工作表的最后一行
【发布时间】:2018-10-25 08:03:55
【问题描述】:

我需要计算我的 excel 工作簿的每个工作表中的最后一行,我实际上是使用以下代码行来做的:

With Sheets("Sheetname")
If Application.WorksheetFunction.CountA(.Cells) <> 0 Then
    LastRow = .Cells.Find(What:="*", _
                  After:=.Range("A1"), _
                  Lookat:=xlPart, _
                  LookIn:=xlFormulas, _
                  SearchOrder:=xlByRows, _
                  SearchDirection:=xlPrevious, _
                  MatchCase:=False).Row
Else
    LastRow = 1
End If
End With

是否可以遍历每个工作表并每次使用不同的名称存储 LastRow 值?我需要将它们全部单独存储在我的宏中。

【问题讨论】:

  • 使用集合、字典或数组来存储信息。我会使用以工作表名称作为键,以 lastrow 作为值的字典。

标签: vba excel for-loop


【解决方案1】:

您可以像这样循环浏览工作表:

Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets
    'do something
Next ws

您可以使用 Scripting.Dictionary 来存储您的值,其中 ws.Name 作为键,.Cells.Find 作为值。将代码放在'do something 注释所在的位置。

【讨论】:

  • 在我的情况下,我不需要评估工作表是否为空,我想避免使用.UsedRange,因为有时它无法计算工作表中的实际最后一行。我是否必须在 for 循环中将键和值添加到字典中?正如您所建议的那样,在循环之后执行它看起来更好。
  • @AleB 抱歉,没有正确阅读问题。您必须在循环中添加项目。
  • 没问题,你的回答对我有帮助。不幸的是,结果证明 for 循环不适合我在这种情况下应该做的事情,因为其中一个工作表在开始时没有填写,并且字典中的一个值导致错误。为了解决这样的问题,我可能需要避免循环并单独计算“LastRowValue”。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-11-28
  • 2021-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多