2009-09-14 36 views
1

我想創建一個使用Match函數的預算,但我甚至無法達到這一點,因爲我試圖創建的動態範圍返回錯誤:「應用程序定義或對象定義的錯誤」。爲什麼Excel VBA給我一個動態範圍的錯誤?

有問題的範圍是RNG

Sub Material() 

Dim wSheet As Worksheet 
Dim x, dwIndex, offSet, count, upperLeft, bottomRight, r, wall As Integer 
Dim rng As Range 

x = 0 

For Each wSheet In Worksheets 
    If wSheet.Name = "Drywall Pricing" Then 
     dwIndex = wSheet.Index - 1 
    End If 
Next wSheet 

For i = 1 To dwIndex 
    If Sheets(i).Range("K1").Value > 0 Then 
     count = 9 
     offSet = 41 
     r = 27 
     For wall = 1 To count 
      offSet = (offSet * wall) - (offSet * 1) 
      upperLeft = (r + 16) + offSet 
      bottomRight = (r + 27) + offSet 
      rng = Sheets(i).Range(Cells(upperLeft, 0), Cells(bottomRight, 1)) 
     Next wall 
    End If 
Next i 

End Sub 

沒有人有任何線索的變量RNG是不是有效?任何幫助都會令人害怕,因爲這太荒謬了。

在此先感謝!

回答

2

您需要先設置範圍。

Set rng = Sheets(i).Range(Cells(upperLeft, 0), Cells(bottomRight, 1)) 
2

嘗試:設置 RNG = ..

任何對象分配所需要的SET關鍵字:-)

+0

感謝您的回覆......但使用Set分別返回相同的錯誤 – bschaeffer 2009-09-15 13:50:53

0

什麼是upperLeft,當發生錯誤bottomRight價值?
可以翻譯成現有的範圍嗎?

+0

43和54。 – bschaeffer 2009-09-15 13:49:47

2

除了需要SET之外,您的Cells屬性是不合格的,所以它們會從ActiveSheet返回一個Range。基於您的代碼,我想你想:

With Sheet(i) 
    Set rng = .Range(.Cells(upperLeft, 0), .Cells(bottomRight, 1)) 
End With

注細胞電話前的時期。

+0

需要添加'設置'到您的代碼(它在敘述中,但不是代碼) – barrowc 2009-09-15 00:13:04

+0

哦,男人!複製,粘貼,測試。感謝您的高舉。 – 2009-09-15 01:39:37

+0

感謝您的回覆。我嘗試使用WITH語句中的SET,但它返回相同的錯誤(在CELLS調用之前有或沒有周期)。 – bschaeffer 2009-09-15 13:53:38

0

您還錯誤地聲明瞭第二條語句中的大部分變量。

昏暗的x,y作爲整數

僅y聲明爲一個整數,並且x作爲變體。

+0

謝謝!我修正了這一點。 – bschaeffer 2009-09-15 13:58:58

0

我不確定CELLS調用是對還是錯,但我想出了一種使其工作的方法。

下面是我在用的:

upperLeft = (ref + 16) + (offSet * wall) 
bottomRight = (ref + 27) + (offSet * wall) 
Set rng = Sheets(i).Range("A" & upperLeft & ":B" & bottomRight) 

錯誤停止上述公式發生。

感謝大家的快速回復。第一次我使用了stackoverflow,我認爲這是我最喜歡的事情。

0

另請注意,Match將返回範圍參考而非數值。因此,如果沒有匹配,您將會發生對象錯誤。