我正在写我的第一个VBA。我有一张名为Sheet1
的表格。该表格有一列E
;我想删除列E
上有空字段的所有行。
因此,我写了这段代码:
Sub EmptyCells()
Sheets("Sheet1").Columns("E:E").SpecialCells(xlBlanks).EntireRow.Delete
End Sub
然而,当我运行它时,我收到此错误:
下标超出范围
为什么会出现此错误?我确信E
中的列Sheet1
已存在。我的推荐不正确吗?
修改
如果我尝试Columns("E")
或Range("E:E")
,而不是Columns("E:E")
,我会收到同样的错误
答案 0 :(得分:2)
如果列 E (在UsedRange 中)中有任何REAL空单元格,则您的代码将有效。
您的单元格可能包含返回 Null 的公式。 SpecialCells
并不认为它们是空的。您可以将 E 列中的单元格包含 Null 作为常量; SpecialCells
也认为它们已被填满。
修改#1:强>
根据您的具体错误消息确保工作表名称拼写正确。 Sheet1
与Sheet 1
答案 1 :(得分:1)
我试过这个并且有效:
Option Explicit
Sub TetsMe()
MsgBox (Worksheets(1).Parent.Name & VbCrLf & Worksheets(1).Name)
Worksheets(1).Columns("E:E").SpecialCells(xlBlanks).EntireRow.Delete
End Sub
作为索引的不同语法可以引用不同的表。在这种情况下,Worksheets(1)
是工作簿中的第一个工作表。
MsgBox()
将告诉您正在更改哪个工作表和哪个工作簿。一旦你知道,你在做什么,你可以删除它。
如果问题出在工作簿名称中,则可以很容易地将其更改为:
With Workbooks("NameYourWorkbook").Worksheets("NameYourWorksheet")
.Columns("E:E").SpecialCells(xlBlanks).EntireRow.Delete
End With
答案 2 :(得分:1)
如果您有一张名为/标题Sheet1
的表单,您的代码就可以使用。
Sub EmptyCells()
Sheets("Sheet1").Columns("E:E").SpecialCells(xlBlanks).EntireRow.Delete
End Sub
请注意,有不同的方式来调用工作表。
Sheets("Sheet1") 'means the visible name of the sheet is `Sheet1` (not the same as VBA name)
'the number doesn't tell anything about it's position, it's just a name.
Sheet1 'means the VBA name of the sheet.
'the number doesn't tell anything about it's position, it's just a name.
Worksheets(1) 'means the first worksheet (which ever is in the first position)
Sheets(1) 'means the first sheet (can also be a chart not only a worksheet)
'this has no relation to its name which could be "Sheet5"
'(If "Sheet5" is in first position).