Excel trova End of Range e quindi seleziona Range e Copia

questo può o non è stato ancora chiesto.

Sto provando a copiare un intervallo di celle da un foglio di lavoro ad un altro utilizzando una macro. il problema che sto avendo è che l'intervallo che voglio copiare varia drasticamente each volta che viene eseguita la macro.

Per esempio, mi precipito a copiare l'intervallo ("A2: P64") in prima esecuzione, quindi quando riesco a eseguire nuovamente i dati l'inizio della gamma è ancora A2, ma la fine del range può essere P25 o p90000. È sempre la row Colonna P e (x variabile).

Ho provato cose come questo:

Dim past As Worksheet Dim countHist As String Dim view As Worksheet Dim countView As String Set view = ThisWorkbook.Worksheets("BlueSteel Errors") Set past = ThisWorkbook.Worksheets("Historical") countView = view.Cells(Rows.Count, "A").End(xlUp).Row countHist = past.Cells(Rows.Count, "A").End(xlUp).Row MsgBox ("P" & countView) ' This currently gives the count of 53, so output is P53 view.Range("A2:P & countView").Select ' THIS IS THE PROBLEM LINE.. should look 'should resemble view.Range("A2:P53").Select 'EVERYTHING ELSE APPEARS TO WORK Selection.Copy past.Select Range("A" & countHist).Select ActiveSheet.Paste 

Non riesco a trovare un modo per determinare l'ultima row che esiste dal text e quindi aggiungere quel numero alla fine del field Range in modo da poter select e appendere all'altra scheda. Ho solo bisogno di dati da A2 – Px non tutti di i campi in eccesso oltre P. Forse devo copiare e cancellarla.

Per favore … Per favore … Per favore … Per favore … Per favore … Per favore … Per favore … Per favore … Per favore … Per favore … Per favore … Per favore … Per favore. .. Per favore … Per favore … Per favore … Per favore … Per favore … non utilizzare. .Select INTERESSANTE LEGGERE

Ci sono anche degli errori nel codice

  1. Hai dichiarato countHist e countView come String . Dovrebbe essere Long
  2. Tutto all'interno delle citazioni è una string. Quindi "A2:P & countView" è una string. Hai bisogno di "A2:P" & countView
  3. È necessario aggiungere 1 all'ultima row del foglio di destinazione in modo da non sovrascrivere l'ultima row.

Prova questo

 Sub Sample() Dim past As Worksheet, view As Worksheet Dim countHist As Long, countView As Long Set view = ThisWorkbook.Worksheets("BlueSteel Errors") Set past = ThisWorkbook.Worksheets("Historical") countView = view.Cells(view.Rows.Count, "P").End(xlUp).Row countHist = past.Cells(past.Rows.Count, "A").End(xlUp).Row + 1 '~~> Do a direct copy paste instead of selecting first view.Range("A2:P" & countView).Copy past.Range("A" & countHist) End Sub 

Potrebbe essere necessario utilizzare. .Find per trovare l'ultima row non tutte le celle vengono riempite in una row particolare. Maggiori informazioni sulla ricerca dell'ultima row QUI

Hai bisogno della function End(xlUp) .

Aggiorna quindi la tua linea problematica

a partire dal

 view.Range("A2:P & countView").Select ' THIS IS THE PROBLEM LINE.. 

a

 view.Range("A2:" & view.Range("P" & Cells.Rows.Count).End(xlUp).Address).Select