2016-08-15 2 views
0

Dears, Kann mir jemand helfen, warum stoppt dieser Code mit Fehlermeldung (Laufzeitfehler '9': Index außerhalb des Bereichs)?Arbeitsblatt letzter Zelllauf Fehler in VBA

Der Code-Schnipsel:

CollectFileName = "C:\Users\g\Documents\CAFM\VBS\access.xlsx" 

    Workbooks.Open (CollectFileName) 
    ActiveWindow.Visible = False 

LastDayRow = Workbooks(CollectFileName).Sheets(1).Range("B" & Rows.Count).End(xlUp).Row 
+0

Ist das Blatt, das Sie versuchen zu sehen, tatsächlich "1" oder "Blatt 1" genannt? Das würde erklären, warum es denkt, dass es außer Reichweite ist, wenn der Name falsch ist. Du rufst etwas an, das nicht existiert. – Gallus

+1

@Gallus Es existiert. '1' ist die Indexnummer der Sheets-Auflistung. – Brian

Antwort

3

Wenn eine Arbeitsmappe mit dem Blatt angeben, sollten Sie auch das Gleiche tun mit Rows.Count (und anderen, wie Cells(), , Columns(), Rows() usw.):

LastDayRow = Workbooks(CollectFileName).Sheets(1).Range("B" & Workbooks(CollectFileName).Sheets(1).Rows.Count).End(xlUp).Row

oder

CollectFileName = "C:\Users\g\Documents\CAFM\VBS\access.xlsx" 
Dim wb as Workbook 
Set wb = Workbooks.Open(CollectFileName) 

With wb.Sheets(1) 
    lastDayRow = .Range("B" & .Rows.Count).End(xlUp).Row 
End With 
+1

FWIW - Obwohl dies das Problem beheben wird, war der Index außerhalb des Bereichs, weil der OP den vollständigen String '' C: \ Benutzer \ g \ Dokumente \ CAFM \ VBS \ access.xlsx ''stattdessen in die' WorkBooks 'übergab von nur '" access.xlsx "'. Durch die Zuweisung der Variablen "wb" wird dies vermieden. Der 'With'-Block ist eine hinzugefügte" Good Practice ". –

+0

@ScottCraner - Danke für die Klarstellung! – BruceWayne

+0

Sie haben Recht. Das "wb" ist die Lösung. Danke Ihnen allen für Ihre Hilfe. – vergab

Verwandte Themen