无法在Excel VBA中添加两个数字

我有以下代码。 当我尝试添加两个数字时,我得到一个零:

Public Function getCategory(Value As String, Optional col As Long = 1) As String Sheets("Product Master").Select Range("A2").Select Dim I As Long Do Until Selection.Value = Value ActiveCell.Offset(1, 0).Select Loop getCategory = Selection.Value End Function Sub Calculate() Dim furnitureTotal As Double Dim furQuantity As Integer furnitureTotal = 0 furQuantity = 0 Dim applianceTotal As Double Dim appQuantity As Integer applianceTotal = 0 appQuantity = 0 Dim whiteGoodsTotal As Double Dim whiteGoodQuantity As Integer whiteGoodQuantity = 0 whiteGoodsTotal = 0 Dim softFurTotal As Double Dim softFurQuantity As Integer softFurTotal = 0 softFurQuantity = 0 Dim description As String Dim total As Double Dim quantity As Integer Sheets("Invoice").Select Range("F64").Select Do Until (ActiveCell.Value = "Finish" Or ActiveCell.Value = "") description = ActiveCell.Value ActiveCell.Offset(0, 1).Select quantity = Selection.Value ActiveCell.Offset(0, 6).Select total = Selection.Value If (getCategory(description) = "Furniture") Then furnitureTotal = furnitureTotal + Val(total) <---------- this line furQuantity = furQuantity + quantity End If If getCategory(description) = "Electronics" Then applianceTotal = applianceTotal + total appQuantity = appQuantity + quantity End If If getCategory(description) = "White Goods" Then whiteGoodsTotal = whiteGoodsTotal + total whiteGoodQuantity = whiteGoodQuantity + quantity End If If getCategory(description) = "Soft Furnishings" Then softFurTotal = softFurTotal + total softFurQuantity = softFurQuantity + quantity End If Sheets("Invoice").Select ActiveCell.Offset(1, -7).Select Loop Sheets("Invoice").Select <---------------------- breakpoint was placed here Range("L24").Select Selection.Value = furQuantity ActiveCell.Offset(0, 1).Select Selection.Value = furnitureTotal Range("L25").Select Selection.Value = appQuantity ActiveCell.Offset(0, 1).Select Selection.Value = applianceTotal Range("L26").Select Selection.Value = whiteGoodQuantity ActiveCell.Offset(0, 1).Select Selection.Value = whiteGoodsTotal Range("L27").Select Selection.Value = softFurQuantity ActiveCell.Offset(0, 1).Select Selection.Value = softFurTotal End Sub 

当每个描述都属于家具类别时,我运行这个代码。 当我运行它时,所有variables的值保持为0.当我打开debugging器并查看variables的值时,它显示了variables的值:

 Line: `furnitureTotal = furnitureTotal + Val(total)` Values: 0 0 1750 

我不明白为什么它不添加两个double值。 这与variables的生命周期有关吗?

2我看到的东西 – 你使用total ,但这是一个关键字用在一个listcolumn对象,你可以重复调用getcategory,当一个vlookup可以代替代码。

这里是稍微改写的代码:

 Sub Calculate() Dim furnitureTot As Double Dim furQuantity As Integer Dim applianceTot As Double Dim appQuantity As Integer Dim whiteGoodsTot As Double Dim whiteGoodQuantity As Integer Dim softFurTot As Double Dim softFurQuantity As Integer Dim description As String Dim Tot As Double Dim quantity As Integer furnitureTot = 0 furQuantity = 0 applianceTot = 0 appQuantity = 0 whiteGoodQuantity = 0 whiteGoodsTot = 0 softFurTot = 0 softFurQuantity = 0 Sheets("Invoice").Select Range("F64").Select Do Until (ActiveCell.Value = "Finish" Or ActiveCell.Value = "") description = Application.WorksheetFunction.VLookup(ActiveCell.Value, Range("'Product Master'!A2:B9999"), 2, False) ' lookup value, rather than do it repeatedly, and use built in function ActiveCell.Offset(0, 1).Select quantity = Val(Selection.Value) ' try to get number, even if it's input as text ActiveCell.Offset(0, 6).Select Tot = Val(Selection.Value) Select Case description ' only 1 test needed Case "Furniture" furnitureTot = furnitureTot + Tot furQuantity = furQuantity + quantity Case "Electronics" applianceTot = applianceTot + Tot appQuantity = appQuantity + quantity Case "White Goods" whiteGoodsTot = whiteGoodsTot + Tot whiteGoodQuantity = whiteGoodQuantity + quantity Case "Soft Furnishings" softFurTot = softFurTot + Tot softFurQuantity = softFurQuantity + quantity End Select Sheets("Invoice").Select ActiveCell.Offset(1, -7).Select Loop Sheets("Invoice").Select Range("L24").Select Selection.Value = furQuantity ActiveCell.Offset(0, 1).Select Selection.Value = furnitureTot Range("L25").Select Selection.Value = appQuantity ActiveCell.Offset(0, 1).Select Selection.Value = applianceTot Range("L26").Select Selection.Value = whiteGoodQuantity ActiveCell.Offset(0, 1).Select Selection.Value = whiteGoodsTot Range("L27").Select Selection.Value = softFurQuantity ActiveCell.Offset(0, 1).Select Selection.Value = softFurTot End Sub 

这不是一个真正的答案,但我不知道如何发布这个。

您可以通过使用SUMIF函数一起避免VBA。

例如,使用L24中的以下内容replace家具使用的实际代码(如果不是家具)。

 =SUMIF(F:F,"Furniture",G:G) 

使用这个,你将不需要再次计算该单元格,因为该公式将为您处理。 您可以使用相似的公式更新所有其他计算的单元格,不再需要运行macros。

只要F列中没有完全“家具”的行,不应包含具有相应值的行,此特定公式就会给出正确的结果。 如果你这样做,只需手动input一个合理的范围。

另外你的函数getCategory不会做任何有用的事情。 正如所写的,它将返回提供的值(它返回所选单元格的值,如果所选单元格与提供的值相同)或者循环,直到最终得到运行时错误以尝试select一个单元格不存在。