2016-03-21 5 views
0

Ich versuche, die letzte Reihe von Daten nach dem Öffnen einer Excel-Arbeitsmappe zu erhalten, aber es wird "Laufzeitfehler 1004: Anwendungsdefinierter oder objektdefinierter Fehler" zurückgegeben habe dieses Format oft für Code benutzt, also bin ich mir nicht sicher, was mir hier fehlt. Ich habe die Variable als Long definiert, hat jemand irgendwelche Ideen? Mein Code ist unten:VBA: Anwendungsdefinierter Fehler beim Ausführen von LastRow Code

Function get_end_row(ByVal column_with_data As Long) As Long 
Dim last_row As Long 

last_row = ThisWorkbook.Sheets(1).Rows.Count 
get_end_row = ThisWorkbook.Sheets(1).Cells(last_row, column_with_data).End(xlUp).Row 

End Function 

Sub Master() 
Call MVP 
End Sub 

Sub MVP() 
Dim endRow As Long 
Dim wb As Workbook, ws As Worksheet 
Dim lastRow1 As Long 

Set wb = ThisWorkbook 
Set ws = ThisWorkbook.Sheets(1) 
endRow = get_end_row(1) 

Set mvpcomm = Workbooks.Open("File Path") 
Set wsMVPComm = mvpcomm.Sheets("Combined") 
lastRow1 = wsMVPComm.Range("A" & Rows.Count).End(xlUp).Row 
wsMVPComm.Range("A2:AZ" & lastRow1).Copy Destination:=ws.Range("A" & endRow + 1) 



End Sub 

Wenn jemand irgendwelche Ideen hat, würde ich es wirklich schätzen! Vielen Dank.

+0

Welche Zeile ist der Debugger Anschlag auf (markiert) nach dem Fehler? Im Allgemeinen habe ich diesen Fehler gesehen, wenn VBA Probleme hat, einen bestimmten Bereich zu finden, entweder weil eine andere Arbeitsmappe aktiv ist oder sich ein Blattname geändert hat. –

+0

Der Code stoppt auf lastRow1 = wsMVPComm.Range ("A" & Rows.Count) .End (xlUp) .Row – MCJNY1992

+0

Schritt durch Ihren Code und sehen, welche Zeile tatsächlich den Fehler – user3598756

Antwort

3

höchstwahrscheinlich die Arbeitsmappe, die Sie als wsMVPComm geöffnet ist von einem alten Format Excel während ThisWorkbook eines neuen

lastRow1 = wsMVPComm.Range("A" & wsMVPComm.Rows.Count).End(xlUp).Row 

statt

lastRow1 = wsMVPComm.Range("A" & Rows.Count).End(xlUp).Row 

ist versuchen, könnten Sie machen Ihre Funktion ein wenig generischer und hilft Ihnen, solche Probleme wie folgt zu vermeiden

Function get_ws_end_row(ws As Worksheet, column_with_data As Long) As Long 
    get_end_row = ws.Cells(ws.Rows.Count, column_with_data).End(xlUp).Row 
End Function 

und dann könnte man es zweimal im Code Sie

geschrieben verwenden erscheint
endRow = get_ws_end_row(ws, 1) 
... 
lastRow1 = get_ws_end_row(wsMVPComm, 1) 
Verwandte Themen