2016-03-29 2 views
0

Der Code unten, in meiner Access-Datenbank, läuft gut die Hälfte der Zeit. Die andere Hälfte gibt mir: "Fehler 9 Index außerhalb des Bereichs," und es markiert die "Set WKS = Workbooks (..." Zeile als das Problem. Ich weiß, dass das Problem damit ist unsicher, welche Arbeitsmappe es verweist .. aber ich weiß nicht, was es klarer zu tun, umFehler 9 VBA - Index außerhalb des Bereichs erscheint jeden anderen Lauf

Sub fixborderss() 
Dim WKS As Excel.Worksheet 
Dim lastrow As Long 


Set WKS = Workbooks("L3 PSR.xls").Worksheets("L-3 Project Status Report") 

lastrow = Range("I" & WKS.Rows.Count).End(xlUp).Row 

WKS.Range("A8:V" & lastrow).Borders(xlEdgeTop).Color = RGB(191, 191, 191) 
WKS.Range("A8:V" & lastrow).Borders(xlEdgeBottom).Color = RGB(191, 191, 191) 
WKS.Range("A8:V" & lastrow).Borders.LineStyle = xlContinuous 

End Sub 
+0

ist die Arbeitsmappe 'L3 PSR.xls' geöffnet, wenn diese ausgeführt wird? –

+0

Ja, es ist in einem früheren Makro geöffnet –

+3

Ich rate irgendwo Sie haben eine Objektvariable, die auf die aktive 'Excel.Application' Instanz verweist, die die Arbeitsmappe geöffnet hat. Qualifiziere 'Arbeitsmappen' mit dieser Objektvariable ...' Setze WKS = objExcel.Workbooks (' – HansUp

Antwort

1

Sie haben ein paar Optionen, je nachdem, wie Ihr Code aufgebaut ist:

1) XL eine öffentliche Variable Fabrikat:

Public XL As Excel.Application '// Declare at top of module, outside of any subs/functions 

2) Übergeben Sie Excel zum anderen Sub:

Set XL = New Excel.Application 
'// ... more code 

My_Other_Sub XL '// Call sub and pass Excel object 

'// Some more code 

End Sub 

Public Sub My_Other_Sub(ByRef XL As Excel.Application) 
    Set ws = XL.Workbooks(1).Sheets(1) 
    '// Other code 
End Sub 

3) Verwenden Sie die Methode GetObject(), wenn Excel bereits geöffnet ist.

Set XL = GetObject(, "Excel.Application") 

If Not XL Is Nothing Then 
    Set ws = XL.Workbooks(1).Sheets(1) 
End If 
Verwandte Themen