2016-08-18 84 views
1

我有IF條件如下。 這裏的EntitySum是1.雖然條件不令人滿意,但它被輸入到If循環中。VBA代碼如果條件不滿足,Stlll進入循環

Dim RowCount As Integer 
Dim ColCount As Integer 
Dim m, x As Integer 
Dim EntitySum As Double 
RowCount = Worksheets("Contribution").UsedRange.Rows.Count - 4 
ColCount = Worksheets("Entities").UsedRange.Rows.Count - 4 

m = 4 

'outer loop for Rows 
Do 
EntitySum = 0 
x = 6 
m = m + 1 
    'inner loop for Columns 
    Do 
    x = x + 1 
    EntitySum = EntitySum + Worksheets("Contribution").Cells(m, x).Value 
    Loop Until x = ColCount + 6 
    If EntitySum <> 1 Then 
     MsgBox "The Entity Contribution at Row " & m & " is not 100%. Please Fix it to proceed further." 
     Exit Sub 
    End If 
Loop Until m = RowCount + 4 

enter image description here

它是使用VBA的任何問題?

欣賞您的回覆。

感謝, 麗塔

+0

你是如何定義'EntitySum'? –

+2

如果你已經將它定義爲String/Variant,那麼試試這個If Val(Trim(EntitySum))<> 1 then' –

+0

是的,我定義了EntitySum。 Dim EntitySum As Double – Rita

回答

1

的問題是,即使你的屏幕截圖顯示的EntitySum = 1價值,事實並非如此。這是一個簡單的方法來複制您的問題

在單元格A1中輸入此編號0.00000000000000001。你會看到,Excel會自動格式化爲1E-17

現在試試這個代碼

Sub Sample() 
    Dim EntitySum As Double 

    EntitySum = 1 + Range("A1") 

    If EntitySum <> 1 Then 
     MsgBox "A" 
    End If 
End Sub 

現在EntitySum絕對不等於1,但如果你將鼠標懸停在該變量,它會顯示它作爲1。這是一個浮點問題。 Excel無法處理如此龐大的數字,因此會產生問題。

要理解爲什麼它的行爲就像你的情況,你必須檢查單元格Worksheets("Contribution").Cells(m, x).Value,看看它們有什麼樣的值。

enter image description here