2011-07-27 53 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