У меня есть этот код VBA для копирования моих именованных ячеек из одной рабочей книги в другую, но он выдает Error 9: Subscript out of range нижний индекс выходит за пределы допустимого диапазона . Есть идеи, пожалуйста?

Sub namexfr()
 wbs = "C:\Users\MousaviM\Desktop\Book1.xlsm"
 wbd = "C:\Users\MousaviM\Desktop\Book2.xlsm"
 For Each nam In Workbooks(wbs).Names
  Workbooks(wbd).Names.Add Name:=nam.Name, RefersToR1C1:=nam.RefersToR1C1
 Next
End Sub

1 ответ1

1

Итак, проблема в том, что Workbooks(wbs) не распознаются как объект Workbook. Это связано с тем, что аргумент в скобках должен быть индексом, то есть целым числом, а не путем к файлу.

Одно из решений состоит в том, чтобы просмотреть коллекцию рабочих книг и сравнить желаемый путь с путями открытых рабочих книг. Затем установите объект Workbook равным соответствующей книге.

В приведенном ниже коде я сделал это для каждой книги. Поскольку у вас, вероятно, нет тонны открытых книг, несколько циклов в вычислительном отношении незначительны.

Sub namexfr()
Dim wbs As Workbook, wbd As Workbook, wb As Workbook
wbspath = "C:\Users\MousaviM\Desktop\Book1.xlsm"
wbdpath = "C:\Users\MousaviM\Desktop\Book2.xlsm"
For Each wb In Workbooks
    If wb.FullName = wbspath Then
        Set wbs = wb
        Exit For
    End If
Next wb
For Each wb In Workbooks
    If wb.FullName = wbdpath Then
        Set wbd = wb
        Exit For
    End If
Next wb
For Each nam In wbs.Names
    wbd.Names.Add Name:=nam.Name, RefersToR1C1:=nam.RefersToR1C1
Next
End Sub

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .