Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Excel 2007中选择要删除的行范围。运行时错误1004?_Excel_Range_Delete Row_Vba - Fatal编程技术网

在Excel 2007中选择要删除的行范围。运行时错误1004?

在Excel 2007中选择要删除的行范围。运行时错误1004?,excel,range,delete-row,vba,Excel,Range,Delete Row,Vba,我试图编写一个代码,删除工作表中第三行和最后一行之间的所有行。我有一些简短的代码行,首先查找包含数据的最后一行,然后返回该行号。从中减去1。并选择从第3行到第2行到最后一行的数据范围,并尝试将其删除。但我每次运行这段代码都会出错。有什么建议吗 Sheets("Sheet1").Activate lastrow = (Sheet1.Range("A1").Offset(Sheet1.Rows.Count - 1, 0).End(xlUp).Row) - 1 Range("3: lastrow").

我试图编写一个代码,删除工作表中第三行和最后一行之间的所有行。我有一些简短的代码行,首先查找包含数据的最后一行,然后返回该行号。从中减去1。并选择从第3行到第2行到最后一行的数据范围,并尝试将其删除。但我每次运行这段代码都会出错。有什么建议吗

Sheets("Sheet1").Activate
lastrow = (Sheet1.Range("A1").Offset(Sheet1.Rows.Count - 1, 0).End(xlUp).Row) - 1
Range("3: lastrow").Select  'Error 1004: method range of object _global failed
Selection.Delete Shift:=xlUp 
使用范围的SpecialCells属性:

 Range("A3:" & Range("A1").SpecialCells(xlCellTypeLastCell).Address).Select 
这将选择块直到最后使用的单元

编辑: 要将其合并到程序中以获得倒数第二个单元格,请对最后一个单元格执行一些字符串操作

Dim str, str1, str2, add As String
Dim index, num As Integer
str = Range("A1").SpecialCells(xlCellTypeLastCell).Address   'returns say $j$20

index = InStr(2, str, "$")  'find the second dollar sign

str1 = Left(str, index)     'gets the string "$j$"
str2 = Mid(str, index + 1)  'get the string "20" 

num = CInt(str2) 'convert "20" to 20
num = num - 1
add = str1 & CStr(num) 'reattach to form "$j$19"

Range("A3:" & add).Select

谢谢我需要位于最后一行正上方的行,如何指定它。对不起,我是新来的vba@jerry我在里面放了一些评论,因为你是新手,可能还有很多其他的方法,非常感谢你,我意识到每次你改变你的数据表,改变最后一行的位置时,你都必须保存。如果你想让代码知道哪一行是最后一行或倒数第二行。只是出于好奇,你为什么认为我的代码没有编译或工作?@jerry如果你使用xlUp方向,你必须从RangeA65536.EndxlUp开始,你想要的是.Row而不是.Rows。我忘记了后者给你的是什么,但这是不正确的,在MSDN上仔细检查。这将只提供一列,因此如果列不均匀,将导致问题。SpecialCells是这个范围的一个很好的特性,它有一个不同的参数,例如,你可以得到所有使用过的单元格。