删除带变量的行

时间:2018-01-08 06:01:51

标签: excel vba excel-vba

我尝试过使用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

注意:所有变量都有正确的数据。

我真的很想知道为什么上述参考文献不起作用,以扩大我对错误发生地的理解。

所有四行都在我的代码中,其中三行不能正常注释,所以我可以快速测试任何解决方案,看看我的问题是什么。

1 个答案:

答案 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