我在网上搜索了一个解决方案,并多次重新编码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, 威廉
答案 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 ...
输入公式并不容易