如何使我的代码适用于所有工作表,而不仅仅是在当前活动工作表中?

use*_*812 1 excel vba excel-vba excel-formula

现在我设法让这段代码在我的活动表中运行良好:

Sub Deletecells()
   Dim ws As Worksheet
     For Each ws In Worksheets
       Last = Cells(Rows.Count, "A").End(xlUp).Row
        For i = Last To 1 Step -1
          If (Cells(i, "A").Value) = "DELETE" Then
           Cells(i, "A").EntireRow.Delete
          End If
        Next i
   Next ws
End Sub
Run Code Online (Sandbox Code Playgroud)

但我只能在一张表格中运行它(我将宏放入其中的表格),那么如何修改代码以便它可以在工作簿中的所有工作表中运行?谢谢!

小智 6

使用With ... End With块为所有Cell和Rows调用提供父工作表引用(转换为.Cells和.Rows以传递引用).

Sub Deletecells()
   Dim ws As Worksheet, last as long
   For Each ws In Worksheets
     with ws
       Last = .Cells(.Rows.Count, "A").End(xlUp).Row
        For i = Last To 1 Step -1
          If ucase(.Cells(i, "A").Value) = "DELETE" Then
            .Cells(i, "A").EntireRow.Delete
          End If
        Next i
     end with
   Next ws
End Sub
Run Code Online (Sandbox Code Playgroud)

  • @ user71812它将你的变量`Last`声明为`Long`.在使用VBA之前,应将VBA中使用的所有变量声明为类似"Dim Variable As Type"的类型.一个好主意是使用`Option Explicit`来记住你声明所有变量,这样你就不会忘记它.请参阅[Option Explicit Statement](https://msdn.microsoft.com/en-us/vba/language-reference-vba/articles/option-explicit-statement). (2认同)