【发布时间】:2016-05-30 23:00:35
【问题描述】:
我的 Excel 中的一列在 VBA 代码中具有 FormulaArray 格式的长函数。我的 VBA 代码将此长数组函数复制到此列中的单元格。
由于数组函数中的字符超过255个,我将公式字符串分解为两部分:
StrForm是整个公式的字符串,StrInner1是这个StrForm的第一个内部部分,StrInner2是StrForm的第二个内部部分。
tmp1和tmp2是两个临时参数,我在下一步用StrInner1和StrInner2替换它们。
我没有收到任何错误,此代码成功地将StrForm 复制到单元格D2。但它不会将"tmp1" 和;"tmp2" 替换为StrInner1 和StrInner2。任何人都可以看到这是什么问题,因为我无法...
Sub test()
Dim StrForm, StrInner1, StrInner2 As String
StrInner1 = "$A$2=Sheet2!B2;$A$3=Sheet2!B2;$A$4=Sheet2!B2;$A$5=Sheet2!B2;$A$6=Sheet2!B2;$A$7=Sheet2!B2;$A$8=Sheet2!B2"
StrInner2 = ";$A$9=Sheet2!B2;$A$10=Sheet2!B2;$A$11=Sheet2!B2;$A$12=Sheet2!B2;$A$13=Sheet2!B2;$A$14=Sheet2!B2;$A$15=Sheet2!B2"
StrForm = "=IF(IF(OR(""tmp1"";""tmp2"");Sheet2!A2;"""")=0;"""";IF(OR(""tmp1"";""tmp2"");Sheet2!A2;""""))"
Sheets("Sheet1").Range("D2").FormulaLocal = StrForm
Sheets("Sheet1").Range("D2").FormulaArray = Sheets("Sheet1").Range("D2").Formula
Sheets("Sheet1").Range("D2").Replace What:="""tmp1""", Replacement:=StrInner1, lookat:=xlPart
Sheets("Sheet1").Range("D2").Replace What:=";""tmp2""", Replacement:=StrInner2, lookat:=xlPart
' StrInner1 and StrInner2 will be next to each other, so I also remove the semicolon between tmp1 and tmp2
End Sub
【问题讨论】:
-
我们早已远离 16 位计算。 VBA 中的字符串应该接受超过 256 个字符 :)
-
@krishKM 当您使用常规
Formula发送公式时,超过 255 个字符没有问题。但FormulaArray有一些特别之处,它会出错。可能是因为数组函数是多维计算,只是为了限制这种多维计算。