2017-04-01 5 views
2

Hallo Ich habe eine Frage, die ich Code, den ich mit Makrorecorder gemacht:einstellen ActiveCell.FormulaR1C1

ActiveCell.FormulaR1C1 = "=New_Order!RC[-42]+New_Order!RC[-41]+New_Order!RC[-40]" 

wie kann ich diesen Code anpassen, so würde es ungefähr wie thi sein:

'ActiveCell.Formula = Sheets("New_Order").Range(n & LastRow) + Sheets("New_Order").Range(O & LastRow) + Sheets("New_Order").Range(p & LastRow) 

Ich habe Werte in einem anderen Blatt namens New_Order in Spalte N, O, P. Ich möchte diese Werte summieren und automatisch die gesamte Spalte im Arbeitsblatt Registrierung füllen. Der vollständige Code sieht so aus:

Sub Registrereren() 

Application.Calculation = xlCalculationManual 
Application.EnableEvents = False 
Application.ScreenUpdating = False 

On Error Resume Next 

Dim oWkSht As Worksheet 
Dim LastColumn As Long 
Dim c As Date 
Dim myCell As Range 
Dim LastRow As Long 

Sheets("Registration").Activate 


Set oWkSht = ThisWorkbook.Sheets("Registration") 
LastColumn = oWkSht.Range("A" & Columns.Count).End(xlToRight).Column 
LastRow = oWkSht.Range("C" & Rows.Count).End(xlUp).Row 

c = Date 

Set myCell = oWkSht.Range("1:1").Find(What:=c, LookIn:=xlValues, lookat:=xlWhole, MatchCase:=False, SearchOrder:=xlByColumns) 

If Not myCell Is Nothing Then 
    myCell.Offset(1, 0).Select 

    ActiveCell.FormulaR1C1 = "=New_Order!RC[-42]+New_Order!RC[-41]+New_Order!RC[-40]" 
    'ActiveCell.Formula = Sheets("New_Order").Range(n & LastRow) + Sheets("New_Order").Range(O & LastRow) + Sheets("New_Order").Range(p & LastRow) 
    myCell.Offset(1, 0).Select 
    Range(myCell.Offset(1), Cells(LastRow, myCell.Column)).Select 
    Selection.FillDown 

End If 

Sheets("Main").Activate 

Application.Calculation = xlCalculationAutomatic 
Application.EnableEvents = True 
Application.ScreenUpdating = True 

End Sub 

Antwort

1

Ich habe eine Reihe von Annahmen gemacht und als Ergebnis eine Reihe von Korrekturen. Ich nehme an, dass Sie Einträge in der Spalte "A" des Registrierungsblatts haben, die mit der Anzahl der Zeilen übereinstimmen, die Sie in der Tabelle New_Order haben.

Option Explicit 


Sub Registrereren() 

    Application.Calculation = xlCalculationManual 
    Application.EnableEvents = False 
    Application.ScreenUpdating = False 

    On Error Resume Next 

    Dim oWkSht As Worksheet 
    Dim LastColumn As Long 
    Dim c As Date 
    Dim myCell As Range 
    Dim LastRow As Long 

    Sheets("Registration").Activate 

    Set oWkSht = ThisWorkbook.Sheets("Registration") 
    LastColumn = oWkSht.Cells(1, oWkSht.Columns.Count).End(xlToLeft).Column 
    LastRow = oWkSht.Cells(oWkSht.Rows.Count, "A").End(xlUp).row 

    c = Date 
    Set myCell = oWkSht.Cells(1, 1).Resize(, LastColumn).Find(What:=c, LookIn:=xlFormulas, _ 
       lookat:=xlWhole, MatchCase:=False, SearchOrder:=xlByColumns) 

    If Not myCell Is Nothing Then 
    myCell.Offset(1, 0).Formula = "=New_Order!N1+New_Order!O1+New_Order!P1" 
    Range(myCell.Offset(1), Cells(LastRow, myCell.Column)).Select 
    Selection.FillDown 
    End If 

    Sheets("Main").Activate 

    Application.Calculation = xlCalculationAutomatic 
    Application.EnableEvents = True 
    Application.ScreenUpdating = True 

End Sub 
1

die Formel Sie wollen Unter der Annahme geben:

= 'New_Order'!NR + 'New_Order'!OR + 'New_Order'!PR

wo R die gleiche Zeile der Zelle ist die Formel halten, dann ist diese verwenden FormulaR1C1:

= 'New_Order'!RC14 + 'New_Order'!RC15 + 'New_Order'!RC16

Diese Zeile ersetzen:

ActiveCell.FormulaR1C1 = "=New_Order!RC[-42]+New_Order!RC[-41]+New_Order!RC[-40]"

mit dieser Zeile:

ActiveCell.FormulaR1C1 = "=New_Order'!RC14 + 'New_Order'!RC15 + 'New_Order'!RC16"