1

我试图在某些条件下在另一行基础下方插入一行。现在这段代码将遍历许多工作表。它适用于 1 张纸,但是当它尝试为下一张纸执行相同的功能时,它显示错误。任何人都可以帮我解决这个问题。我使用的代码如下:

Sub test()
Dim a As Worksheet
Dim lngRow As Long
Dim s As String
Dim z As Variant
s = "Sheet1,Sheet2"
z = VBA.Split(s, ",")
For Each i In z
Set a = Sheets(i)
For lngRow = a.UsedRange.Rows.Count To 1 Step -1
If UCase$(a.Cells(lngRow, 2).Value) = "R" Then
a.Range("A" & CStr(lngRow + 1)).Select
Selection.EntireRow.Insert , CopyOrigin:=xlFormatFromLeftOrAbove
End If
Next lngRow
Next i
End Sub

错误出现在这一行:

a.Range("A" & CStr(lngRow + 1)).Select
4

2 回答 2

2

您收到错误的原因是您只能Select在活动工作表上设置一个范围。要按原样修复代码,请在循环a.Activate之前添加。For

更好的是,根本不要Select

于 2012-11-17T19:42:35.050 回答
1

您的代码假定 Sheets(1) 等于 sheet("Sheet1") 可能并非总是如此。最好使用如下代码:

Sub Test1()
Dim aSht As Variant, SafeShts As String
Dim lngrow As Long

SafeShts = LCase("Sheet3 , Sheet4")   'Write here sheets to be unaffected

For Each aSht In ThisWorkbook.Sheets
    If InStr(SafeShts, LCase(aSht.Name)) < 1 Then   'Current sheet not within safe sheets
        For lngrow = aSht.UsedRange.Rows.Count To 1 Step -1
            If UCase(aSht.Cells(lngrow, 2)) = "R" Then
                aSht.Cells(lngrow + 1, 1).EntireRow.Insert xlShiftDown, xlFormatFromLeftOrAbove
            End If
        Next
    End If
Next

End Sub

该代码在更改之前不会选择任何内容,因此速度非常快。

干杯

于 2012-11-19T09:32:02.227 回答