2016-02-18 33 views
1

我的Excel中的列在VBA代码中具有格式为FormulaArray的长功能。我的VBA代码将此长数组函数复制到此列中的单元格。VBA代码不会替换FormulaArray中的字符串

由于在阵列功能的字符比255以上,我砸开式串成两块为:

StrForm是整个式字符串,StrInner1是本StrForm的第1内部件和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 
+0

我们早就搬离16位计算了。在VBA中的字符串应该接受超过256个字符:) –

+0

@krishKM当您使用常规的“公式”发送公式时,那么超过255个字符不成问题。但是对于'FormulaArray'来说它是特殊的,它会给出错误。也许是因为数组函数是一个多维计算,只是为了限制这个多维计算。 – user3714330

回答

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,它不是本地版本,因此逗号始终是字段分隔符。

而且改变:

​​

同样的问题 - 你试图取代;,它不存在。避免它的最佳方法是将其从搜索模式中删除,并从StrInner2中简单地替换占位符。

有趣的事情是,当你在FormulaArray替换文本,结果是不是有效的配方,没有错误消息,但FormulaArray保持不变

+0

非常感谢:)我很惊讶,为什么微软为不同的语言开发了不同的Excel。它应该是通用的逗号或分号。 – user3714330