Использовать определенный именованный диапазон из одной электронной таблицы в другой - PullRequest
0 голосов
/ 20 января 2020

В мастер-файле у меня есть лист XXXX, в котором диапазон C2: C3 содержит имена двух таблиц. Я храню эти имена в массиве tba, который является переменной варианта.

Private Sub ORSA_REPORT_Click()

    Dim rng As Range
    Dim rng2 As Range
    Dim SummaryWb As Workbook
    Dim tba As Variant
    Dim ws As Worksheet

    Set SummaryWb = Workbooks.Open("I:\XXX\XXXXX.xlsx") ' <--- I open this workbook
                                                        '      which contains the tables
                                                        '      I need to copy

    ThisWorkbook.Activate

    tba = Worksheets("XXX").Range("C2:C3") ' <--- Please see below a screenshot
                                           '      with the names

    SummaryWb.Activate

    For i = 1 To 2

        Set rng = Range(tba(i, 1)) ' <--- in the tba are names which i take them from
                                   '      the masterworkbook but i want to use them
                                   '      in the workbook whichg contains the tables

        rng.Copy

        SummaryWb.Worksheets("New").Cells(i, 1).PasteSpecial xlPasteAll

    Next i

Я хочу активировать SummaryWb и использовать имена из tba в SummaryWb, чтобы определить rng, который является переменной диапазона.

Я провел обширное исследование, но не смог его выяснить.

Пример:

Первый диапазон имен, который находится в главной книге, - это Имя1
Второе имя диапазон, который находится в главной книге, - Имя2
-> Обратите внимание, что в этом файле содержатся только имена.

Далее фактический диапазон находится в другой книге. Например:

В книге 2 у меня есть A1: B5 с именем Name1 и C1: D5 с именем Name2.

Я храню два имени из книги book1 в массиве, tba.

Я хочу установить значение rng равным диапазонам, представленным записями tba.

1 Ответ

0 голосов
/ 20 января 2020

Не используйте .Activate, вместо этого укажите рабочую книгу и лист для каждого объекта диапазона. Если вы сделаете это, ясно, что произойдет.

Private Sub ORSA_REPORT_Click()
    Dim SummaryWb As Workbook
    Set SummaryWb = Workbooks.Open("I:\XXX\XXXXX.xlsx")     

    Dim tba As Variant
    tba = ThisWorkbook.Worksheets("XXX").Range("C2:C3").Value
    'eg tba is then:
    'tba(1, 1) = "Name1"
    'tba(2, 1) = "Name2"


    For i = 1 To 2
        Dim rng As Range
        Set rng = Workbooks("Workbook2").Worksheets("SheetName").Range(tba(i, 1)) 

        rng.Copy

        SummaryWb.Worksheets("New").Cells(i, 1).PasteSpecial xlPasteAll
    Next i
End Sub

Поэтому убедитесь, что для каждого объекта Range вы указываете, в какую книгу / рабочую таблицу он входит. Если он находится в рабочей книге, то код VBA, то вы можно использовать ThisWorkbook вместо Workbooks("NameOfWorkbook").

Обратите внимание, что если вы используете Set rng = Workbooks("Workbook2").Worksheets("SheetName").Range(tba(i, 1)), то именованные диапазоны Name1 и Name2 должны существовать на листе SheetName из Workbook2.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...