У меня есть этот код 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
Ответы:
Таким образом, проблема в том, что
Workbooks(wbs)
не распознается как объект Workbook. Это связано с тем, что аргумент в скобках должен быть индексом, т. Е. Целым числом, а не путем к файлу.Одним из решений является циклический просмотр коллекции Workbooks и сравнение желаемого пути с путями открытых рабочих книг. Затем установите объект Workbook равным соответствующей книге.
В приведенном ниже коде я сделал это для каждой книги. Поскольку у вас, вероятно, нет тонны открытых книг, несколько циклов в вычислительном отношении незначительны.
источник
For Each
цикл через имена. Это было бы что-то вроде, ЕСЛИ nam удовлетворяет условиям X, Y, Z, затем добавьте дублирующее имя кwbd
. В противном случае пропустите это.for each ...
с ,for each .. in wbs.names
но это решение кажется более надежным.