单元格公式替换中的Excel VBA错误1004
注意:我是法国人,所以通常我使用法语函数(例如单元格公式替换中的Excel VBA错误1004,excel,vba,excel-formula,Excel,Vba,Excel Formula,注意:我是法国人,所以通常我使用法语函数(例如SI表示IF或SOMME表示SUM),默认的小数分隔符是coma而不是点(例如1.03表示1.03) 我必须替换Excel工作簿中的许多公式,它们都有相同的模板,但我无法使用快速填充工具,因此我尝试为此制作一个宏 首先,下面是单元格当前的外观: ='C:\…\[file1.xlsx]'sheeta$XXa$nna-'C:\…\[file2.xlsx]'sheetb$XXb$nnb 因此,基本上,我想保留这两个地址(我将它们命名为ad1和ad2),以生
SI
表示IF
或SOMME
表示SUM
),默认的小数分隔符是coma而不是点(例如1.03
表示1.03
)
我必须替换Excel工作簿中的许多公式,它们都有相同的模板,但我无法使用快速填充工具,因此我尝试为此制作一个宏
首先,下面是单元格当前的外观:
='C:\…\[file1.xlsx]'sheeta$XXa$nna-'C:\…\[file2.xlsx]'sheetb$XXb$nnb
因此,基本上,我想保留这两个地址(我将它们命名为ad1
和ad2
),以生成以下公式:
=IF(AND(ISNUMBER(VALUE(ad1;“));ISNUMBER(VALUE(ad2;“)));SUM(VALUE(ad1,”);乘积(-1;VALUE(ad2;“));“NA”)
它将以不同格式存储的两个数字相减,如果其中至少有一个不是数字,则显示NA
这是我写的宏:
Sub tmp()
Dim c As Range
Dim adr1 As String
Dim adr2 As String
Dim frm As String
For Each c In Application.Selection.Cells
adr1 = Split(Split(c.Formula, "=")(1), "-'")(0)
adr2 = "'" & Split(Split(c.Formula, "=")(1), "-'")(1)
frm = "=IF(AND(ISNUMBER(VALUE(" & adr1 & ";"".""));ISNUMBER(VALUE(" & adr2 & ";""."")));SUM(VALUE(" & adr1 & ";""."");PRODUCT(-1;VALUE(" & adr2 & ";""."")));""NA"")"
c.Formula = frm
Next
End Sub
错误发生在最后一个操作c.Formula=frm
我已经检查了frm的值,它是好的
我想我的公式有一个Syntax错误,但我找不到。有人能帮我吗
提前谢谢 VBA仅接受美国格式公式。美国格式使用
,
代替代码>
frm = "=IF(AND(ISNUMBER(VALUE(" & adr1 & ",""."")),ISNUMBER(VALUE(" & adr2 & ","".""))),SUM(VALUE(" & adr1 & ","".""),PRODUCT(-1,VALUE(" & adr2 & ","".""))),""NA"")"
将“;”
替换为”,“
我做了更改,但仍然存在相同的问题。以下是行:VBA-frm=“=IF(AND)(ISNUMBER(VALUE)(&adr1&“,”))、ISNUMBER(VALUE)(&adr2&“,”)、SUM(VALUE)(&adr1&“,”)、乘积(-1、VALUE(&adr2&“,”)、“NA”)”
请显示frm的结果:frm=“=IF(AND)(ISNUMBER(VALUE)(&adr1&“,”))、ISNUMBER(VALUE)(&adr2&“,”)、SUM(VALUE)()))、“SUM)(SUM)()”&adr1&“,”,“,”,“,”,“,”,“,”,“,”,“,”)产品(-1,值(“&adr2&“,”),“,”,“,”,“,”)调试。打印frm c。公式=frm
我添加Debug.Print frm
这里是frm所取的值:”=IF(和(ISNUMBER(值('03-2020.xlsx'!$AV$63,”)),ISNUMBER(值('03-2020.xlsx'!$AV$59.))),SUM(值('03-2020.sx'!$AV$63),“),SUM)和('03-2020.sx'!$AV('03-2020.xlsx'!$AV$59,”),“NA”)“
(我打开了指定的文档以缩短地址)看起来不错…但是VALUE(&adr1&“,”)
-->只有一个参数好吧,我使用了错误的函数。我必须使用“NUMBERVALUE”而不是“VALUE”。非常感谢!