2016-02-10 4 views
0

У меня есть страница ввода, где пользователь может определить количество необходимых им учетных записей и которое будет отображаться на странице обзора. Существует шесть разных типов учетных записей. Я выполнил это с помощью свойства Copy. Мой код вставляет каждый из шести типов по одному.VBA Вставить коррелирующую формулу массива в ячейку

With Sheet4 
    .Range("B9", .Cells(Rows.Count, "C").End(xlUp)).Copy Sheet7.[A4] 
End With 

Далее, для каждой строки мне нужно вставить указанную формулу для каждой учетной записи. Я сделал это так:

'then count sheet7 col a 
qRow = wsA.Cells(Rows.Count, 1).End(xlUp).Row 
'paste the formula 
Dim q As Long 
For q = 2 To qRow 
    If wsA.Cells(q, 1).Value > 1000 Then 
     wsA.Cells(q, 5).Value = "=sum(2+1)" 
    End If 
    Next q 

До сих пор так хорошо. Моя проблема возникает на данном этапе, потому что следующая фактическая формула мне нужно вставить, и она должна быть ARRAY формула:

=SUM(SUMIFS(B!$D:$D,B!$E:$E,$A5,B!$B:$B,">="&E$2,B!$B:$B,"<"&F$2)*1,SUMIFS(B!$D:$D,B!$F:$F,$A5,B!$B:$B,">="&E$2,B!$B:$B,"<"&F$2)*-1) 

Я пытался баловаться с собственностью .formulaArray, но я продолжал получать «объект Требуется "

Любые мысли? Я открыт для изменения своего кода, если у кого-то есть лучшая идея о том, как это сделать. Благодаря!

UPDATE 10FEB15

Код ошибки "Несоответствие" на комментировал линии:

If wsA.Cells(q, 1).Value > 1000 Then 
     'wsA.Cells(q, 5).FormulaArray = "=SUM(SUMIFS(B!$D:$D,B!$E:$E,$A5,B!$B:$B," >= "&E$2,B!$B:$B," < "&F$2)*1,SUMIFS(B!$D:$D,B!$F:$F,$A5,B!$B:$B," >= "&E$2,B!$B:$B," < "&F$2)*-1)" 
    End If 

РЕШЕНИЕ: В VBA мы маскировать двойные кавычки, повторяя их.

Dim s As String 
's = "He said: "This is a quote." But this is not a valid string literal" 
s = "He said: ""This is a quote."" This is a valid string literal" 

Обычно редактор VBA распознает такие недопустимые строковые литералы. Но здесь я сбивал с толку операторов сравнения.

Для строкового литерала в формуле мне потребовались двойные кавычки. Полный ответ ниже.

+0

Пожалуйста показать строку кода, которая бросает ошибку «Требуется объект». '.FormulaArray =" = SUM (SUMIFS (B! $ D: $ D, B! $ E: $ E, $ A5, B! $ B: $ B, ""> = "" & E $ 2, B! $ B : $ B "" < "" & F $ 2) * 1, СУММЕСЛИМН (В $ D: $ D, B $ F: $ F, $ А5, В $ B: $ B ""> = "" & E $ 2, B! $ B: $ B, "" <"" и F $ 2) * - 1) "работает для меня. –

+0

Это именно он, вам нужно использовать двойные кавычки '' '', если вам нужны цитаты в формуле. – Raystafarian

ответ

0

Если строковый литерал заключен в двойные кавычки, и нам нужны двойные кавычки в строковом литерале, мы должны каким-то образом маскировать эти двойные кавычки. Если мы этого не сделаем, разоблаченная двойная кавычка закончит строковый литерал. Это относится ко всем языкам программирования.

В VBA мы маскируем двойные кавычки, повторяя их.

Dim s As String 
's = "He said: "This is a quote." But this is not a valid string literal" 
s = "He said: ""This is a quote."" This is a valid string literal" 

Обычно редактор VBA распознает такие недопустимые строковые литералы. Но здесь вы смешиваете его с операторами сравнения.

s = "Sting literal 1" >= "Sting literal 2" 

Так s будет строковое представлением логического значения FALSE, так как сравнение ложно.

Ниже будет работать:

.FormulaArray = "=SUM(SUMIFS(B!$D:$D,B!$E:$E,$A5,B!$B:$B,"">=""&E$2,B!$B:$B,""<""&F$2)*1,SUMIFS(B!$D:$D,B!$F:$F,$A5,B!$B:$B,"">=""&E$2,B!$B:$B,""<""&F$2)*-1)" 
+0

А, спасибо за объяснение! Да, сейчас работаю. К сожалению, это представило мне новую проблему. Но это еще один вопрос. Потрясающие –

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