Добавление двух значений в Excel, VBA - PullRequest
1 голос
/ 27 июля 2011

Я новичок в 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, а не фактическую сумму.

Ответы [ 2 ]

1 голос
/ 27 июля 2011

Если вы хотите получить сумму результатов двух формул, я бы предложил поместить фактические формулы в две фактические ячейки и добавить результаты.Назовите один результат «Hard Tool», а другой - «Test Tool», скажем.

В качестве альтернативы, если вы хотите запустить функцию SUMIFS() внутри VBA, вы можете сделать это с чем-тонравится (для первой части, не проверено)

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 голосов
/ 27 июля 2011

Не знаю, что вы пытаетесь сделать, но sum1 и sum2, очевидно, являются строками.
Поэтому ваша последняя строка сохраняет в активной ячейке формулу, содержащую объединение двух других формул: "=sum1string=sum2string"

Если обе формулы являются одинаковыми строками, возвращаемое ИСТИНА действительно является правильным вычислением.

Я предлагаю вам взять привычку добавлять OPTION EXPLICIT вверху каждой процедуры.Это заставит вас DIM ваши переменные.Например, если вы DIM sum1 как single, вы сразу же поймаете свою ошибку.

Вы можете получить лучший результат с помощью:

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

В качестве альтернативы, вы можете попробовать EVALUATE или [] для вас sum1 и sum2:

ActiveCell.FormulaR1C1 = [sum1] + [sum2]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...