2011-07-27 57 views
1

我是VBA的新手,希望添加两个值。我的代码是:在Excel中添加两个值,VBA

Cells(7 + i + 1, 6).Select 

sum1 = "=SUMIFS('[" + strFil_1 + "]Tooling forecast template'!R6C20:R500C20,'[" + strFil_1 + "]Tooling forecast template'!R6C7:R500C7,""=ME1"", '[" + strFil_1 + "]Tooling forecast template'!R6C5:R500C5,""=Test Tool"", '[" + strFil_1 + "]Tooling forecast template'!R6C13:R500C13,""=" + ArrME1(i) + """, '[" + strFil_1 + "]Tooling forecast template'!R6C6:R500C6,""<>Actual tool/equipment change"", '[" + strFil_1 + "]Tooling forecast template'!R6C23:R500C23,""<>Cancelled"", '[" + strFil_1 + "]Tooling forecast template'!R6C23:R500C23,""<>Not Ordered"")" 

sum2 = "=SUMIFS('[" + strFil_1 + "]Tooling forecast template'!R6C20:R500C20,'[" + strFil_1 + "]Tooling forecast template'!R6C7:R500C7,""=ME1"", '[" + strFil_1 + "]Tooling forecast template'!R6C5:R500C5,""=Hard Tool"", '[" + strFil_1 + "]Tooling forecast template'!R6C13:R500C13,""=" + ArrME1(i) + """, '[" + strFil_1 + "]Tooling forecast template'!R6C6:R500C6,""<>Actual tool/equipment change"", '[" + strFil_1 + "]Tooling forecast template'!R6C23:R500C23,""<>Cancelled"", '[" + strFil_1 + "]Tooling forecast template'!R6C23:R500C23,""<>Not Ordered"") " 

ActiveCell.FormulaR1C1 = sum1 + sum2 

我之所以总和是因为如果我把它作为一个表达式,那么行将过大和VBA并不得当分成两行,如果这是可能请张贴,以及。

我用上面的代码得到的错误是它只显示TRUE或FALSE而不是实际的总和。

+0

我建议不硬编码的所有工作表名称和值,并找到一个更灵活的解决方案(不知道你在做什么)。你的文件中的一个小改动将会破坏这段代码。 – aevanko

+0

我还建议在最后一段代码上运行一个断点,运行你的函数,并在添加它们之前查看sum1和sum2的值。这可以帮助您确定问题发生的位置。 – aevanko

回答

1

如果你想要的是的总和这两个公式的结果,那么我建议将实际公式放入两个实际单元格并添加结果。说一个“硬工具”的结果,另一个是“测试工具”的结果。

另外,如果你想运行里面VBA的SUMIFS()功能,那么你可以用像这样做(在第一部分中,未测试)

With Workbooks(strFil_1).Worksheets("Tooling forecast template") 
    sum_range = Range(.Cells(6, 20), .Cells(500, 20)) 
    criteria_range1 = Range(.Cells(6, 7), .Cells(500, 7)) 
    criteria_range2 = Range(.Cells(6, 5), .Cells(500, 5)) 
    criteria_range3 = Range(.Cells(6, 13), .Cells(500, 13)) 
    criteria_range4 = Range(.Cells(6, 6), .Cells(500, 6)) 
    criteria_range5 = Range(.Cells(6, 23), .Cells(500, 23)) 
End With 

sum1 = Application.WorksheetFunction.SumIfs(_ 
     sum_range, _ 
     criteria_range1, "ME1", _ 
     criteria_range2, "Test Tool", _ 
     criteria_range3, ArrME1(i), _ 
     criteria_range4, """<>Actual tool/equipment change""", _ 
     criteria_range5, """<>Cancelled""", _ 
     criteria_range5, """<>Not Ordered""" _ 
     ) 
+0

谢谢,我给你的答案,但真的没有更简单的方法来添加两个字符串的整数值?! – Jonas

+1

@Jonas - VBA没有(不能!)知道这些字符串应该被视为工作表公式。他们可能就是“Jo”和“nas”。请记住,VBA是所有Office应用程序的通用自动化工具(实际上它只是嵌入式的Visual Basic 6.0) - 它不是Excel专用的宏语言。 –

0

不知道你正在尝试做什么,但sum1和sum2显然是字符串。
因此,在有源单元的最后一行存储包含2点其它式的级联式:"=sum1string=sum2string"

如果两个公式是相同的字符串,则返回TRUE确实是正确的计算。

我建议你养成在每个程序的顶部添加OPTION EXPLICIT的习惯。这会迫使你去调整你的变量。例如,如果您将sum1作为单独一个,您将立即发现您的错误。

你可能会得到一个更好的结果:

sum2 = "+SUMIFS(...." 
ActiveCell.FormulaR1C1 = sum1 & sum2 

或者,你可以尝试评估或[]你SUM1和SUM2:

ActiveCell.FormulaR1C1 = [sum1] + [sum2] 
+0

阿哈,我怎么改变,所以我得到他们两个的总和?如果我用一个总和写入单元格,例如sum1,我会得到一个数字。当我做sum1 + sum2时,为什么我没有得到一个数字? – Jonas

+0

谢谢,但它不工作,只给布尔答案再次.. – Jonas

+0

好吧,让我改述我的问题,因为加2总和只是工作。你如何将这两笔款项只写成一笔?我需要将字符串分成两行。 – Jonas