2015-09-23 63 views
0

我有以下代碼,它循環訪問某些單元格並使用值填充它們。它工作正常,除了現在我試圖跟蹤一行中所有填充的單元格的總值。在填充一行後,我想知道所填充單元格的總數是否與當前行(a.value)中存儲在C列中的值不相等。變量比較失敗,但顯示值相同

當我做If/Then比較a.value oAllocated,我得到了一些我不指望的結果和MsgBox似乎顯示相同的值,即使MsgBox正在顯示,因爲Excel說他們不是。

更令人困惑的是,如果我在工作表上的單元格中創建了一個公式,並將行中的條目相加並將其與a.value列進行比較,它們就會匹配!

Dim wsSheet As Worksheet 
Dim oAllocated As Single 


For Each a In wsSheet.Range("C3:C17").Cells 
    If (IsEmpty(a) = False) Then 
     oAllocated = 0 
     For Each b In wsSheet.Range(Cells(Selection.Row, 4), Cells(Selection.Row, 17)) 
      If IsEmpty(Application.WorksheetFunction.VLookup(Cells(b.Row, 1), Sheets("Allowable Activities").Range("A1:Q17"), Application.WorksheetFunction.Match(Cells(1, b.Column), Sheets("Allowable Activities").Range("A1:Q1"), 0), False)) = True Then 
       If b.Value + (a.Value * Application.WorksheetFunction.VLookup(oSheetName, Sheets("Funder Salary Allocation").Range("B1:Q13"), Application.WorksheetFunction.Match(Cells(1, b.Column), Sheets("Funder Salary Allocation").Range("B1:Q1"), 0), False)) > 0 Then 
        b.Offset(0, 24).Value = b.Value + (a.Value * Application.WorksheetFunction.VLookup(oSheetName, Sheets("Funder Salary Allocation").Range("B1:Q13"), Application.WorksheetFunction.Match(Cells(1, b.Column), Sheets("Funder Salary Allocation").Range("B1:Q1"), 0), False)) 
        oAllocated = oAllocated + CSng((b.Value + (a.Value * Application.WorksheetFunction.VLookup(oSheetName, Sheets("Funder Salary Allocation").Range("B1:Q13"), Application.WorksheetFunction.Match(Cells(1, b.Column), Sheets("Funder Salary Allocation").Range("B1:Q1"), 0), False)))) 
       End If 
      End If 
     Next 
     If a.Value <> oAllocated Then 
      MsgBox ("Allocated: " & CSng(a.Value) & " - Dispersed: " & oAllocated) 
     End If 
    End If 
    ActiveCell.Offset(1, 0).Select 
Next 
+1

嘗試使用調試器,並觀看a.Value'和'oAllocated'的'真實值。也許類型不匹配。你也可以嘗試使用'Value2'而不是'Value'。 爲什麼在'MsgBox'中將'a.Value'作爲'Single'並且不處於您的狀態? – ZwoRmi

+0

如果ZwoRmi的建議沒有解決它,請在立即窗口中輸入以下內容:?? TypeName(a.Value)'和'? a.Value <> oAllocated'並告訴我們結果。 – Vegard

+0

這可能是一個浮點錯誤。嘗試四捨五入:'If Round(a.Value,5)<> Round(oAllocated,5)Then' – Rory

回答

0

For Each b In wsSheet.Range(Cells(Selection.Row, 4), Cells(Selection.Row, 17))

我沒有看到「選擇」任何情況下,所以這會產生潛在的不可預知的結果。

+0

這是一個更大的代碼塊的一部分,選擇在我沒有包括在這裏的一個區域中進行。 – Josh

0

我今天剛剛有完全相同的問題。只要你確定你的單元沒有任何額外的空格並且格式相同(這通常會導致這個問題),那麼使用Range()命令。很明顯,Excel不能很好地處理長無限小數。

https://support.microsoft.com/en-us/kb/78113