excelmacros使用variables来定义整数失败的范围

我正在定义一个整数myrng1

 Set myrng1 = Range("B3 :" & Cells(LastRow, 2))` 

在代码中

 LastRow = Cells(Rows.Count, "B").End(xlUp).Row Set myrng1 = Range("B3 :" & Cells(LastRow, 2)) Set myrng2 = Range("D3 :" & Cells(LastRow, 4)) ActiveCell.FormulaR1C1 = "=SUMIF(myrng1,RC[-1],myrng2)" Range("B15").Select Selection.AutoFill Destination:=Range("B15:B30"), Type:=xlFillDefault Range("B15:B30").Select 

然而,我做了什么,我遇到Method 'Range' of object '_Global' failed错误

最简单的方法是

 Set myrng1 = Range("B3:B" & LastRow) 

否则,如果你想按照你的方法,那么伯纳德提到,使用。 .Address属性。

改变你的代码

 Set myrng1 = Range("B3:" & _ Cells(LastRow, 2).Address( _ rowabsolute:=False, _ columnabsolute:=False) _ ) 

或者这是做同样的事情。

 Set myrng1 = Range("B3:" & _ Replace(Cells(LastRow, 2).Address, "$", "") _ ) 

我也希望你已经宣布LastRowLong而不是Integer ,你可能会在xl2007 +中发生溢出错误

最后一件事。 您的Cells对象不完全可以给你错误。 完全符合资格。 例如(注意DOTS)

 Set myrng1 = ThisWorkbook.Sheets("Sheet1").Range("B3:B" & LastRow) 

要么

 With ThisWorkbook.Sheets("Sheet1") Set myrng1 = .Range("B3:" & _ .Cells(LastRow, 2).Address( _ rowabsolute:=False, _ columnabsolute:=False) _ ) End With 

编辑感谢pnuts指出这一点

一旦你解决了上述问题,你将面临更多的问题。 例如"=SUMIF(myrng1,RC[-1],myrng2)""之间的任何东西都将被视为一个string,你可能想用这个来代替

 "=SUMIF(" & myrng1.Address & ",RC[-1]," & myrng2.Address & ")" 

同样,你可能想要使用.Address而没有上面提到的“$”。

还有一件事。 如果第30行是lastrow那么您可以一次填充所有单元格中的公式,而不是使用“ AutoFill请参阅此示例

 With ThisWorkbook.Sheets("Sheet1") .Range("B15:B30").Formula = "=SUMIF(" & _ myrng1.Address & _ ",A15," & _ myrng2.Address & ")" End With 

要么

 With ThisWorkbook.Sheets("Sheet1") .Range("B15:B" & lastrow).Formula = "=SUMIF(" & _ myrng1.Address & _ ",A15," & _ myrng2.Address & ")" End With 

此外,我想提请你注意这个有趣的阅​​读 :页

如果Cells(LastRow, 2)内容不是有效的单元格引用(如B3),则该方法将失败。

如果要使用.Cells(LastRow, 2)的地址, .Cells(LastRow, 2)其replace为.Cells(LastRow, 2).Address(rowabsolute:=False, columnabsolute:=False)

编辑:你也可以使用.Address没有参数,但你会得到像$ A $ 1(绝对引用)。