2013-11-15 3 views
1

У меня возникла проблема при вставке данных на лист перекомпилирования. Перекомпилированный лист похож на итоговый лист и вставляет все данные из выбранного листа, который указан. Мастер-лист является справочным листом, в котором диапазон («AA») состоит из всего имени рабочего листа, которое я хочу скопировать и вставить для перекомпилирования листа. Пример имени рабочего листа - это рабочий лист A, B, C ... и т. Д. Мне просто нужно написать имя рабочего листа в диапазоне основных листов («AA»), и программа будет отслеживать все указанные имя листа. Моя проблема заключается в том, когда я вставляю данные с листа. Данные из листа B, C, D также будут вставлены в одну и ту же ячейку, что приведет к ее перезаписи. То, что я пытаюсь сделать, - вставить таблицу данных A для перекомпилирования листа, а следующая пустая ячейка - данные из листа B и т. Д. Это мой код.Как вставить в следующую пустую ячейку вместо вставки в ту же ячейку

Private Sub CommandButton2_Click() 

Dim Sheetname, myrange As String 
Dim A, noOfrows As Integer 
Dim startRow As Integer 

For i = 2 To Worksheets("Master Sheet").Cells.SpecialCells(xlCellTypeLastCell).Row 

Sheetname = Worksheets("Master Sheet").Cells(i, 27).Value'Reference sheet range ("AA") 
noOfrows = Worksheets(Sheetname).Cells.SpecialCells(xlCellTypeLastCell).Row 
myrange = "A2:N" & CStr(noOfrows)'Data from column A to column N 
Worksheets(Sheetname).Select 
Worksheets(Sheetname).Range(myrange).Select 
Selection.Copy 
Sheets("Recompile").Select   
Range("A2").Select 
ActiveSheet.Paste 

Next i 
End Sub 
+0

Список имен листов в 'Column AA' в' Мастер Sheet', он начинается в 'AA1'? – Manhattan

+0

Начало работы в AA2 – user2766881

+0

Отредактировано мое кодовое слово ниже. – Manhattan

ответ

1

Есть несколько вещей, которые не входят в ваш код. Увидев, что вы приближаетесь к этому процессу с использованием цикла итерации/цикла, возникает некоторая путаница. Моя основная проблема заключается в том, что вы используете ActiveSheet и Select и что ваши окончательные действия относятся только к одной ячейке (Range("A2"). Это означает, что результирующее действие каждой итерации изменяет только эту ячейку. Ниже приведен один возможный подход к этому.

Во-первых, вам нужно перебрать имена рабочих листов, найденные в Master Sheet, Column AA. Затем вам нужно проверить последнюю строку листа, соответствующую этому имени. На основе вашего кода диапазон ячеек от A2 до последней строки Column N скопирован на лист Recompile, начиная с ячейки A2 (я предполагаю, что у вас есть заголовки).

Однако после каждой копии вам необходимо сделать также три вещи: 1. Перейдите к следующему имени в списке имен листов. 2. Найдите новую последнюю строку листа, соответствующую следующему имени. 3. Найдите новую последнюю строку листа Recompile, чтобы вы могли начать работу.

Теперь вам нужно, чтобы это было так много раз, как есть листы. Логика это приводит к следующему коду (непроверенных, пожалуйста, в резервной копии вашей книги):

Private Sub Boom() 

    Dim ShMaster As Worksheet, ShRecompile As Worksheet 
    Dim ShName As String, RngToCopy As Range 
    Dim LRowSrc As Long, LRowRecompile As Long 'Src is other sheets 
    Dim LRowMaster As Long 'This will be our iteration limit. 
    Dim Iter As Long 

    With ThisWorkbook 
     Set ShMaster = .Sheets("Master Sheet") 
     Set ShRecompile = .Sheets("Recompile") 
    End With 

    LRowMaster = ShMaster.Cells(Rows.Count, 27).End(xlUp).Row 

    For Iter = 2 to LRowMaster 
     ShName = ShMaster.Cells(Iter, 27).Value 
     With ThisWorkbook.Sheets(ShName) 
      LRowSrc = .Cells(Rows.Count, 1).End(xlUp).Row 
      Set RngToCopy = .Range("A2:N" & LRowSrc) 
      RngToCopy.Copy 
     End With 
     With ShRecompile 
      LRowRecompile = .Cells(Rows.Count, 1).End(xlUp).Row + 1 
      .Range("A" & LRowRecompile).PasteSpecial xlPasteAll 
     End With 
    Next Iter 

End Sub 

Одним из основного предположения сделано здесь: что список имен листов начнутся в AA1. Это важно. Если это не так, измените Iter = 1 на Iter = n, где n - номер строки истинной стартовой ячейки вашего списка.

Сообщите нам, если это поможет.

ОБНОВЛЕНИЕ: Поскольку список начинается с , я обновил вышеуказанный код.

+0

Я не понимаю, что вы говорите. Правильно ли работает код или нет? Что именно нужно повторить? – Manhattan

+0

Могу ли я узнать, что такое LRowSrc? – user2766881

+0

'LRowSrc' - последняя строка для других листов. В принципе, он меняется на каждой итерации, потому что не все листы имеют одну и ту же последнюю строку. – Manhattan

0

Не тестировался

Изменить эту часть

Sheets("Recompile").Select   
Range("A2").Select 
ActiveSheet.Paste 

в

With Sheets("Recompile") 
    .Range("A" & .Rows.Count).End(xlUp).offset(1,0).Paste 
End With 
Смежные вопросы