在vba中将excel公式声明为常量
我在这里得到了一些帮助,可以在vba中将公式声明为常量。我有大约十个公式,它们都是关于一个主题的类似变体。我已经设置了9个,它们工作得很好。下面的一个抛出运行时错误(运行时错误“1004”;应用程序定义的错误或对象定义的错误)在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
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。谢谢,我一直在试图找到一种方法,将函数中的公式转换为声明的公式。