2014-01-07 207 views
0

我在For循環中使用If語句時遇到了一些麻煩。每個循環的Excel VBA

下面是代碼:

Private Sub Worksheet_Calculate() 

Dim rng1 As range 
Dim cell1 As range 
Set rng1 = range("A1") 

Application.EnableEvents = False 

For Each cell1 In rng1 

    While rng1.Rows.Count > 1 

     If cell1.Value >= 6000 And cell1.Value < 8000 Then 
      range("2:5").EntireRow.Hidden = False 
      range("B1:B5").Formula = "=(CEILING($A$10*(1+$A$11+$A$12),5))/4" 
      Set rng1 = rng1.Resize(4) 

     ElseIf cell1.Value >= 4000 And cell1.Value < 6000 Then 
      range("2:3").EntireRow.Hidden = False 
      range("4:5").EntireRow.Hidden = True 
      range("B1:B4").Formula = "=(CEILING($A$10*(1+$A$11+$A$12),5))/3" 
      range("B5:B5").ClearContents 
      Set rng1 = rng1.Resize(3) 

     ElseIf cell1.Value >= 2000 And cell1.Value < 4000 Then 
      range("2:2").EntireRow.Hidden = False 
      range("3:5").EntireRow.Hidden = True 
      range("B1:B3").Formula = "=(CEILING($A$10*(1+$A$11+$A$12),5))/2" 
      range("B4:B5").ClearContents 
      Set rng1 = rng1.Resize(2) 

     ElseIf cell1.Value >= 0 And cell1.Value < 2000 Then 
      range("2:5").EntireRow.Hidden = True 
      range("B1:B1").Formula = "=(CEILING($A$10*(1+$A$11+$A$12),5))" 
      range("B2:B5").ClearContents 

     End If 
    Wend 
Next 

Application.EnableEvents = True 

末次

基本上我希望它這樣做,但它不能正常工作: 它看起來範圍。如果該範圍的值介於4000和6000之間,則取消隱藏3行,隱藏第4行,將3個可見行設置爲與公式相同的值,並等間劃分3行​​之間的範圍值,清除隱藏行的內容,然後設置它正在查看的原始範圍等於可見行的範圍(這是我認爲在我的邏輯中掛起來的地方)。任何幫助將大大appriciated。

+1

重新分配'範圍'是一個壞主意。 – Bathsheba

+0

如果你的範圍是C1,那麼循環的要點是什麼? – 2014-01-07 14:18:11

+0

抱歉,範圍應該以A1開頭,然後更改爲可見A行的範圍。 Bathsheba,你將如何修改代碼,以便每個循環的範圍都等於基於if語句的可見行的範圍? – Skunny11

回答

0

a)如果單元格A1 = 5000且單元格A2 = 3000,會發生什麼情況?哪個代碼塊將被執行?有衝突嗎? b)你已經使用範圍作爲變量。使用不同的名稱。 「範圍」必須是保留字。必須使用具有R資本的範圍來將某個名稱聲明爲Range對象。

c)我注意到一個A43:A4。這是我猜的錯字 - 應該是A3:A4?

+0

我修正了代碼:A列中將有一個公式= Sum,它基本上只是將具有代碼中公式的可見B列的值相加。 G5是我將改變數字的地方,它會反過來改變B列中公式的結果值,這將反過來改變A列中的值,並有效地改變範圍正在查看的值。我只是用「範圍」作爲變量作爲例子,固定在原來的帖子裏。 – Skunny11