excel宏使用变量来定义整数失败的范围

时间:2014-01-29 04:01:22

标签: excel excel-vba vba

我正在创建一个由

定义的整数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错误

2 个答案:

答案 0 :(得分:4)

最简单的方法是

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

否则,如果您想按照Bernard提到的方法进行操作,请使用.Address属性。

将您的代码更改为

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

或者它做同样的事情。

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

另外,我希望您已将LastRow声明为Long而非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)""之间的任何内容都将被视为字符串。你可能想要使用它

"=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

此外,我想提请你注意这个INTERESTING READ:p

答案 1 :(得分:1)

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

如果您想使用.Cells(LastRow, 2)的地址,请将其替换为.Cells(LastRow, 2).Address(rowabsolute:=False, columnabsolute:=False)

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