VBA чтение Excel файл имеет проблему «Подписка вне диапазона» при первом открытии файла - PullRequest
0 голосов
/ 04 января 2019

Я делаю VBA для чтения данных из файла Excel. Он прекрасно работает, когда этот исходный файл не открыт.

Однако, если сначала открыть исходный файл, а затем запустить этот код, он выдаст ошибку «Подписка вне диапазона».

Интересно то, что если я сначала открыл свой файл кода, а затем открою этот исходный файл, он не запустится, и исходный файл закроется.

Option Explicit

Sub ReadDetail()

    Application.ScreenUpdating = False

    Dim i As Integer
    For i = 1 To 13

        Dim xlspath As String
        Dim WB As Workbook
        Dim SALES_ORDER As Range        
        Set SALES_ORDER = ThisWorkbook.Sheets("SO Details").Range("C" & i + 3)

        xlspath = "P:\Scheduling\Purchasing Schedule REV2.xlsx"
        Set WB = Workbooks.Open(xlspath, True, True)
        SALES_ORDER.Value = WB.Worksheets("Active").Range("AA22").Value

        WB.Close False
        Set WB = Nothing

    Next i    

 End Sub

1 Ответ

0 голосов
/ 04 января 2019

Редактировать 1: Я видел, где вы использовали «ThisWorkbook» вместо вашего объявленного объекта, который был «WB».

Вы объявляете диапазон до объявления Рабочей книги. Я предполагаю, что когда у вас есть открытая рабочая книга, значение диапазона обнуляется, потому что вы объявляете рабочую книгу, затем вы объявляете и устанавливаете диапазон, а затем вы устанавливаете значение рабочей книги. Попробуйте объявить и установить диапазон после открытия книги. Вы также можете использовать условную логику, чтобы не открывать книгу, если она уже открыта.

xlspath = "P:\Scheduling\Purchasing Schedule REV2.xlsx"
Dim WB As Workbook
Set WB = Workbooks.Open(xlspath, True, True)
Dim SALES_ORDER As Range        
Set SALES_ORDER = WB.Sheets("SO Details").Range("C" & i + 3)
SALES_ORDER.Value = WB.Worksheets("Active").Range("AA22").Value
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...