Почему я получаю ошибку 9 с индексом вне диапазона при ссылке на другую книгу / рабочий лист в VBA?

#excel #vba

#excel #vba

Вопрос:

У меня есть макрос (в основной книге), который получает данные из другой книги / рабочего листа .value2 .

Я пробовал разные изменения в коде. Я дважды проверил, что обе книги открыты. Тем не менее, я продолжаю получать Subscript out of range (Error 9) .

 Sub NielsenScorecard_DataPaste()
    Dim WbNielsenScorecard As Workbook
    Set WbNielsenScorecard = Workbooks("Nielsen Scorecard_Template.xlsm")

    TotalUS_DataPaste
End Sub

Sub TotalUS_DataPaste()

  **Subscript out of range (Error 9)**
    With Workbooks("Power Query - Meijer_Walmart_Total US xAOC.xlsm").Worksheets("PQTotalUS")
        Dim Data(0) As Variant
            'Copy Data Range
            Data(0) = .Range(.Cells(.Rows.Count, "A").End(xlUp), "AA2").Value2
    End With

    'Worksheet Code Name within this Workbook 
    With wsTotalUS
        Debug.Print wsTotalUS.Name
        .AutoFilter.ShowAllData
        .Range("A2:AA" amp; .Cells(.Rows.Count, "A").End(xlUp).Offset(1).Row).ClearContents
            With .Cells(.Rows.Count, "A").End(xlUp).Offset(1).Resize(UBound(Data(0)))
                .Resize(ColumnSize:=UBound(Data(0), 2)).Value2 = Data(0)
            End With
    End With

End Sub
 

VBA Printscreen

Комментарии:

1. дважды проверьте правильность написания как книги, так и рабочего листа, а также то, что целевая книга открыта.

2. Открыта ли рабочая книга «Power Query Meijer_Walmart_Total US xAOC.xlsm»?

3. @ScottCraner Я добавил экран печати рабочих книг / рабочих листов. Все открыто и написано правильно.. если я чего-то не упускаю

4. @FaneDuru Я добавил экран печати: да, «Power Query — Meijer_Walmart_Total US xAOC.xlsm» открыт

5. На вашем снимке экрана есть пробелы PQ Total US . В вашем коде нет. Разница между кодовым именем и именем листа.

Ответ №1:

Вы можете ссылаться на лист по его кодовому имени, однако это другой формат, и он должен быть в ThisWorkbook . Недостатком является то, что вы не можете ссылаться на лист в другой книге по его кодовому имени. Worksheets("PQ Total US").Activate против PQTotalUS.Activate . Если ваша цель — сократить код и не повторять длинное имя, тогда другой вариант — выполнить следующее:

 Dim wb1 as Workbook
Dim ws1 as Worksheet
Set wb1 = Workbooks("Power Query Meijer_Walmart_Total US xAOC.xlsm")
Set ws1 = wb1.Worksheets("PQ Total US")

With ws1
     'Do something
End with