在vba中将excel公式声明为常量

在vba中将excel公式声明为常量,vba,excel,Vba,Excel,我在这里得到了一些帮助,可以在vba中将公式声明为常量。我有大约十个公式,它们都是关于一个主题的类似变体。我已经设置了9个,它们工作得很好。下面的一个抛出运行时错误(运行时错误“1004”;应用程序定义的错误或对象定义的错误) Option Explicit Public Const csFORMULA = "=CONCATENATE(""AVABIS"",IF(I2=0,"""",CONCATENATE(UPPER(AlphaNumericOnly(LEFT(I2,3))),UPPER(Alp

我在这里得到了一些帮助,可以在vba中将公式声明为常量。我有大约十个公式,它们都是关于一个主题的类似变体。我已经设置了9个,它们工作得很好。下面的一个抛出运行时错误(运行时错误“1004”;应用程序定义的错误或对象定义的错误)

Option Explicit
Public Const csFORMULA = "=CONCATENATE(""AVABIS"",IF(I2=0,"""",CONCATENATE(UPPER(AlphaNumericOnly(LEFT(I2,3))),UPPER(AlphaNumericOnly(RIGHT(I2,3))))),IF(O2=0,"""",UPPER(AlphaNumericOnly(SUBSTITUTE(O2,""0"","""")))),IF(R2=0,"""",UPPER(AlphaNumericOnly(SUBSTITUTE(R2,""0"","""")))),IF(W2=0,"""",UPPER(AlphaNumericOnly(SUBSTITUTE(W2,""0"","")))),IF(AB2=0,"""",AlphaNumericOnly(SUBSTITUTE(AB2,""0"",""""))),IF(AC2=0,"""",AlphaNumericOnly(SUBSTITUTE(AC2,""0"",""""))),IF(AD2=0,"""",SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(AD2,""-"",""X""),""."",""Y""),""0"",""Z"")),IF(AF2=0,"""",SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(AF2,""-"",""X""),""."",""Y""),""0"",""Z"")),IF(AH2=0,"""",SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(AH2,""-"",""X""),""."",""Y""),""0"",""Z""))))"


Sub AvivaBIS()


    Dim lr         As Long
    Dim cl         As Range
    Dim rng        As Range
    Dim mssg       As String
    Dim ws         As Worksheet

    Application.ScreenUpdating = False
    Set ws = ActiveSheet

    With ws

        lr = .Range("I" & Rows.Count).End(xlUp).Row
        'add the formula to generate the unique key
        Range("B2:B" & lr).Formula = csFORMULA
        Range("B2:B" & lr) = Range("B2:B" & lr).Value


    End With

    Set rng = Nothing
    Set ws = Nothing
    Application.ScreenUpdating = True

End Sub
为了简化我的问题,我删除了上面的其他非必要代码

到目前为止,我已经采取了以下步骤:

尝试将原始公式直接粘贴在工作表中-这很有效

尝试将声明的公式替换为简单的公式(例如A1+A2)-这很有效

仔细检查引号,看我是否有正确的数字-这些看起来不错

从我创建的其他公式中复制了另一个非常类似的公式-这也有效

如果有任何关于我还可以看些什么来解决这个问题的建议,我将不胜感激。当它抛出运行时错误时,有没有办法获得更多信息


一如既往地感谢您抽出时间查看。

您错过了一组空字符串双引号的对折(就在公式中间的W2之后),并且在末尾有一个额外的结束括号

Public Const csFORMULA = "=CONCATENATE(""AVABIS"",IF(I2=0,"""",CONCATENATE(UPPER(AlphaNumericOnly(LEFT(I2,3))),UPPER(AlphaNumericOnly(RIGHT(I2,3))))),IF(O2=0,"""",UPPER(AlphaNumericOnly(SUBSTITUTE(O2,""0"","""")))),IF(R2=0,"""",UPPER(AlphaNumericOnly(SUBSTITUTE(R2,""0"","""")))),IF(W2=0,"""",UPPER(AlphaNumericOnly(SUBSTITUTE(W2,""0"","""")))),IF(AB2=0,"""",AlphaNumericOnly(SUBSTITUTE(AB2,""0"",""""))),IF(AC2=0,"""",AlphaNumericOnly(SUBSTITUTE(AC2,""0"",""""))),IF(AD2=0,"""",SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(AD2,""-"",""X""),""."",""Y""),""0"",""Z"")),IF(AF2=0,"""",SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(AF2,""-"",""X""),""."",""Y""),""0"",""Z"")),IF(AH2=0,"""",SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(AH2,""-"",""X""),""."",""Y""),""0"",""Z"")))"

难道你不能将公式输入到某个隐藏的单元格中,然后复制粘贴到所需的范围吗?这比在区域设置发生变化时输入字符串更安全(列出分隔符)Debug.print常量,然后尝试将其复制/粘贴到B2。是否有错误?我使用的方法是首先使公式作为工作表单元格中的公式正常工作。然后,我将其自身复制到VBE的一行中,并(忽略任何错误消息)使用Ctrl+H将所有“替换为”“。我将修改后的字符串剪切并粘贴到另一组双引号中。HTH。谢谢,我一直在试图找到一种方法,将函数中的公式转换为声明的公式。