我尝试过使用VBA删除excel中的行的3个不同的东西,我得到了第四个工作,但想知道其他人为什么不能更好地理解。
以下不起作用:
ThisWorkbook.Worksheets("Orders").Range(.Cells(lastRow, 1), _
.Cells(lastRow3, 1)).EntireRow.Delete Shift:=xlUp 'Invalid or unqualified reference
ThisWorkbook.Worksheets("Orders").Rows(lastRow, lastRow3).Delete _
Shift:=xlUp 'Application defined or object defined error
ThisWorkbook.Worksheets("Orders").Range(.Rows(lastRow), _
.Rows(lastRow3)).EntireRow.Delete Shift:=xlUp 'Invalid or unqualified reference
但是以下DID工作得非常好:
ThisWorkbook.Worksheets("Orders").Rows(lastRow & ":" & lastRow3).Delete Shift:=xlUp
注意:所有变量都有正确的数据。
我真的很想知道为什么上述参考文献不起作用,以扩大我对错误发生地的理解。
所有四行都在我的代码中,其中三行不能正常注释,所以我可以快速测试任何解决方案,看看我的问题是什么。
答案 0 :(得分:1)
您需要在.Cells
之前引用工作表或使用With
语句。理想情况下,将ThisWorkbook.Worksheets("Orders")
放入变量ws
并引用:
如果我有
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("Orders")
1)然后是第一个:
ThisWorkbook.Worksheets("Orders").Range(.Cells(lastRow, 1), .Cells(lastRow3, 1)).EntireRow.Delete Shift:=xlUp - Invalid or unqualified reference
变为:
ws.Range(ws.Cells(lastRow, 1),ws.Cells(lastRow3, 1)).EntireRow.Delete Shift:=xlUp
2)第二个要求Range作为对象在语法上工作:
所以这个:
ThisWorkbook.Worksheets("Orders").Rows(lastRow, lastRow3).Delete Shift:=xlUp
会有一般删除行的形式,例如(不知道列)
ws.Range("A" & lastRow & ":B" & lastRow3).Delete Shift:=xlUp
或您还可以使用第三个示例中提供的语法,并仅使用Rows
指定。
3)对于第三个,它与第一个原因相同,您还需要提供工作表参考:
ThisWorkbook.Worksheets("Orders").Range(.Rows(lastRow), .Rows(lastRow3)).EntireRow.Delete Shift:=xlUp - Invalid or unqualified reference
将是:
ws.Range(ws.Rows(lastRow), ws.Rows(lastRow3)).EntireRow.Delete Shift:=xlUp
请注意,上面的内容基本上是您尝试为第二个示例指定的内容。
您也可以尝试过:
ws.Range(ws.Cells(lastRow, "A"), ws.Cells(lastRow3, "A")).EntireRow.Delete