excel - 循环通过工作表时匹配不会改变 lRow
问题描述
使用下面的匹配函数并循环工作表时,在匹配值的工作表之后匹配工作表时,计算是错误的。因此,例如在第二张纸lRow = 209
和第三张纸中不应该匹配的地方lRow
仍然是 209 而不是错误/零。
Sub lvl()
Dim lRow As Long
Dim ws As Worksheet
Dim starting_ws As Worksheet
Set starting_ws = ActiveSheet
For Each ws In ThisWorkbook.Worksheets
ws.Activate
On Error Resume Next
lRow = Application.WorksheetFunction.Match("LVL", ws.Range("A1:A1000"), 0)
If lRow > 0 Then
If Cells(lRow, 2).Value > 1 Then
Cells(lRow, 2).Select
Selection.End(xlDown).Select
TheActiveRow1 = ActiveCell.Row
TheActiveColumn1 = ActiveCell.Column
Selection.End(xlDown).Select
TheActiveRow2 = ActiveCell.Row
TheActiveColumn2 = ActiveCell.Column
End If
End If
Next
starting_ws.Activate
End Sub
解决方案
你的问题在这里:
On Error Resume Next
lRow = Application.WorksheetFunction.Match("LVL", ws.Range("A1:A1000"), 0)
lRow
如果"LVL"
未找到,则实际上不会更改,就好像 Match 失败一样,执行会在该行引发错误(您接下来从该行继续)。如果您想lRow
在没有找到任何内容时为零,请在使用 Match 函数之前将其设置为零:
On Error Resume Next
lRow = 0
lRow = Application.WorksheetFunction.Match("LVL", ws.Range("A1:A1000"), 0)
或者,考虑使用Application.Match
代替并将其捕获IsError
:
'On Error Resume Next <-no need for this
lRow = Application.Match("LVL", ws.Range("A1:A1000"), 0)
If IsError(lRow) then lRow = 0
推荐阅读
- c - 为什么这种冒泡排序是错误的?
- python - 熊猫 fillna() 就地不使用 .loc
- scala - 如何避免可变集合的意外突变?
- android - 我的 AndroidManifest.xml 中的“.lifecycle-trojan”是什么
- javascript - 如何在 Kattis 问题解决中进行分行?
- sql - 自动调整桶大小以获得跨越整个范围的 10 个桶
- javascript - JavaScript 承诺解决持续时间
- c - 有没有办法在cmd中禁用右键菜单?
- python - 如何将缓存文件图像添加到 Django HttpResponse
- json - 为什么 JsonResponse 不会自动序列化我的 Django 模型?