Использование переменной в качестве имени диапазона - PullRequest
0 голосов
/ 17 октября 2019

У меня есть лист, где пользователь может ввести список ссылок на ячейки в виде жестко закодированных значений в ячейках. Затем предполагается, что сценарий VBA принимает эти данные и работает со значениями в этих точных ячейках в двух отдельных рабочих листах. Так, например, вход выглядит следующим образом:

Input
G29
H38
M92

Затем сценарий должен циклически проходить через диапазон на входе (в данном случае G29, H38 и M92) и переходить в отдельную рабочую книгу (исходную рабочую книгу). ) где он затем копирует значения в эти точные ячейки, а затем переходит в другую отдельную рабочую книгу (целевую рабочую книгу) и вставляет значения в те же ссылки на ячейки.

В следующем коде я определил переменные следующим образом:

wsKpInput_source = Соответствующий рабочий лист в исходной рабочей книге

wsSCEInput_target = Соответствующий рабочий лист в целевой рабочей книге

Dim rng As Range: Set rng = Application.Range("Dashboard!E9:E11") 'This is the G29,H38,M92 input from the user    
Dim cell_source As Range  'To take the references input by the user (G29,H38,M92) - unsure how to define this?
Dim cell_source_input As Variant 'To use the cell references in cell_source and be put equal to the content in that source workbook cell reference

For i = 1 To rng.Rows.Count
    cell_source = rng.Cells(i, 1)
    cell_source_input = wsKpInput_source.Range(cell_source)
    wsKpInput_target.Range(cell_source) = cell_source_input
Next

К сожалению, это работает не так, как задумано, и я считаю,это наверное из-за нескольких проблем? Я был бы очень признателен за любую помощь в этом.

1 Ответ

0 голосов
/ 17 октября 2019

Это можно сделать правильно в одной строке следующим образом:

Sub copy()
Dim rng As Range: Set rng = Application.Range("Dashboard!E9:E11")  'This is the G29,H38,M92 input from the user
Dim i As Integer

For i = 1 To rng.Rows.Count

    wsKpInput_target.Range(rng.Cells(i, 1).Value).Value = wsKpInput_source.Range(rng.Cells(i, 1).Value).Value
Next
End Sub

Проблема в том, что вы пытались .rng.cells(I,1), который будет возвращать ссылку на ячейку той ячейки, где вам нужно было значение в пределахячейка как ссылка на ячейку (сделано с .value). Кроме того, копирование из одной ячейки в другую всегда можно выполнить одной строкой с двух сторон оператора =.

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

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