2014-01-29 112 views
2

我想提出一个整数myrng1使用变量定义整型失败的范围Excel宏

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错误

回答

4

最简单的方法来做到这一点是

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

不然,如果你想跟着你的方法,然后伯纳德所提到的,使用.Address属性。

更改您的代码

​​

或这里面做同样的事情。

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)""之间的任何内容都将被视为字符串。你可能想再次使用这个代替

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

+0

嗨,非常感谢您给我的帮助,但是无论何时我尝试运行编辑部分,它给我一个运行时错误1004,应用程序定义或obj等定义的错误。任何帮助? –

+0

你能用最新的代码更新你的问题吗?也让我们知道哪条线给你错误 –

1

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

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

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

+0

+ 1很好地解释 –