У меня есть фрагмент кода, который зацикливает колонку и вставляет формулу в каждую ячейку в этом столбце. Код запускается, единственные проблемы в том, что каждая ячейка вставляется в формулу #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, формула помещается в каждую ячейку, но она не решает.
Когда я делаю это, я получаю приложение или объект определенных ошибок в строке: .FormulaArray = commandstring – sunstache32
Это потому, что, как вы определили свои аргументы. Вы определили их как диапазоны VBA, такие как диапазоны рабочих листов, которые относятся к типу 'SheetName! A1: A10', или если у ваших листов есть пробелы, это будет' 'Имя листа'! A1: A10' и конечно, если вы хотите абсолютную ссылку (не изменится по мере того, как формула будет скопирована в другие строки или столбцы), вам нужно использовать символ $, чтобы это произошло: '' Имя листа! $ A $ 1: $ A $ 10 '. После того как вы скорректировали все свои аргументы, чтобы содержать ссылки на допустимые формулы, а не ссылки на диапазон VBA, вы больше не получите эту ошибку. – tigeravatar
Прохладный, спасибо! Но когда диапазоны определены с помощью строк, подобных моим, как бы добавить имя листа? Я просто делаю «Range» («Sheet1! & ValuecolumnLetter ..)? – sunstache32