在单元格中输入公式会生成应用程序定义的错误或对象定义的错误

时间:2016-01-25 12:01:27

标签: excel vba excel-vba formula

我在网上搜索了一个解决方案,并多次重新编码VBA。 我最终手动填充了一个字符串(因为我总是错误地计算引号):

PKHNTString = "=SUBSTITUTE(UPPER(AF:AF&AD:AD&AE:AE);" 
PKHNTString = PKHNTString + """ "";""" 
PKHNTString = PKHNTString + """)"

这会产生一个包含以下内容的字符串: = SUBSTITUTE(UPPER(AF:AF& AD:AD& AE:AE);“”;“”) 可以在当地的vars中找到:     :PKHNTString:“= SUBSTITUTE(UPPER(AF:AF& AD:AD& AE:AE);”“;”“)”:String

如果我在单元格中粘贴这个确切的值,它可以工作(删除空格并将所有内容转换为大写),但是当我通过VBA将此公式放在单元格中时:

NWS.Cells(j, 48).Formula = PKHNTString

我收到错误:运行时错误'1004'应用程序定义或对象定义错误。

任何帮助将不胜感激!

TIA, 威廉

2 个答案:

答案 0 :(得分:4)

您在公式中指定了分号(;)作为参数分隔符。通过VBA,无论当前的区域设置如何,您都需要使用逗号。然而,.FormulaLocal确实需要列表分隔符的本地化版本。

因为区域设置可以并且将在PC之间变化,所以最好使用.Formula成员而不是.FormulaLocal - 否则您必须使用代码来确定要使用的正确列表分隔符(可以使用某些API完成) calle,但它比使用.Formula更多的工作。

因此,要么使用.FormulaLocal,要么替换“;”用“,”(推荐)。

答案 1 :(得分:0)

你必须逃避PKHNTString中的每个内部“(引号)。现在,VBA试图插入=SUBSTITUTE(UPPER(AF:AF&AD:AD&AE:AE);作为公式而不知道;"")是什么。在将公式插入到单元格,您的PKHNTString必须是:

"=SUBSTITUTE(UPPER(AF:AF&AD:AD&AE:AE);"" "";"""")"

使用“via VBA ...

输入公式并不容易