Вы должны использовать:
Sheet6.Range("I2").value
Вместо:
Sheet6.Range("I2").text
Более того, вам нужно открыть книгу, если она еще не открыта (и я думаю, что это не случай, если вы должны сделать это для нескольких рабочих книг). Таким образом, вы могли бы иметь:
Dim x As Workbook, y As Workbook
Dim ws1 As Worksheet, ws2 As Worksheet
Dim input_workbook as String
Set y = ActiveWorkbook 'I consider this as the workbook you launch the macro from
input_workbook = Sheet6.Range("I2").value
'I guess Sheet6 is in workbook y ...
'in any case, it should represent a folder path with the workbook name,
'like "C:\Documents\MyExcelFile.xlsx"
Set x = workbooks.open(filename:=input_workbook) 'The input workbook that you need to open
'... rest of the code ...
Надеюсь, это поможет!
# 1 РЕДАКТИРОВАТЬ
Чтобы ответить на ваш вопрос, теперь вы можете просто использовать x и у как рабочие тетради. Таким образом, вы можете иметь:
Dim ws1 As Worksheet, ws2 As Worksheet
Set ws1 = y.sheets("your_y_sheet_name")
Set ws2 = x.sheets("your_x_sheet_name")
Затем вы можете использовать эти переменные для передачи данных:
ws1.range("B1:C10").value = ws2.range("B1:C10").value
Это сделает ваш диапазон B1: C10 в ws1 (wb y) равным один в ws2 (wb x). Это абсолютно быстрее, чем копирование / вставка. Итак, если у вас есть фиксированный диапазон для перевода из x в y, просто используйте это так (просто используйте правильные диапазоны; они должны иметь одинаковый размер).
Как только вы закончили с x книгой, не забудьте закрыть ее:
x.close