VBA代码不会replaceFormulaArray中的string

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

由于数组函数中的字符大于255,因此我将公式string分解为两部分:

StrForm是整个公式的string, StrInner1StrInner1的第一个内部部分, StrInner2StrInner2的第二个内部部分。

tmp1tmp2是两个临时参数,我将其replace为StrInner1StrInner2

我没有得到任何错误,这段代码将StrForm成功复制到单元格D2 。 但是它不能用StrInner1StrInner2代替"tmp1";"tmp2" 。 任何人都可以看到这个原因有什么问题,我不能…

 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 

改变这两行:

 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" 

您正在replaceFormulaArray文本,它不是本地版本,所以逗号总是字段分隔符。

另外改变:

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

同样的问题 – 你正试图取代; 它不存在。 最好的方法是从search模式和StrInner2删除它,只需replace占位符即可。

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