VBA代码不替换FormulaArray

时间:2016-02-18 16:35:09

标签: excel vba excel-vba

我的Excel中的列在VBA代码中具有FormulaArray格式的长函数。我的VBA代码将此长数组函数复制到此列中的单元格。

由于数组函数中的字符数超过255,我将公式字符串分解为两部分:

StrForm是整个公式的字符串,StrInner1是此StrForm的第一个内部部分,StrInner2StrForm的第二个内部部分

tmp1tmp2是两个临时参数,我会在下一步中将其替换为StrInner1StrInner2

我没有收到任何错误,此代码将StrForm成功复制到单元格D2。但它不会将"tmp1";"tmp2"替换为StrInner1StrInner2。任何人都可以看到这个原因出了什么问题我不能......

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

1 个答案:

答案 0 :(得分:1)

更改这两行:

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"

您正在替换FormulaArray中的文字,而不是本地版本,因此逗号始终是字段分隔符。

同样改变:

Sheets("Sheet1").Range("D2").Replace What:="""tmp2""", Replacement:=StrInner2, lookat:=xlPart

同样的问题 - 您正在尝试替换;并且它不存在。避免它的最佳方法是从搜索模式中删除它,并从StrInner2中删除它,只需替换占位符。

有趣的是,当您替换FormulaArray中的文本并且结果不是有效的公式时,没有错误消息,但FormulaArray保持不变