2015-09-04 4 views
1

У меня есть фрагмент кода, который зацикливает колонку и вставляет формулу в каждую ячейку в этом столбце. Код запускается, единственные проблемы в том, что каждая ячейка вставляется в формулу #Value! Кто-нибудь знает, как это исправить? Вот фрагмент кода с проблемой:#Value! ошибка при написании формулы

Dim j As Long 

'Loop down the rows in mainfile 

For j = 2 To lastFullRow2 


' Make each argument a string, then concatenate it all all into large string 

    Dim firstArgument As String 
    firstArgument = "ws_multidax.Range(" & valuecolumnLetter & "2:" & valuecolumnLetter & lastFullRow1 & ")" 

    Dim secondArgument As String 
    secondArgument = "ws_multidax.Range(" & parameter1columnLetter & "2:" & parameter1columnLetter & lastFullRow1 & ")" 


    Dim thirdArgument As String 
    thirdArgument = "ws_multidax.Range(" & parameter2columnLetter & "2:" & parameter2columnLetter & lastFullRow1 & ")" 

    Dim fourthArgument As String 
    fourthArgument = "ws_multidax.Range(" & parameter2columnLetter & "2:" & parameter2columnLetter & lastFullRow1 & ")" 

    Dim condition3 As String 
    condition3 = "ws_mainfile.Range(" & "D2:" & D & j & ")" 


    Dim patid1 As String 
    patid1 = "ws_multidax.Range(" & "D2:" & D & lastFullRow2 & ")" 

     With ws_mainfile 

Dim commandstring As String 

'The formula we want is a concatenated string 

commandstring = "{=INDEX(" & firstArgument & ",MATCH(1,(" & secondArgument & "=" & condition1 & ")*(" & thirdArgument & "=" & condition2 & ")*(" & patid1 & "=" & condition3 & "),0))}" 

'Insert the formula into each cell as the loop goes down the rows 

ws_mainfile.Range("AN" & j).Formula = Eval(commandstring) 
'ws_mainfile.Range("AN" & j).Formula = commandstring 

     End With   

Next j 

#value! попадает в ячейки, когда я запускаю строку с Eval (commandstring). Когда я запускаю строку только с формулой = commandstring, формула помещается в каждую ячейку, но она не решает.

ответ

3

Ваш код имеет 2 проблемы:

  1. Вы помещаете в фигурных скобках формулы массива вручную, не делает этот
  2. Вы помещаете в формуле массива в качестве регулярной формулы

Так исправить, выполните следующие действия:

'1. Change this line: 
commandstring = "{=INDEX(....)}" 

'And simply remove the curly braces {} from its beginning and end 
commandstring = "=INDEX(....)" 


'2. Change this line: 
ws_mainfile.Range("AN" & j).Formula = Eval(commandstring) 

'To use the .FormulaArray property instead of just .Formula: 
ws_mainfile.Range("AN" & j).FormulaArray = commandstring 
+0

Когда я делаю это, я получаю приложение или объект определенных ошибок в строке: .FormulaArray = commandstring – sunstache32

+0

Это потому, что, как вы определили свои аргументы. Вы определили их как диапазоны VBA, такие как диапазоны рабочих листов, которые относятся к типу 'SheetName! A1: A10', или если у ваших листов есть пробелы, это будет' 'Имя листа'! A1: A10' и конечно, если вы хотите абсолютную ссылку (не изменится по мере того, как формула будет скопирована в другие строки или столбцы), вам нужно использовать символ $, чтобы это произошло: '' Имя листа! $ A $ 1: $ A $ 10 '. После того как вы скорректировали все свои аргументы, чтобы содержать ссылки на допустимые формулы, а не ссылки на диапазон VBA, вы больше не получите эту ошибку. – tigeravatar

+0

Прохладный, спасибо! Но когда диапазоны определены с помощью строк, подобных моим, как бы добавить имя листа? Я просто делаю «Range» («Sheet1! & ValuecolumnLetter ..)? – sunstache32

0

Вы находитесь на RIGH трек. Нет необходимости использовать функцию eval, поскольку вы создали строчную формулу в коде. Проблема в том, что вы окружили его фигурными скобками, которые превосходят удовольствие, как будто вы ввели текст.

Попробуйте вместо этого:

commandstring = "=INDEX(" & firstArgument & ",MATCH(1,(" & secondArgument & "=" & condition1 & ")*(" & thirdArgument & "=" & condition2 & ")*(" & patid1 & "=" & condition3 & "),0))" 

'Insert the formula into each cell as the loop goes down the rows 

ws_mainfile.Range("AN" & j).Formula = commandstring 
Смежные вопросы