我有一个输入页面,用户可以在其中确定所需的帐户数量以及将在概述页面上显示的帐户数量。有六种不同类型的帐户。我使用Copy属性完成了这个。我的代码一次粘贴六种类型中的每一种。
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属性,但我一直得到&#34; Object Required&#34;
有什么想法? 如果有人对如何实现这一目标有更好的了解,我愿意改变我的代码。谢谢!
更新10FEB15
错误代码是&#34;不匹配&#34;在注释行:
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 :(得分: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)"