/ / Помилка 9 VBA - Підписка поза діапазоном з’являється кожен інший запуск - excel, vba, excel-vba, ms-access, access-vba

Помилка 9 VBA - Subscript Out of Range з'являється кожний інший пробіг - excel, vba, excel-vba, ms-access, access-vba

Код нижче, що знаходиться в моїй базі даних доступу,проходить добре половину часу. Друга половина мені дає: "підпис під помилкою 9 поза діапазоном", і він виділяє як проблему рядок "Встановити WKS = Робочі книжки (...". Я знаю, що проблема полягає в тому, що вона не впевнена, на яку робочу книжку вона посилається. Однак я не знаю, що робити, щоб зробити це зрозумілішим.

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

Відповіді:

1 для відповіді № 1

У вас є пара варіантів залежно від того, як побудований ваш код:

1) Зробіть XL публічна змінна:

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

2) Передайте Excel іншому підрозділу:

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) Використовуйте GetObject() метод, якщо Excel вже відкритий.

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

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