代码在特定工作簿中工作,但不在个人工作簿中

时间:2014-07-14 21:50:40

标签: excel vba excel-vba

我有一个名为Test的工作簿,并使用下面的代码编写了一个宏。它工作正常,但当我将其添加到我的个人工作簿时,代码在行Set ws = ThisWorkbook.Sheets("Sheet1")上给出了错误。

  

下标超出范围。

我将代码从模块移动到个人工作簿上的Sheet1,然后移动到ThisWorkbook。什么都没有帮助。如果你可以提供我可以尝试的任何建议,我将不胜感激。

Sub KeepOnlyAtSymbolRows()
Dim ws As Worksheet
Dim rng As Range
Dim lastRow As Long

Set ws = ThisWorkbook.Sheets("Sheet1")

lastRow = ws.Range("E" & ws.Rows.Count).End(xlUp).Row

Set rng = ws.Range("E1:E" & lastRow)

' filter and delete all but header row
With rng
    .AutoFilter Field:=1, Criteria1:="<>*@*"
    .Offset(1, 0).SpecialCells(xlCellTypeVisible).EntireRow.Delete
End With

' turn off the filters
ws.AutoFilterMode = False
End Sub

1 个答案:

答案 0 :(得分:2)

您是否特别希望在当前打开的工作簿中引用“Sheet1”表?

如果是,请使用下面的一行

Set ws = ActiveWorkbook.Worksheets("Sheet1")

如果您只想参考当前表格,请使用

Set ws = ActiveSheet

如果您希望简单地定位第一张表,无论其名称是什么,

Set ws = ActiveWorkbook.Worksheets(1)

当前编写代码的方式,似乎是指个人工作簿中的“Sheet1”,而不一定是用户当前活动的那个。