2016-03-23 51 views
0

我無法讓我的公式工作。你可以看到我只是試圖從另一個工作簿中減去另一個值(單元格中有一個公式)。我錯過了什麼?它將公式複製到正確的單元格中,但不計算。結果#NAME ?.從一個工作簿到另一個命名單元格的VBA公式

Sub changeReports() 
    Dim currentWk As Worksheet 
    Dim prevYr As Worksheet 
    Dim prevWk As Worksheet 
    Dim File_Path As String 
    Dim Source_Workbook As Workbook 
    Dim Target_workbook As Workbook 

    File_Path = "B:\Operations\Aging 031416Wk11.xlsm" 
    Destination_Path = "B:\Operations\Aging 032116Wk12.xlsm" 
    Set Source_Workbook = Workbooks.Open(File_Path) 
    Set Target_workbook = Workbooks.Open(Destination_Path) 
    Set prevWk = Source_Workbook.Worksheets("2016 Reports") 
    Set currentWk = Target_workbook.Worksheets("2016 Reports")  
    currentWk.Activate 

    ' code works to insert formula in cell but formula not working the way it is written 
    Range("chgBox").formula = "=currentWk.Range(""grBox"")- prevWk.Range(""grBox"")"  
End Sub 
+0

考慮重構問題,以更易讀的格式顯示代碼,並給出您的輸入示例,並將預期結果與您得到的結果進行對比。 –

+0

@DanielGraham - 我想我剛剛做到了。第一次是一團糟。我可以編輯以提供示例結果,但它只是一個數字(值)。 – chef

+0

啊,gotchya,我現在明白了。謝謝! –

回答

0

如果您想在Range(「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) 

你都拿到#NAME!錯誤,因爲工作不理解什麼是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 
+0

我想要計算的結果。我試過了,我得到了錯誤:object'_of_Forms'的方法'範圍'失敗 – chef

+0

我沒有注意到範圍對象中帶有命名範圍名稱的雙引號,並且必須在我的原始文章後編輯它們。你使用了以後的版本嗎?在計算之前,你將'currentWk.Range(「grBox」).Address(external:= true)'和'debug.print prevWk.Range(「grBox」)。Address(external:= true)我報告的即時窗口是什麼?當地人窗口對範圍說了什麼?你有沒有設置一個監視命名的範圍值? – Jeeped

+0

OMG @Jeeped我覺得自己像個白癡!整個上午我都一直在努力。我原來的代碼工作。範圍(「chgBox」)= .Range(「grBox」) - prevWk.Range(「grBox」)我忘了命名prevWk中的單元格。菜鳥錯誤!我是初學者,但那只是愚蠢的。再次感謝您的幫助。 – chef

相關問題