2014-01-29 56 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很好地解釋 –