2016-05-25 9 views
1

Ich versuche, ein Makro zu erstellen, das einen wöchentlichen Bericht formatiert und erstellt. Es hat fünf Spalten, die verschoben werden müssen: Schlüssel, Zusammenfassung, Erstellt, Status, Fix Version/s.Excel VBA: Kopieren und Einfügen Auswahl basierend auf Zeilen- und Spaltenüberschriften

Ich muss eine Auswahl kopieren, die bei Zeile 2 in der Spalte Schlüssel beginnt und bei der letzten Zeile in der Spalte Fix Version/s endet, die dann in ein Blatt mit dem Namen "Prioritätsprobleme" eingefügt wird. Ich bin mir nicht sicher, wie ich diese spezifische Auswahl kodieren soll.

Ich muss die letzte Zeile in einer Variablen speichern, da die letzte Zeile von Woche zu Woche wechseln kann. Im Wesentlichen suche ich nach Code, der es mir ermöglicht, eine Auswahl aus dem Schnittpunkt von Zeile 2 und der Spalte Schlüssel zu dem Schnittpunkt der letzten Zeile und der Spalte Fix Version/s zu treffen, bin mir aber nicht sicher, wie das geht.

Function FindCol(toFind As String) As Range 
Dim Rtn As Range 
Set Rtn = Rows(1).Find(What:=toFind, LookIn:=xlValues, _ 
      LookAt:=xlWhole, MatchCase:=True) 
Set FindCol = Rtn 
End Function 

Sub Move_Severity() 
Dim Severity As Range 
Dim Key As Range 
Dim Fix_Version As Range 
Dim LastRow As Long 

Set Severity = FindCol("Severity") 
Set Key = FindCol("Key") 
Set Fix_Version = FindCol("Fix Version/s") 
LastRow = Cells(Rows.Count, Severity.Column).End(xlUp).Row 

'This is where I am running into problems 
Range(Cells(2, Key), Cells(LastRow, Fix_Version)).Copy 
Sheets("Priority Issues").Range("A2").Paste 
End Sub 
+0

'Dim Fix_Version Als Range' dann tun Sie' Zellen (LastRow , Fix_Version) 'aber' cells' erfordern eine Nummer nicht Bereich. Ich nehme an, die Funktion funktioniert ordnungsgemäß? Edit: Sie haben 2 Optionen, ändern Sie die Funktion, um die col-Nummer zurückzugeben oder setzen Sie Ihre Variablen auf long und tun 'FindCol (" Key "). Column'. – findwindow

+0

Für 'FindCol', brauchen Sie das nicht stattdessen? 'Setze FindCol = Rtn.Column'? – BruceWayne

+0

Batman, es gibt eine Reichweite zurück. Edit: aber ja, macht mehr Sinn, die col-Nummer zurückgeben ^^ – findwindow

Antwort

1
Sub Move_Severity() 
Dim Severity As Range 
Dim Key As Range 
Dim Fix_Version As Range 
Dim LastRow As Long 

Set Severity = FindCol("Severity") 
Set Key = FindCol("Key") 
Set Fix_Version = FindCol("Fix Version/s") 

With ActiveSheet '<~~ change active sheet reference to whatever must it be 
    .Range(.Cells(2, Key.Column), .Cells(.Rows.Count, Severity.Column).End(xlUp)).Copy Destination:=Sheets("Priority Issues").Range("A2") 
End With 

End Sub 

sollten Sie brauchen nur Werte einfügen dann, dass With-End With Teil

ändern
With ActiveSheet 
    With .Range(.Cells(2, Key.Column), .Cells(.Rows.Count, Severity.Column).End(xlUp)) 
     Sheets("Priority Issues").Range("A2").Resize(.Rows.Count, .Columns.Count).Value = .Value 
    End With 
End With 

die

viel schneller ist
+0

Oh schnappen. Smarter als meine Idee ^^ – findwindow

+0

@findwindow danke das ist ziemlich schwer zu passieren – user3598756

+0

Warte was: o Ziemlich sicher, du meinst anders herum ^^ – findwindow

Verwandte Themen