L oop Через имена рабочих книг в диапазоне ячеек B3-B21 - PullRequest
0 голосов
/ 03 марта 2020

У меня есть код VBA, который открывает лист в рабочей книге и копирует определенный диапазон на тот же лист. Приведенный ниже код, как мне создать al oop, вместо того, чтобы копировать код снова и снова, изменяя ссылки на ячейки. вместо этого откройте лист в копии B3, откройте копию b4 et c до B27? Я посмотрел вокруг, но это могут быть поисковые термины, которые я использую, пока не могу найти разрешение:

Worksheets(Worksheets("Contents").Range("B3").Value).Activate Range("B2").Select

до go до следующего листа вручную измените B3 на b4, как я могу создать al oop, чтобы сделать это для определенного диапазона Bx?

полный код выполняется ниже

`Worksheets(Worksheets("Contents").Range("B3").Value).Activate
Range("B2").Select
Count rows in raw data

intRowsused = ActiveSheet.UsedRange.Rows.Count 'count rows used in the table

'Copy

Range("B3:T" & intRowsused).Copy

Sheets("Master Template").Select

Set rng = ActiveSheet.Range("A:T")

    lastRow = rng.Find(What:="*", After:=rng.Cells(1), Lookat:=xlPart, LookIn:=xlFormulas, SearchOrder:=xlByRows, SearchDirection:=xlPrevious, MatchCase:=False).Row

writeRow = lastRow + 1

Range("A" & writeRow).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False `

, любая помощь будет высоко оценена. Спасибо

Ответы [ 2 ]

0 голосов
/ 03 марта 2020

Так вы можете избежать использования select

Option Explicit 
Sub CopyToMaster()

    Dim wb As Workbook
    Dim wsContents As Worksheet, wsSource As Worksheet, wsTarget As Worksheet
    Dim rngSource As Range, rngTarget As Range, cell As Range
    Dim targetRow As Long

    Set wb = ActiveWorkbook ' or thisworkbook
    Set wsTarget = wb.Sheets("Master Template")
    Set wsContents = wb.Sheets("Contents")

    targetRow = wsTarget.Cells(Rows.Count, 1).End(xlUp).Row + 1

    For Each cell In wsContents.Range("B3:B5")
        Set wsSource = wb.Sheets(cell.Value)

        Set rngSource = wsSource.Range("B3:T" & wsSource.UsedRange.Rows.Count)
        rngSource.Copy

        Set rngTarget = wsTarget.Range("A" & targetRow)
        rngTarget.PasteSpecial Paste:=xlPasteValues

        targetRow = targetRow + rngSource.Rows.Count
    Next

    MsgBox "Copy complete", vbInformation
End Sub
0 голосов
/ 03 марта 2020

Вы можете отредактировать свой код, включив в него «For» l oop. Я бы просто заменил все ваши ссылки на B3 на «B & i».

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