如何将以下公式分配给Excel VBA中的名称值:
ActiveWorkbook.Names.Add _
Name:="extraHours_" & dayNumber, _
RefersTo:="=TIME(INT('Tab1'!$B$" & pasteRow & "/10000);" & _
"INT(MOD('Tab1'!$B$" & pasteRow & ";10000)/100);" & _
"MOD('Tab1'!$B$" & pasteRow & ";100))"
每当我执行脚本时,它都会抛出“运行时错误”,说“公式中的错误”。但是,如果我将公式字符串复制并粘贴到Excel工作表中的单元格中,则会正确评估。有趣的是,如果我从公式中删除“TIME”函数(这使公式相当无意义),它可以正常工作。
我在这里找到了公式:https://stackoverflow.com/a/11088253。 VBA代码的问题在于,我必须“在运行中”计算TIME,这意味着'Tab1'!$B$" & pasteRow
中的值可能会发生变化。
答案 0 :(得分:0)
我可以立即想到的错误可能有两个原因......
pasteRow
不是有效的行号,因此它指的是不存在的 / 无效单元格地址。;
作为分隔符。尝试将;
替换为,
以下两个示例适用于不同的设置
示例1 以,
作为分隔符
pasteRow = 1
dayNumber = 1
ActiveWorkbook.Names.Add _
Name:="extraHours_" & dayNumber, _
RefersTo:="=TIME(INT('Tab1'!$B$" & pasteRow & "/10000)," & _
"INT(MOD('Tab1'!$B$" & pasteRow & ",10000)/100)," & _
"MOD('Tab1'!$B$" & pasteRow & ",100))"
示例2 以;
作为分隔符
pasteRow = 1
dayNumber = 1
ActiveWorkbook.Names.Add _
Name:="extraHours_" & dayNumber, _
RefersTo:="=TIME(INT('Tab1'!$B$" & pasteRow & "/10000);" & _
"INT(MOD('Tab1'!$B$" & pasteRow & ";10000)/100);" & _
"MOD('Tab1'!$B$" & pasteRow & ";100))"
答案 1 :(得分:0)
虽然我很高兴我解决了我的问题,但同时让我感到难过。
正如你可能从我糟糕的英语中猜到的那样,我没有使用Excel的“英语”版本(事实上,它是德语版本)。因此,VBA必须插入公式的Englisch“翻译”。然后它工作正常。该网站可能会对您有所帮助:http://de.excel-translator.de/
令我困惑的是,如果我将连接的VBA公式复制并粘贴到excel Cell中,它会正确评估,我也可以使用宏录制器记录一个公式,并在我的VBA中使用它。但是,不允许使用德语构建自行构建的VBA公式。
周末愉快!