VBA宏赢得';t循环浏览工作簿中的工作表
出于某种原因,循环会运行,但不会从一张工作表移动到下一张工作表——我认为它只是在工作簿的第一张工作表上运行了大约十次相同的代码(因为我有10张工作表)。如果我删除循环,它会运行一次并关闭,这样代码就可以识别该循环,它就不会跟随它。我已经尝试了以上的变体,但每次都会遇到相同的问题。并非循环中的所有范围引用都适用于VBA宏赢得';t循环浏览工作簿中的工作表,vba,excel,Vba,Excel,出于某种原因,循环会运行,但不会从一张工作表移动到下一张工作表——我认为它只是在工作簿的第一张工作表上运行了大约十次相同的代码(因为我有10张工作表)。如果我删除循环,它会运行一次并关闭,这样代码就可以识别该循环,它就不会跟随它。我已经尝试了以上的变体,但每次都会遇到相同的问题。并非循环中的所有范围引用都适用于ws Sub CullData(): Dim ws As Worksheet Dim Counter As Integer Dim obsoleterows As Range For
ws
Sub CullData():
Dim ws As Worksheet
Dim Counter As Integer
Dim obsoleterows As Range
For Each ws In ThisWorkbook.Worksheets
For Counter = 1 To 40 Step 2
ws.Range("P2").Offset(Counter - 1, 0) = ws.Range("I1").Offset(Counter - 1, 0)
ws.Range("Q2").Offset(Counter - 1, 0) = ws.Range("K1").Offset(Counter - 1, 0)
If obsoleterows Is Nothing Then
Set obsoleterows = Rows(Counter)
Else
Set obsoleterows = Union(obsoleterows, Rows(Counter))
End If
Next Counter
obsoleterows.Delete
Set obsoleterows = Nothing
Next ws
End Sub
应该是:
If obsoleterows Is Nothing Then
Set obsoleterows = Rows(Counter)
Else
Set obsoleterows = Union(obsoleterows, Rows(Counter))
End If
..否则它只是默认为ActiveSheet
If obsoleterows Is Nothing Then
Set obsoleterows = ws.Rows(Counter)
Else
Set obsoleterows = Union(obsoleterows, ws.Rows(Counter))
End If
这样会更安全
obsoleterows.Delete
非常感谢你!如果你的问题被回答了,请记住接受这就是我们对你说谢谢的方式,并帮助用户识别哪些问题仍然需要回答。
If Not obsoleterows Is Nothing Then obsoleterows.Delete