2017-01-04 7 views
0

Мне нужна помощь. Использование Excel 2007. Я даже не уверен, что это можно сделать. Мне нужно поддерживать эффективность и скорость, иначе приложение не будет использоваться.VBA присваивает формулу переменной, затем используйте переменную для оценки Формулы

У меня есть инструкция «IF» для проверки критериев. В зависимости от результатов вы хотите присвоить одну из нескольких возможных формул переменной для последующего использования. Затем мне нужно иметь переменную для оценки формулы, чтобы результат мог быть сохранен во второй переменной для построения массива.

Пример кода:

If (varEmployeeName = "(All)" Or varEmployeeName = "(Multiple Items)") Then 
    **varArrayFormula = "Application.WorksheetFunction.SumIfs(wsSumRange, wsLookupRange, wsLookupValue)"** 
Else 
    **varArrayFormula = "Application.WorksheetFunction.SumIfs(wsSumRange, wsLookupRange, wsLookupValue, wsLookupRange2, varEmployeeName)"** 

Затем Позже этот код будет выполняться:

ReDim varKPIArray(0 To varLastRow) ' creates the array size 

For varCol = 10 To 13 
    For varRow = 8 To varLastRow 
     varDailyKPIHeading = ws.Cells(7, varCol).Value 
     Select Case varDailyKPIHeading 
      Case "PRODUCTIVITY" 
       Set wsSumRange = ThisWorkbook.Worksheets("DailyProductivity").Range("$G:$G") 
       Set wsLookupRange = ThisWorkbook.Worksheets("DailyProductivity").Range("$F:$F") 
       wsLookupValue = ws.Range("B" & varRow).Value 
       **varSumifValue = Application.Evaluate(varArrayFormula)** 
       varKPIArray(varRow - 8) = varSumifValue 

      Case "HOURS" 

будет цикл через несколько столбцов и строк, следовательно, почему необходимы программы переменные. У меня есть 2 варианта на данный момент: 1) - это построить массив, а затем я могу вставить результаты массива в соответствующие ячейки со вторым циклом. или 2) Как я цикл через каждую ячейку я занесение результатов формулы в ячейку,

Спасибо всем вам за помощью, предложений и идеи

+0

Я испробовал использование "", но это применит формулу к переменной как строку, которую я попытался использовать [], но это затем хочет выполнить формулу и применить результаты к переменной – rchrysler

ответ

1

Используйте это как ваша формулу строки:

"SumIfs(" & wsSumRange.Address(0,0) & "," & wsLookupRange.Address(0,0) & "," & wsLookupValue & ")" 

А:

"SumIfs(" & wsSumRange.Address(0,0) & "," & wsLookupRange.Address(0,0) & "," & wsLookupValue & "," & wsLookupRange2.Address(0,0) & "," & varEmployeeName & ")" 
+0

Спасибо за помощь. Я думаю, что вы, возможно, неправильно поняли. Я хочу найти способ присвоить формулу, если это возможно, переменной для последующего использования, а не результатам формулы. – rchrysler

+0

wsSumRange & wsLookupRange & wsLookupRange2 уже заданы как диапазон, а wsLookupValue & varEmployeeName являются строковыми значениями в качестве критериев суммы. – rchrysler

0

Спасибо всем, кто дал свои предложения и помощь. В конечном итоге я не смог получить что-нибудь на работу и закончил разработку и переписывание кода. Хотелось бы надеяться, что было просто решение применить формулу с переменными к переменной, так что не нужно было переставлять формулу и просто ссылаться на переменную, содержащую формулу. Я выложу свое решение вскоре после того, как код будет завершен и отлажен.