2016-03-23 6 views
0

Ich kann meine Formel nicht funktionieren. Sie können sehen, dass ich einfach versuche, einen Wert von einer anderen Arbeitsmappe in eine andere zu subtrahieren (es gibt eine Formel in den Zellen). Was vermisse ich? Es kopiert die Formel in die richtige Zelle, berechnet sie aber nicht. Ergebnisse #NAME ?.VBA-Formel von einer Arbeitsmappe zu einer anderen mit benannten Zellen

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

Erwägen Sie, die Frage zu rekonstruieren, um Code in einem besser lesbaren Format anzuzeigen, und geben Sie Beispiele für Ihre Eingaben mit Ihren erwarteten Ergebnissen im Gegensatz zu den Ergebnissen, die Sie stattdessen erhalten. –

+0

@DanielGraham - Ich glaube, ich habe das gerade getan. das erste Mal war es ein Durcheinander. Ich kann bearbeiten, um Beispiele zu geben, aber es wäre nur eine Zahl (Wert). – chef

+0

Ahh, Gotchya, das sehe ich jetzt. Vielen Dank! –

Antwort

0

Wenn Sie das Ergebnis der Subtraktion in der Zelle Range ("chgBox") möchten, dann führen Sie die eigentliche Berechnung durch.

Range("chgBox") = currentWk.Range("grBox") - prevWk.Range("grBox") 

Wenn Sie die Formel möchten in der Range („chgBox“) Zelle bleiben dann die VBA Zelle Verweise auf Adressen konvertieren und eine Zeichenfolge verketten, die das Arbeitsblatt Formel darstellen.

Range("chgBox").Formula = "=" & currentWk.Range("grBox").Address(external:=true) & _ 
          "-" & prevWk.Range("grBox").Address(external:=true) 

Sie waren immer die #NAME! Fehler, da das Arbeitsblatt nicht versteht, was currentWk.Range(""grBox"") ist.

Nachtrag:

ich durch eine vollständige Probe Testumgebung ausgeführt haben und sowohl in der Formel und direktes Ergebnis der Arbeit, wie oben zur Verfügung gestellt. Ich habe den Rest des folgenden Codes aufgeräumt.

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

Ich möchte das Ergebnis der Berechnung. Ich habe das ausprobiert und erhalte den Fehler: Methode 'Range' von object'_Worksheet 'fehlgeschlagen – chef

+0

Ich hatte die doppelten Anführungszeichen in den Range-Objekten mit den Namen des benannten Bereichs nicht bemerkt und musste sie nach meinem ursprünglichen Post bearbeiten. Hast du die spätere Überarbeitung benutzt? Was passiert, dann setzen Sie 'currentWk.Range (" grBox "). Adresse (external: = true)' und 'debug.print prevWk.Range (" grBox "). Adresse (external: = true)' vor der Berechnung? Was ist in dem Direktfenster gemeldet? Was sagt das Lokalfenster über die Bereiche? Haben Sie die angegebenen Werte für den Bereich festgelegt? – Jeeped

+0

OMG @Jeeped Ich fühle mich wie ein Idiot! Ich habe mich den ganzen Morgen wieder mit diesem Problem herumgeschlagen. Mein ursprünglicher Code hat funktioniert. Range ("chgBox") = .Range ("grBox") - prevWk.Range ("grBox") Ich habe vergessen, die Zellen im prevWk zu benennen. Anfängerfehler! Ich bin ein Anfänger, aber das war einfach dumm. Danke nochmal für deine Hilfe. – chef

Verwandte Themen