2017-01-20 1 views
0

I имеет следующую формулу:лист Функции в Excel VBA с каскадными значениями

dim functionString as String 

functionString = "IFERROR(AND(MATCH(" & FirstName.Value & ",C2:C1048576, 0)>0, (MATCH(" & LastName.Value & ",B2:B1048576, 0)>0)), MAX(A2:A1048576)+1)" 

То, что я хочу быть в состоянии сделать это вызов из кода VBA, так это будет выглядеть.

application.WorksheetFunction(functionString) 

Я знаю, что я могу разместить его на листе в некоторой ячейке, которая никогда не будет использоваться: IE:

Activesheet.range("ZZ1000").formula = "="& functionString 

, а затем ссылаться на эту ячейку, не заботясь, будет ли программа непреднамеренно аварии; но есть ли способ сделать такую ​​формулу из VBA напрямую?

В основном я ищу, чтобы увидеть, являются ли FirstName.Value и LastName.Value (которые определены в другом месте кода) вместе, находятся в рабочем листе в столбце B и столбце C. Когда я пишу это, я понял, что я необходимо убедиться, что они оба находятся в одной строке, а не в разных строках.

+0

Попробуйте 'Application.Evaluate (functionString)'? –

ответ

1

Вы можете попробовать Application.Evaluate(functionString), но в зависимости от сложности может быть лучше использовать функции VBA вместо WorksheetFunctions.

Application.Match функция возвращает тип ошибки, если значение не находится в диапазоне/массив, поэтому мы Dim first, last как тип варианта, чтобы для этого (без повышения об ошибке).

Dim first, last 
' find the row where FirstName.Value appears in column C 
first = Application.Match(FirstName.Value, Columns(3), False)) 
' find the row where LastName.Value appears in column B 
last = Application.Match(LastName.Value, Columns(2), False)) 

If Not IsError(first) And Not IsError(last) Then 
    If first = last Then 
     ' match was found in both columns and on same row 
     ' do something else... 

    End If 
End If 
+0

Функция application.match не появляется, когда приложение напечатано – bdpolinsky

+2

@bdpolinsky, потому что оно связано с поздней задержкой. Это то же самое, что и 'WorksheetFunction.Match', за исключением того, что оно будет * возвращать * значение ошибки вместо * raise * ошибка времени выполнения в случае отсутствия соответствия. –

+0

Спасибо оба. Похоже, что это работает. Еще немного кодирования, но это на следующей неделе. – bdpolinsky

Смежные вопросы