为名称分配“时间”功能时出现问题

时间:2014-09-12 07:54:14

标签: excel vba excel-vba time

如何将以下公式分配给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中的值可能会发生变化。

2 个答案:

答案 0 :(得分:0)

我可以立即想到的错误可能有两个原因......

  1. pasteRow不是有效的行号,因此它指的是不存在的 / 无效单元格地址。
  2. 您的本地设置不使用;作为分隔符。尝试将;替换为,
  3. 以下两个示例适用于不同的设置

    示例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公式。

周末愉快!