Есть ли способ создать цикл, который проходит через набор кода, а затем смещает определенное число на следующих циклах - PullRequest
0 голосов
/ 08 ноября 2019

Я новичок в VBA. Я пытаюсь ввести значения из нескольких листов в блок «заголовка», который я создал в своей главной электронной таблице. У меня есть несколько листов с одинаковой информацией, но специфичной для этого набора данных. Я понял, как сделать первый блок заголовка из первого листа данных. Теперь мне интересно, могу ли я создать цикл, который смещает информацию на определенное количество и вводит информацию для следующих оставшихся листов. Если возможно, я хочу, чтобы это не зависело от того, сколько листов импортировано. Будь то 1 лист или 50 листов. Спасибо!

Вот мой код:

Private Sub Generate_Click()
'Set Header info for Raw Data


'Program Name Entry Sheet 2
 ActiveSheet.Next.Activate

Dim Part As Range

Set Part = ActiveSheet.Range("B1:B10").Find("Part Name")

Part.Offset(0, 1).Select
Selection.Copy
    Sheets("Variable Data").Select

Dim PName As Range

Set PName = ActiveSheet.Range("A1:AA10").Find("Program Name")

PName.Offset(0, 1).Select
ActiveSheet.Paste

'Program Rev Entry Sheet 2
ActiveSheet.Next.Activate
Dim Rev As Range

Set Rev = ActiveSheet.Range("B1:B10").Find("Revision Number")

Rev.Offset(0, 1).Select
Selection.Copy

Sheets("Variable Data").Select

Dim PRev As Range

Set PRev = ActiveSheet.Range("A1:AA10").Find("Program Rev")

PRev.Offset(0, 1).Select
ActiveSheet.Paste

'Program Date Entry Sheet 2
ActiveSheet.Next.Activate

Dim PDate As Range

Set PDate = ActiveSheet.Range("B1:B10").Find("Date")

PDate.Offset(0, 1).Select
Selection.Copy

Sheets("Variable Data").Select

Dim RDate As Range

Set RDate = ActiveSheet.Range("A1:AA10").Find("Run Date")

RDate.Offset(0, 1).Select
ActiveSheet.Paste

'Program Lot Entry Sheet 2
ActiveSheet.Next.Activate

Dim Serial As Range

Set Serial = ActiveSheet.Range("B1:B10").Find("Serial Number")

Serial.Offset(0, 1).Select
Selection.Copy

Sheets("Variable Data").Select

Dim Lot As Range

Set Lot = ActiveSheet.Range("A1:AA10").Find("Lot Number")
Lot.Offset(0, 1).Select
ActiveSheet.Paste

End Sub

1 Ответ

1 голос
/ 08 ноября 2019

РЕДАКТИРОВАТЬ: вы можете использовать такой подход

Private Sub Generate_Click()
'Set Header info for Raw Data

    Dim wb As Workbook, ws As Worksheet, wsVD As Worksheet
    Dim rngVDHeaders As Range, rowOffset As Long

    Set wb = ThisWorkbook

    'summary sheet and headers
    Set wsVD = wb.Worksheets("Variable Data")
    Set rngVDHeaders = wsVD.Range("A1:AA10")

    rowOffset = 1 'starting offset from header row

    'loop over all worksheets
    For Each ws In wb.Worksheets
        'excluding the summary sheet
        If ws.Name <> wsVD.Name Then
            'find and copy values to summary sheet
            With ws.Range("B1:B10")
                .Find("Part Name").Copy rngVDHeaders.Find("Program Name").Offset(rowOffset, 0)
                .Find("Revision Number").Copy rngVDHeaders.Find("Program Rev").Offset(rowOffset, 0)
                .Find("Date").Copy rngVDHeaders.Find("Run Date").Offset(rowOffset, 0)
                .Find("Serial Number").Copy rngVDHeaders.Find("Lot Number").Offset(rowOffset, 0)
            End With

        End If
        rowOffset = rowOffset + 1 'next line down
    Next ws


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