VBA公式从一个工作簿到另一个带有命名单元格的工作簿

VBA公式从一个工作簿到另一个带有命名单元格的工作簿,vba,excel,formula,Vba,Excel,Formula,我无法让我的公式发挥作用。您可以看到,我只是尝试从一个工作簿到另一个工作簿减去一个值(单元格中有一个公式)。我错过了什么?它将公式复制到正确的单元格中,但不计算。结果#名称 如果希望在范围(“chgBox”)单元格中获得减法结果,则执行实际计算 Range("chgBox") = currentWk.Range("grBox") - prevWk.Range("grBox") 如果希望公式保留在范围(“chgBox”)单元格中,则将VBA单元格引用转换为地址,并连接表示工作表公式的字符串 Ra

我无法让我的公式发挥作用。您可以看到,我只是尝试从一个工作簿到另一个工作簿减去一个值(单元格中有一个公式)。我错过了什么?它将公式复制到正确的单元格中,但不计算。结果#名称


如果希望在范围(“chgBox”)单元格中获得减法结果,则执行实际计算

Range("chgBox") = currentWk.Range("grBox") - prevWk.Range("grBox")
如果希望公式保留在范围(“chgBox”)单元格中,则将VBA单元格引用转换为地址,并连接表示工作表公式的字符串

Range("chgBox").Formula = "=" & currentWk.Range("grBox").Address(external:=true) & _
                            "-" & prevWk.Range("grBox").Address(external:=true)
您得到的是
#名称错误,因为工作表不理解什么是
currentWk.Range(““grBox”)

增编:

我已经运行了一个完整的样本测试环境,以及上面提供的公式和直接结果工作。我已经清理了下面代码的其余部分

Option Explicit

Sub changeReports()
    Dim currentWk As Worksheet
    Dim prevWk As Worksheet
    Dim filePath As String, destinationPath As String
    Dim sourceWorkbook As Workbook, targetWorkbook As Workbook

    filePath = "B:\Operations\Aging 031416Wk11.xlsm"
    destinationPath = "B:\Operations\Aging 032116Wk12.xlsm"
    filePath = Environ("TMP") & "\Aging 031416Wk11.xlsm"
    destinationPath = Environ("TMP") & "\Aging 032116Wk12.xlsm"

    Set sourceWorkbook = Workbooks.Open(filePath)
    Set targetWorkbook = Workbooks.Open(destinationPath)
    Set prevWk = sourceWorkbook.Worksheets("2016 Reports")
    Set currentWk = targetWorkbook.Worksheets("2016 Reports")

    With currentWk
        .Range("chgBox") = .Range("grBox") - prevWk.Range("grBox")
        '.Range("chgBox").Formula = "=" & currentWk.Range("grBox").Address & _
                            "-" & prevWk.Range("grBox").Address(external:=True)
    End With

    sourceWorkbook.Close savechanges:=False
    targetWorkbook.Close savechanges:=True

End Sub

考虑重构问题,以更可读的格式显示代码,并给出你输入的例子,与你得到的结果对比,你的预期结果。@丹尼尔-格雷厄姆-我想我只是这么做的。第一次是一团糟。我可以编辑以给出示例结果,但它只是一个数字(值)。谢谢我要计算的结果。我试了一下,结果发现了一个错误:对象“工作表”的方法“范围”失败了。我没有注意到范围对象中的双引号和命名范围的名称,在我的原始帖子之后,我不得不将它们编辑掉。你用的是后来的版本吗?然后在计算之前,将
currentWk.Range(“grBox”).Address(外部:=true)
debug.print prevWk.Range(“grBox”).Address(外部:=true)
?即时窗口中报告了什么?“本地人”窗口对范围有何说明?你在指定的范围值上设置了手表吗?天哪,我觉得自己像个白痴!整个上午我都在为这件事苦苦挣扎。我的原始代码工作正常。Range(“chgBox”)=.Range(“grBox”)-prevWk.Range(“grBox”)我忘了给prevWk中的单元格命名。新手失误!我是一个初学者,但那是愚蠢的。再次感谢你的帮助。
Option Explicit

Sub changeReports()
    Dim currentWk As Worksheet
    Dim prevWk As Worksheet
    Dim filePath As String, destinationPath As String
    Dim sourceWorkbook As Workbook, targetWorkbook As Workbook

    filePath = "B:\Operations\Aging 031416Wk11.xlsm"
    destinationPath = "B:\Operations\Aging 032116Wk12.xlsm"
    filePath = Environ("TMP") & "\Aging 031416Wk11.xlsm"
    destinationPath = Environ("TMP") & "\Aging 032116Wk12.xlsm"

    Set sourceWorkbook = Workbooks.Open(filePath)
    Set targetWorkbook = Workbooks.Open(destinationPath)
    Set prevWk = sourceWorkbook.Worksheets("2016 Reports")
    Set currentWk = targetWorkbook.Worksheets("2016 Reports")

    With currentWk
        .Range("chgBox") = .Range("grBox") - prevWk.Range("grBox")
        '.Range("chgBox").Formula = "=" & currentWk.Range("grBox").Address & _
                            "-" & prevWk.Range("grBox").Address(external:=True)
    End With

    sourceWorkbook.Close savechanges:=False
    targetWorkbook.Close savechanges:=True

End Sub