2011-10-02 51 views
2

我正在嘗試下面的代碼,它反覆拋出'如果沒有如果'和類似的錯誤。我只是不知道錯誤在哪裏,因爲每個if都被正確終止。VBA投擲「其他沒有,如果」錯誤

下面是代碼:

Sub hra_macro() 

Dim city As Boolean 
Dim salary As Integer 
Dim varHRA As Integer 
Dim mimHRA As Integer 
Dim maxHRA As Integer 
Dim A As Integer 
Dim B As Integer 
Dim Rent As Integer 

city = Range("b1").Value 
salary = Range("b2").Value 
Rent = Range("b3").Value 

If city = True Then 

varHRA = 0 

    A = Rent - (salary/10) 
    B = salary * 0.5 
    Do While varHRA < salary 
     varHRA = varHRA + 1 
      If (varHRA < A And varHRA < B) Then 
      minHRA = varHRA 
      End If 
      If (A < varHRA And A < B) Then 
      minHRA = A 
      End If 
      If (B < varHRA And B < A) Then 
      minHRA = B 
      End If 
      If minHRA > maxHRA Then 
      maxHRA = minHRA 
      End If 
    Exit Do 
Else '<<<<<<<<<<<<<<<<<<<< PROBLEM AREA 

varHRA = 0 

    A = Rent - (salary/10) 
    B = salary * 0.4 
    Do While varHRA < salary 
     varHRA = varHRA + 1 
     If (varHRA < A And varHRA < B) Then 
     minHRA = varHRA 
     End If 
     If (A < varHRA And A < B) Then 
     minHRA = A 
     End If 
     If (B < varHRA And B < A) Then 
     minHRA = B 
     End If 
    If minHRA > maxHRA Then 
    maxHRA = minHRA 
    End If 
    Exit Do 
End If 

Range("b4").Value = maxHRA 

End Sub 
+1

請格式化您的代碼,方法是突出顯示它並單擊「{}」按鈕。這次我爲你做了。 – Fionnuala

+0

謝謝。這是我第一次使用該網站。請記住它。 –

回答

8

If看看行不行給我的第一眼,但我注意到,這兩個Do s的缺少Loop

它應該是這樣的:

Do While varHRA < salary 
    'Do Stuff 
Loop 

Exit Do用來退出循環前的While背後的情況是真實的,但你總是需要Loop關鍵字。

如果問題仍然存在,請發佈您收到的確切錯誤消息。


編輯:

我只是想重現您的問題在VBA在MS Access(我沒有安裝這臺機器上的Excel,僅接入):

Public Function Test() 

    If 1 = 0 Then 

     Do While 1 = 0 

      Stop 

     Exit Do 

    Else 

     Stop 

    End If 

End Function 

這段簡單的代碼給了我你得到的完全相同的錯誤信息:

Compile error: Else without If

當我將Exit Do替換爲Loop時,錯誤消失,編譯代碼。

所以,你應該在代碼中用Loop代替Exit Do

+0

您好,先生,確切的信息是'編譯錯誤:否則無'。 –

+2

@Chinmay Kamat:即使您的錯誤消息中沒有提及「Loop」,這似乎也會導致錯誤。再次閱讀我的答案,我添加了一個例子。 –

+1

這絕對是答案,我也測試過,並在Excel中。 – Fionnuala

2

看起來像使用'Exit Do'而不是'Loop'。 '退出'將退出Do循環,這是你想要這樣做的方式嗎?

+0

是的,我希望它發生這種方式。這是問題嗎? –

+2

@Chinmay Kamat:你真的確定你想要這樣發生嗎?如果在沒有某種條件的情況下將'Exit Do'放入循環中,它將**完全退出循環**。所以它根本不會循環,它只是在執行'Do'之後執行一次,直到它遇到'Exit Do'。 –