当前代码在每个以“ Rev”开头的工作表中循环并返回一个特定的单元格值,该值填充了我的工作表“ Table”中的一个表。
这很好。但是,如果删除了Rev工作表,则Table工作表中的值将保留。
有了该背景信息,什么是仅阻止当前Rev工作表值填充表的解决方案?
Sub Rev_loop()
Dim ws As Worksheet
Dim n As Long
For Each ws In Worksheets
If ws.Name Like "Rev*" Then
n = n + 1
Worksheets("Table").Cells(n).Value = ws.Range("B2").Value
End If
Next ws
End Sub
答案 0 :(得分:1)
请先清除表格。然后像以前一样遍历工作表。
类似这样的东西:
Worksheets("Table").Range("B2:B99").ClearContents
答案 1 :(得分:1)
如果您不想在下一个循环之前清除表,则必须在某处记住工作表的名称。
通过此示例,您可以将工作表的名称及其值一起存储在前两列中:
Sub Rev_loop()
Dim ws As Worksheet
Dim n As Long
With Worksheets("Table")
n = 0
For Each ws In Worksheets
If ws.Name Like "Rev*" Then
n = n + 1
.Cells(n, 1).Value = ws.Name
.Cells(n, 2).Value = ws.Range("B2").Value
End If
Next ws
End With
End Sub
在第二个循环中,您比较存储的工作表名称,并删除所有具有过时名称的行:
Sub Correct_loop()
Dim ws As Worksheet
Dim StillValid As Boolean
Dim n As Long
With Worksheets("Table")
For n = .Cells(.Rows.Count, 1).End(xlUp).Row To 1 Step -1
StillValid = False
For Each ws In Worksheets
If ws.Name = .Cells(n, 1).Value Then
StillValid = True
Exit For
End If
Next ws
If Not StillValid Then .Rows(n).Delete
Next n
End With
End Sub