Направление вашего кода близко, надеюсь, этот пример поможет. Но сначала, пожалуйста, всегда используйте Option Explicit в вашем коде.
При настройке ваших начальных переменных для рабочих таблиц использование более описательных имен переменных делает более ясным, какая именно переменная предназначена для храненияопределенные данные. Мой пример настройки:
Dim wb As Workbook
Dim srcWS As Worksheet
Dim dstWS As Worksheet
Set wb = ThisWorkbook
Set srcWS = wb.Sheets("Sh2")
Set dstWS = wb.Sheets("Sh3")
Далее вы можете создать переменную для определения области диапазона ваших исходных данных:
Dim srcRange As Range
Set srcRange = srcWS.UsedRange
В случае, если вы хотите создать свойПервые два столбца содержат имена книг и рабочих таблиц, вам на самом деле не нужен цикл. Создав Range
нужного вам размера, один оператор поместит одинаковое значение во все ячейки в этом диапазоне. Поэтому вы можете создать столбцы имен в двух операторах, используя
dstWS.Range("A1").Resize(srcRange.Rows.Count, 1) = wb.Name
dstWS.Range("B1").Resize(srcRange.Rows.Count, 1) = srcWS.Name
Я установлю целевой диапазон, который начинается в третьем столбце, справа от двух столбцов имен:
Dim dstRange As Range
Set dstRange = dstWS.Range("C1").Resize(srcRange.Rows.Count, _
srcRange.Columns.Count)
Затем, с той же идеей, вы также можете скопировать весь исходный диапазон к месту назначения в одном выражении:
dstRange.Value = srcRange.Value
И все готово.
Вотвесь пример в одном блоке:
Option Explicit
Sub CopyMyRange()
Dim wb As Workbook
Dim srcWS As Worksheet
Dim dstWS As Worksheet
Set wb = ThisWorkbook
Set srcWS = wb.Sheets("Sh2")
Set dstWS = wb.Sheets("Sh3")
Dim srcRange As Range
Set srcRange = srcWS.UsedRange
dstWS.Range("A1").Resize(srcRange.Rows.Count, 1) = wb.Name
dstWS.Range("B1").Resize(srcRange.Rows.Count, 1) = srcWS.Name
Dim dstRange As Range
Set dstRange = dstWS.Range("C1").Resize(srcRange.Rows.Count, _
srcRange.Columns.Count)
dstRange.Value = srcRange.Value
End Sub