Установите диапазон на основе входных данных ячейки, именованный диапазон - PullRequest
0 голосов
/ 22 января 2019

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

У меня проблемы с определением диапазона назначения и диапазона источника. Мне бы хотелось, чтобы скрипт проходил через каждую строку и устанавливал целевые и исходные диапазоны на именованные диапазоны, указанные в соответствующих столбцах таблицы параметров импорта, и копировал данные из источника в место назначения.

Любая помощь будет принята с благодарностью.

Public Sub grabIRR()   
Dim temp_workbook As Excel.Workbook
Dim filepath As String
Dim filename As String
Dim source_range As String
Dim dest_range As String
Dim IRR_Row As Integer

Application.Calculation = xlCalculationManual
Set temp_workbook = Workbooks.Open(filename:=link_to_IRR, ReadOnly:=True)
Application.Calculation = xlCalculationManual

shtPrivateEquity.Cells.ClearContents

For IRR_Row = 15 To 110
    dest_range = Worksheets("import_settings").Range(IRR_Row, 11).Value.RefersToRange
    source_range = Worksheets("import_settings").Range(IRR_Row, 9).Value.RefersToRange
    shtPrivateEquity.Range(dest_range).Value = temp_workbook.Names(source_range).RefersToRange.Value
Next IRR_Row
On Error GoTo 0

Application.Calculation = xlCalculationAutomatic
temp_workbook.Close savechanges:=False

End Sub

1 Ответ

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

Я думаю, что будет легче работать с именами в виде строк, а не объектов диапазона.

Попробуйте это:

For IRR_Row = 15 To 110
    dest_range_name = Worksheets("import_settings").Cells(IRR_Row, 11).Value
    source_range_name = Worksheets("import_settings").Cells(IRR_Row, 9).Value
    shtPrivateEquity.Range(dest_range_name).Copy Destination := temp_workbook.Range(source_range_name)
Next IRR_Row

Обратите внимание, что я изменил некоторые имена переменных и изменил недопустимыеRange(row, column) до Cells(row, column).

...