我有以下代碼,它循環訪問某些單元格並使用值填充它們。它工作正常,除了現在我試圖跟蹤一行中所有填充的單元格的總值。在填充一行後,我想知道所填充單元格的總數是否與當前行(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
嘗試使用調試器,並觀看a.Value'和'oAllocated'的'真實值。也許類型不匹配。你也可以嘗試使用'Value2'而不是'Value'。 爲什麼在'MsgBox'中將'a.Value'作爲'Single'並且不處於您的狀態? – ZwoRmi
如果ZwoRmi的建議沒有解決它,請在立即窗口中輸入以下內容:?? TypeName(a.Value)'和'? a.Value <> oAllocated'並告訴我們結果。 – Vegard
這可能是一個浮點錯誤。嘗試四捨五入:'If Round(a.Value,5)<> Round(oAllocated,5)Then' – Rory